2010-03-15 86 views
2

我想知道如果有人能指点我一个很好的教程或告诉我如何绘制字节数组的幅度。我使用的音频格式是:U LAW 8000.0 Hz,8位,单声道,1字节/帧。图形幅度

+0

这取决于你的意思*振幅*。你想*瞬时*幅度,或平滑的RMS /峰值幅度?或者甚至频域幅度对频率(功率谱,频谱图等)? – 2010-03-15 16:30:39

+0

我不确定我需要什么。基本上,我需要尝试检测某人何时开始和停止说话。 – 2010-03-15 16:36:16

+0

确定 - 这种类型的算法被称为语音活动检测(VAD) - 它用于回声消除和各种其他电信应用。我会在下面的答案中添加更多...... – 2010-03-15 17:10:25

回答

6

这听起来像您对短期平滑的RMS振幅测量感兴趣。通常要做到这一点,你需要对输入信号进行整形,然后对其施加一个低通滤波器。

x1 = abs(x); // x2 = rectified input signal 
x2 = k * x2 + (1 - k) * x1; // simple single pole low pass recursive filter 

x2是信号x的幅度。 k是确定平滑滤波器的时间常数的因子< 1.0。

然后,您将获得某种阈值,您可以使用该阈值来决定您处于静默状态(x2 < threshold)还是语音(x2 >= threshold)。

+0

是的,这是我正在寻找,谢谢。当你说:x2是信号x的幅度;什么是'x'(对不起,我一直在为此工作很长时间)。另外,有没有一种很好的方法来计算k值应该具有的值还是存在常用值? – 2010-03-15 18:24:15

+0

x是当前采样时间的输入值(如果有帮助,可以将输入数据流视为数组x []]。通常k会介于0.9到0.99之间,但是你会想要试验这个和阈值等等,以获得你想要的行为,从你在“沉默”和“语言”之间切换的速度有多快,你想要多少误报/消极等等。 – 2010-03-15 18:45:33

+0

再一次感谢你的帮助。由于编码的缘故,我是否需要做任何不同的事情? – 2010-03-15 19:01:12

0

阅读关于Fourier transform。但它只是你需要做的所有事情的一部分,以达到你想要的。

+0

可怜的回答 - 它并没有真正告诉任何关于图形幅度的人。 – 2010-03-15 16:31:45

+0

@ Paul R:当我需要做类似的事情时,我必须阅读约50页的文章,才能理解原理。这不是一个简单的问题。 – Roman 2010-03-15 16:33:58

+0

我知道你在说什么,我已经完成了对dft和fft的研究。这是有趣的问题。 – 2010-03-15 16:41:15