根据互相关定理:两个信号之间的互相关等于一个信号的傅立叶变换乘以另一个信号的傅立叶变换的复共轭的乘积。这样做之后,当我们取乘积信号的 ifft 时,我们会得到一个峰值,它表示两个信号之间的偏移。
我无法理解这是如何工作的?为什么我会得到一个表明两个信号之间偏移的峰值。我从: http ://mathworld.wolfram.com/Cross-CorrelationTheorem.html得到了数学, 但我无法直观地理解这意味着什么。有人可以提供一些解释或指出正确的文件吗?
谢谢!
根据互相关定理:两个信号之间的互相关等于一个信号的傅立叶变换乘以另一个信号的傅立叶变换的复共轭的乘积。这样做之后,当我们取乘积信号的 ifft 时,我们会得到一个峰值,它表示两个信号之间的偏移。
我无法理解这是如何工作的?为什么我会得到一个表明两个信号之间偏移的峰值。我从: http ://mathworld.wolfram.com/Cross-CorrelationTheorem.html得到了数学, 但我无法直观地理解这意味着什么。有人可以提供一些解释或指出正确的文件吗?
谢谢!
该概念基于卷积定理,该定理指出对于两个信号和, 他们的傅里叶变换的乘积和等于两个信号卷积的傅里叶变换。那是:
您可以在上面的 Wikipedia 链接中阅读有关该定理推导的更多信息。现在,卷积本身对于线性系统来说是一个非常重要的运算,因此关于它的性质的理论已经很成熟了。
但是,您正在寻找的是和. 这是关键:如果输入信号之一是共轭和时间反转的,则互相关积分等效于卷积积分。这使您可以利用为评估卷积而开发的理论(例如用于快速计算它们的频域技术)并将它们应用于相关性。
在您的示例中,您正在计算以下内容:
回想一下,在傅里叶域中,复共轭等效于时域中的时间反转(这直接来自傅里叶变换的定义)。因此,使用上面给出的第一个等式,我们可以声明:
如果你然后对这个方程进行傅里叶逆变换,你剩下的信号就是和.
% Matlab function for frequency domain cross correlation
function [Lag,C]=xcorrf(X,Y,L)
% X, Y ---> Input vectors
% L ---> maximum lag (must be less than minimum of (length of X, Y)
% C ---> correlation vector
% Lag ---> lag times
X=X(:);
Y=Y(:);
s1=size(X);
s2=size(Y);
D=min(s1(1,1),s2(1,1));
for i=1:L
X1=ifft(fft(X(1:D-i,:)).*conj(fft(Y(i+1:D,1))));
C(i,1)=X1(1,1);
end
C=flipud(C);
X1=ifft(fft(X(1:D,:)).*conj(fft(Y(1:D,1))));
C(L+1,1)=X1(1,1);
for i=1:L
X1=ifft(fft(Y(1:D-i,:)).*conj(fft(X(i+1:D,1))));
C(i+L+1,1)=X1(1,1);
end
Lag=-L:1:L;
end