【问题标题】:How to compute zero crossing rate of signal? [closed]如何计算信号的过零率? [关闭]
【发布时间】:2013-03-03 03:44:50
【问题描述】:

我想获得音频信号的过零率。我试着写了这个公式的代码:

但我并不完全理解整个公式。

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

而且我也不明白 w() 的意思。是我用来开窗的汉明吗?它如何计算n-m?很可能是负数?

我很困惑,请帮帮我?

【问题讨论】:

  • 这听起来更像是一道数学题,而不是程序员题
  • 一个信号中有多少个zcr? 100 还是 100*512?
  • 与其关闭,不如将其移至 dsp.stackexchange.com 或 math.stackexchange.com 或更合适的地方。

标签: c# audio naudio audio-processing


【解决方案1】:

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

过零率是信号在给定时间段(通常为一秒)内改变符号的次数。这就是你需要知道的。通常,您只对它从负变为正或反之亦然的速率感兴趣,而不是每次符号变化时。查看它从负到正的次数可以用作信号频率的代理。

至于 w(n-m) 的含义,那就是window function。这就是改变您的公式回答的问题的原因,即“信号有多少次过零?”到“信号在最后 n 个样本中过零多少次?”。老实说,这有点让我眼花缭乱,所以不要因为不理解而感到难过——它也让我感到困惑。对于过零率,我们将选择一个窗口函数,使得 w 在一定范围内返回 1,否则返回零。 (这称为矩形窗口)。为这种窗口表达这个公式的更好方法是忘记“窗口”作为一般概念,并限制 sigma 的界限(对不起,我不知道如何在 SO 上表达公式):

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

如果 n = 您的采样率,这将为您提供以 Hz 为单位的过零率。这更有意义:没有更多的 w 也没有更多的无穷大!您使用的源可能包含了窗口以试图概括,但是,在这种情况下,没有任何收获(据我所知 - 但我不知道一切!)

【讨论】:

  • 感谢您的回答。我得到了你,但我不明白公式中 w(n-m) 的必要性。你能解释一下吗?
  • 我加了w的解释
猜你喜欢
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2014-07-14
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多