c# – 如何计算信号的过零率?
作者:互联网
我想获得音频信号的过零率.我试着编写这个公式的代码:
但我不是很了解整个公式.
为了处理我的代码我用块分割信号,我的意思是“帧阻塞”.例如,每个块的长度为512(有512个信号样本).让我们说我有100个街区.那么过零率是否会为每个块返回一个值?我的意思是根据公式,我对整个信号有100个值吗?
而且我也不明白w()的意思.是用于窗口的汉明吗?它如何计算n-m?它很可能是一个负数?
我很困惑请帮帮我?
解决方法:
忘记公式 – 当你试图用这种方式表达时,它会变得更复杂.
过零率是信号在给定时间段(通常为一秒)内改变符号的次数.这就是你需要知道的全部.通常,您只对从负数变为正数或反之亦然的速率感兴趣,而不是每次符号变化时.查看从负到正的次数可以用作信号频率的代理.
关于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,没有更多的无限!您使用的源可能包含窗口以试图概括,但是,在这种情况下,没有任何东西可以获得(据我所知 – 但我不知道一切!)
标签:c,audio,naudio,audio-processing 来源: https://codeday.me/bug/20190529/1179190.html