2009-06-10 3 views
7

Мне интересно, знает ли кто-нибудь о быстром (например, O (N log (N))) методе вычисления среднеквадратичной разностной функции (ASDF) или функции разности средних значений (AMDF) для периодический сигнал, или это даже возможно.Быстрая среднеквадратичная функция разности

Я знаю, что можно использовать БПФ для вычисления периодической взаимной корреляции. Например, в Matlab код,

for i=1:N 
xc(i)=sum(x1*circshift(x2,i-1)); 
end 

эквивалентно гораздо быстрее

xc=ifft(fft(x1).*conj(fft(x2)); 

Есть ли подобная "быстрый" алгоритм

for i=1:N 
ASDF(i)=sum((x1-circshift(x2,i-1)).^2)/N; 
end 

или

for i=1:N 
AMDF(i)=sum(abs(x1-circshift(x2,i-1)))/N; 
end 

?

ответ

6

Вы можете расширить определение ASDF следующим образом:

for i = 1:N 
    asdf(i) = (sum(x1.^2) - 2*sum(x1*circshift(x2,i-1)) + sum(x2.^2))/N; 
end 

, который упрощает для

asdf = (-2*ifft(fft(x1).*conj(fft(x2))) + sum(x1.^2) + sum(x2.^2))/N; 
+1

Высокий. Отлично. Ваш код работает в 550 раз быстрее на Matlab для N = 1024. Спасибо – tkw954