tkw*_*954 8 algorithm performance signal-processing fft
我想知道是否有人知道计算周期信号的平均方差函数(ASDF)或平均幅度差函数(AMDF)的快速(即O(N log(N))方法,或者甚至可能.
我知道可以使用FFT来计算周期性互相关.例如,在Matlab代码中,
for i=1:N
xc(i)=sum(x1*circshift(x2,i-1));
end
Run Code Online (Sandbox Code Playgroud)
相当于快得多
xc=ifft(fft(x1).*conj(fft(x2));
Run Code Online (Sandbox Code Playgroud)
是否有类似的"快速"算法
for i=1:N
ASDF(i)=sum((x1-circshift(x2,i-1)).^2)/N;
end
Run Code Online (Sandbox Code Playgroud)
要么
for i=1:N
AMDF(i)=sum(abs(x1-circshift(x2,i-1)))/N;
end
Run Code Online (Sandbox Code Playgroud)
?
您可以按如下方式扩展ASDF的定义:
for i = 1:N
asdf(i) = (sum(x1.^2) - 2*sum(x1*circshift(x2,i-1)) + sum(x2.^2))/N;
end
Run Code Online (Sandbox Code Playgroud)
这简化为
asdf = (-2*ifft(fft(x1).*conj(fft(x2))) + sum(x1.^2) + sum(x2.^2))/N;
Run Code Online (Sandbox Code Playgroud)