<分区>
我想要获得音频信号的过零率。我试着写了这个公式的代码:
但我并不完全理解整个公式。
为了处理我的代码,我按 block 拆分信号,我的意思是“帧阻塞”。例如每个 block 的长度是 512(有 512 个信号样本)。假设我有 100 个街区。那么过零率是否会为每个 block 只返回一个值?我的意思是,根据公式,整个信号的值是 100 吗?
而且我也不明白 w() 的意思。我用来开窗的是汉明吗?它如何计算 n-m?很可能是负数?
我很困惑,请帮帮我好吗?
<分区>
我想要获得音频信号的过零率。我试着写了这个公式的代码:
但我并不完全理解整个公式。
为了处理我的代码,我按 block 拆分信号,我的意思是“帧阻塞”。例如每个 block 的长度是 512(有 512 个信号样本)。假设我有 100 个街区。那么过零率是否会为每个 block 只返回一个值?我的意思是,根据公式,整个信号的值是 100 吗?
而且我也不明白 w() 的意思。我用来开窗的是汉明吗?它如何计算 n-m?很可能是负数?
我很困惑,请帮帮我好吗?
最佳答案
忘掉公式——当你试图用这种方式表达它时,它会使它变得更复杂。
过零率是信号在给定时间段(通常为一秒)内改变符号的次数。这就是您需要知道的全部内容。通常,您只对它从负变为正或从负变为正的速率感兴趣,而不是每次符号变化时。查看它从负变为正的次数可以用作信号频率的代理。
至于 w(n-m) 是什么,那是一个 window function .这就是您的公式从“信号曾经过零多少次?”中回答的问题发生变化的原因。到“信号在最后 n 个样本中过零多少次?”。老实说,这有点让我眼花缭乱,所以不要因为不理解它而难过——它也让我感到困惑。对于过零率,我们将选择一个窗口函数,使得 w 在一定范围内返回 1,否则返回 0。 (这称为矩形窗口)。为这种窗口表达此公式的更好方法是忘记“窗口化”作为一般概念,并限制 sigma 的界限(抱歉,我不知道如何在 SO 上表达公式):
Z_n(m) = sum_{m=x-n}^0|sign[x(m)] - sign[x(m-1)]|
如果 n = 您的采样率,这将为您提供以赫兹为单位的过零率。这更有意义:不再有 w,也不再有无穷大!您使用的来源可能包含窗口以试图概括,但是,在这种情况下,没有任何收获(据我所知 - 但我不是什么都知道!)
关于c# - 如何计算信号的过零率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415271/