我想获得音频信号的过零率。我试着编写这个公式的代码:
但我并不兴奋地理解整个公式。
为了处理我的代码我用块分割信号,我的意思是“帧阻塞”。例如,每个块的长度为512(有512个信号样本)。让我们说我有100个街区。那么过零率是否会为每个块返回一个值?我的意思是根据公式,我对整个信号有100个值吗?
而且我也不明白w()的意思。是用于窗口的汉明吗?它如何计算n-m?它很可能是一个负数?
我很困惑请帮助我?
答案 0 :(得分:6)
忘记公式 - 当你试图用这种方式表达时,它会变得更加复杂。
过零率是信号在给定时间段(通常为一秒)内改变符号的次数。这就是你需要知道的全部。通常,您只对从负数变为正数或反之亦然的速率感兴趣,而不是每次符号变化时。查看它从负到正的次数可以用作信号频率的代理。
关于w(n-m)的全部内容,那是window function。这就是改变你的公式所回答的问题“从多少次信号过零?”到“在最后n个样本中信号过零的次数是多少?”老实说,它有点让我的眼睛交叉,所以不要因为不理解它而感到难过 - 它也让我感到困惑。对于过零率,我们将选择一个窗口函数,使得w将在某个范围内返回1,否则为零。 (这称为矩形窗口)。为这种窗口表达这个公式的更好方法是忘记“窗口”作为一般概念,并限制西格玛的界限(抱歉,我不知道如何在SO上表达公式):
Z_n(m)= sum_ {m = x-n} ^ 0 | sign [x(m)] - 符号[x(m-1)] |
如果n =您的采样率,这将为您提供以Hz为单位的过零率。这更有意义:没有更多的w,没有更多的无限!您使用的源代码可能包含了窗口以试图概括,但是,在这种情况下,没有任何东西可以获得(据我所知 - 但我不知道所有内容!)