【问题标题】:Fast Average Square Difference Function快速平均平方差函数
【发布时间】:2010-11-01 16:23:15
【问题描述】:

我想知道是否有人知道计算周期信号的平均平方差函数 (ASDF) 或平均幅度差函数 (AMDF) 的快速(即 O(N log(N)) )方法,或者它甚至是可能的。

我知道可以使用 FFT 来计算周期性互相关。例如,在 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

?

【问题讨论】:

    标签: algorithm signal-processing fft performance


    【解决方案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;
    

    【讨论】:

    • 太棒了。完美的。对于 N=1024,您的代码在 Matlab 上运行速度快 550 倍。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2013-08-30
    • 2014-10-02
    • 2019-01-30
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多