Функция быстрой средней квадратичной разницы

Мне интересно, знает ли кто-нибудь о быстром (т.е. 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

or

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

?


person tkw954    schedule 10.06.2009    source источник


Ответы (1)


Вы можете расширить свое определение 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;
person mtrw    schedule 10.06.2009
comment
Потрясающий. Идеально. Ваш код работает в 550 раз быстрее на Matlab для N=1024. Спасибо - person tkw954; 10.06.2009