2013-03-14 173 views
4

我想获得音频信号的过零率。我试着写这个公式的代码:如何计算信号的过零率?

enter image description here

,但我不明白excatly整个公式。

要处理我的代码,我按块分割信号,我的意思是“帧阻塞”。例如,每个块的长度是512(有512个信号样本)。让我说我有100块。那么过零率是否会为每个区块返回一个值?我的意思是根据公式我会有100个整个信号的值吗?

而且我不明白w()的意思。它是用于开窗的海明?它如何计算n-m?这很可能是一个负数?

我很困惑请帮帮我吗?

+0

这听起来不错更像是一个数学问题,而不是程序员的一个 – Nolonar 2013-03-14 16:52:15

+0

信号中有多少个zcr? 100或100 * 512? – Cengaver 2013-03-14 16:58:33

+0

而不是被关闭,也许这应该被移动到dsp.stackexchange.com或math.stackexchange.com或任何更合适的地方。 – 2014-03-19 18:09:44

回答

6

忘掉公式 - 当你试图用这种方式表达时,它会变得更加复杂。

过零率是信号在给定时间段(通常为一秒)内改变符号的次数。这就是你需要知道的一切。通常情况下,您只对速度从负向正向或反向正向变化感兴趣,而不是每次标志变化。查看从负值变为正值的次数可以用作信号频率的代表。

至于w(n-m)是什么,这是一个window function。这是什么改变了你的公式从“信号有多少次过零?到“信号在最后n个采样中过零的次数是多少次?”。老实说,它有点让我的眼睛越过,所以不要因为不理解而感到难过 - 它也让我感到困惑。对于过零率,我们将选择一个窗口函数,使w在某个范围内返回1,否则返回零。 (这被称为矩形窗口)。为这种窗口表达这个公式的一种更好的方法是忘记“开窗”作为一般概念,并限制西格玛的界限(对不起,我不知道如何在SO上表达公式):

Z_n (m)= sum_ {m = xn}^0 | sign [x(m)] - sign [x(m-1)] |

如果n =您的采样率,这会以Hz为单位给出您的过零率。这更有意义:没有更多的w和没有更多的无限!你使用的源代码可能包含了这个窗口,试图推广,但在这种情况下,没有什么可以获得的(据我所知 - 但我什么都不知道!)

+0

感谢您的回答。我得到了你,但我不明白在公式中w(n-m)的诡计。你可以露出它吗? – Cengaver 2013-03-20 10:00:06

+0

我添加了对w的解释。 – 2013-03-20 15:36:17