我不明白它是如何工作的?为什么我会得到一个峰值,指示两个信号之间的偏移。我从以下网址获得了数学公式:http://mathworld.wolfram.com/Cross-CorrelationTheorem.html
,但我无法理解这在直觉上意味着什么。有人可以提供一些解释或指向正确的文档吗?
谢谢!
#1 楼
该概念基于卷积定理,该定理表明对于两个信号$ x(t)$和$ y(t)$,它们的傅里叶变换$ X(f)$和$ Y(f)$的乘积相等对两个信号的卷积进行傅立叶变换。即:$$
\ mathcal {F} \ {x(t)* y(t)\} = \ mathcal {F} \ {x(t)\} \ mathcal {F} \ {y(t)\}
$$
您可以在上面的Wikipedia链接上了解有关该定理推导的更多信息。现在,卷积本身对线性系统来说是非常重要的运算,因此关于其性质的理论已经得到很好的发展。
但是,您要查找的是$ x(t)$和$ y(t)$之间的互相关。这是关键:如果输入信号之一是共轭的并且经过时间反转,那么互相关积分就等于卷积积分。这样,您就可以利用为评估卷积而开发的理论(例如用于快速计算卷积的频域技术)并将其应用于相关。
在您的示例中,您将计算以下内容:
$$
\ mathcal {F} \ {x(t)\} \ left(\ mathcal {F} \ {y(t)\} \ right)^ *
$$
回想一下,在傅立叶域中,复共轭等效于时域中的时间反转(这直接源自傅立叶变换的定义)。因此,使用上面给出的第一个方程,我们可以说:
$$
\ mathcal {F} \ {x(t)* y ^ *(-t)\} = \ mathcal {F} \ {x(t)\} \ left(\ mathcal {F} \ {y(t)\} \ right)^ *
$$
如果然后对该方程进行傅立叶逆变换,剩下的信号就是$ x(t)$和$ y(t)$之间的互相关。
#2 楼
% 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
评论
$ \ begingroup $
您能否编辑您的回复,并提供更多有关该代码应如何回答原始张贴者问题的信息?
$ \ endgroup $
– A_A
16-09-21在11:26
$ \ begingroup $
我想我知道他在用这段代码去哪里,但是我不得不说,如果您使用长度超过100个样本的任何向量X和Y来运行此代码,则在等待时您必须喝杯茶。
$ \ endgroup $
–歌声
17年5月21日在14:41
$ \ begingroup $
不能单独提供代码
$ \ endgroup $
–基础
18年1月1日在14:03
评论
谢谢迪利普。我知道我会遇到多个高峰。这个高峰分别代表什么?为何在进行ifft作业时会出现多个峰?我已经阅读了关于互相关定理的数学证明,但是我不知道如何解释它。更像是将一个信号的FT与另一个信号的共轭相乘表示什么?它的物理意义是什么?该代码无法正常工作。即使x和y分别为100和l = 50
,该代码仍会出现一些错误,例如索引超过矩阵维数