我有一个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
的函数由于
答案 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)
计算包络的另一种(简单)方法是通过输入语音的全/半波整流并将其传递通过低通滤波器。滤波器的截止频率决定了你想要包络的“波浪/平滑”。
此方法在计算上可能比峰值查找和插值更有效。