使用短时能量和过零率

信息处理 声音的
2022-01-30 07:33:40

我正在尝试从 wav 文件(44100Hz)中识别单词的声音区域。我的研究给了我一个想法,我必须使用“短时能量”和“零交叉率”。但问题是我不清楚编写代码的公式。因此,如果有人可以指导我获得非常清晰的伪代码,我将不胜感激。而且,如果有人能告诉我使用它的顺序,我也会非常感激。提前致谢。

1个回答

音频块的音频处理 FFT 这将为您提供作为时间和频率函数的短期能量。

过零本身很容易编码(这个例子是概念性的,但效率很低)

x0 = x(1); 
for i = 2:length(x)
  x1 = x(i);
  if (x0 > 0 && x1 < 0) || (x0 < 0 && x1 > 0)
     % you have a zero crossing
     doSomethingWithAZeroCrossing(i);
  end
  x0 = x1; 
end

然而,过零对音频信号中的良性且通常不相关的变化相当敏感,因此过零的用处有限。尤其

  1. 即使是少量的噪声也会产生大量额外的过零并“抖动”现有的过零
  2. 直流偏移的波动或极低频噪声(如空调或加热风扇拿起我的麦克风)将零交叉移动到整个地方