如何插入语音中检测到的局部最大值?

时间:2014-11-05 09:25:48

标签: matlab speech-recognition

我有一个matlab代码,用于查找语音的局部最大值。我设法在同一图表中绘制原始语音和局部最大值。但是,我想执行线性插值,以便通过连接局部最大值在同一图表中显示语音的包络。我应该怎么做? 这是代码:

    a=wavread('F3.wav');
    peaks = localMaximum(a,[100]); 
figure; plot(a); hold on; plot(peaks,a(peaks),'ro');

localMaximum是来自http://www.mathworks.com/matlabcentral/fileexchange/14498-local-maxima---minima

的函数

由于

2 个答案:

答案 0 :(得分:1)

试试这个:

% just some test data
a=randn(1,1000);
peaks = localMaximum(a,[100]); 

figure; plot(a); hold on; plot(peaks,a(peaks),'ro');

% values where to interpolate
x = 1:length(a);
% interpolate
v = interp1(peaks,a(peaks),x,'linear');
% visualize
plot(x,v,'g-');

但为什么插值。同样可以通过以下方式显示:

plot(peaks,a(peaks),'g-');

答案 1 :(得分:0)

计算包络的另一种(简单)方法是通过输入语音的全/半波整流并将其传递通过低通滤波器。滤波器的截止频率决定了你想要包络的“波浪/平滑”。

此方法在计算上可能比峰值查找和插值更有效。