2014-11-05 2 views
0

У меня есть код 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

Благодарности

ответ

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-'); 
+0

Спасибо @Steffen, ваш ответ очень высоко ценится. Идея интерполяции приходит после прочтения статьи. На самом деле я хочу показать конверт. ваш код работает для моей ситуации. Однако, как я могу отобразить пик? Я добавляю следующую строку, но ошибка показала, что «индекс превышает размер матрицы». Я добавляю этот код «plot (пики, a (пики),« g - »), удерживайте, график (пики, a (пики,« ro »)); – user3471465

+0

Ops sorry, ok @ steffen..I знаю, где код ошибочно добавлен ... Это скобка. Тем не менее, я действительно хочу поблагодарить вас. Боже, благослови вас! – user3471465

0

другой (простой) способ расчета огибающей является полным/полуволнового выпрямления входного речевого сигнала и передачи его через фильтр нижних частот. Частота среза фильтра определяет, как «squiggly/smooth» вам нужен конверт.

Этот метод может быть вычислительно более эффективным, чем поиск пиков и интерполяция.

+0

спасибо @Akshay Rao .. уверенно заметьте на этом. – user3471465