如何在奈奎斯特中找到声音的平均值/平均值

时间:2010-08-08 21:45:54

标签: lisp audio mean audacity

我正在尝试为Audacity编写一个简单的测量插件,它就像撞击我的头骨一样有趣。我想做的就是取一大块音频并找到所有样本的平均值(块DC offset),这样我就可以将它作为一个数字呈现给用户,这样我就可以减去DC偏移从样品中进行进一步处理。我知道并理解我想做的数学,但我不明白如何在Lisp / XLisp / Nyquist /中做到这一点。

Background information in this thread

据我所知,没有任何功能可以做到这一点。出于某种原因,snd-avg function实际上并不像您预期​​的那样计算声音的平均值。 首先执行绝对值,然后计算平均值计算平均值,然后计算绝对值。即使有一个单独的snd-abs功能可以做到这一点。 >:(

所以我想我必须写自己的?这意味着将声音转换为数组,然后计算其平均值?

  

(snd-fetch-array sound len step)

     

读取   来自的连续样本数组   声音,返回一个数组   FLONUMs或NIL时的声音   终止。

     

(snd-samples sound limit)

     

转换   将样本转换为lisp数组。

Nyquist Functions

而且甚至没有平均功能,所以我也要自己做一笔钱吗?但数学函数只适用于列表?所以我需要将数组转换为列表?

对于更长的波形(每个样本18个字节),这也会占用大量内存,因此最好以块的形式处理它并执行cumulative average。但我甚至不知道如何做未经优化的版本。

不,(hp s 0.1)无效,因为:

  1. 我只想删除DC,并保持任意低频。 0.01 Hz应保持不变,应移除DC。
  2. 高通滤波器是因果关系,无论你使用什么膝关节频率,波形的第一个样本都保持不变,这使得它无法用于测量峰值样本等。

1 个答案:

答案 0 :(得分:0)

NEVERMIND

snd-maxsamp计算绝对值,而不是snd-avgsnd-avg工作得很好。以下是如何从中挤出一个数字(“FLONUM”):

(snd-fetch (snd-avg s (round len) (round len) OP-AVERAGE))

这会产生阴性样本的负数和正样本的正数,正如它应该的那样。

是否应删除此问题或将其作为示例留给其他人?