c# - 如何计算信号的过零率?

标签 c# audio naudio audio-processing

<分区>

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

enter image description here

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

为了处理我的代码,我按 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/

相关文章:

c# - NAudio PlaybackState 永不停止?

c# - NAudio MeteringSampleProvider 没有触发事件?

c# - 组合框自定义项和数据绑定(bind)项

json - Webservice-多种文件输出格式

audio - 如何让不和谐机器人在语音 channel 中说出字符串/短语。 (就像文字转语音的东西)

html - 无法在Phonegap应用中使用HTML5音频标签播放音频

c# - 如何使用 NAudio 将任何音频格式转换为 mp3

c# - 为什么 Active Directory 会验证最后一个密码?

c# - 健康检查端点生成的 HealthReport 对象结构卡住 Swagger 文档页面

c# - C#中如何销毁一个对象