两个矩阵之间的xcorr

时间:2014-02-19 09:41:14

标签: matlab matrix cross-correlation

我对MATLAB中的xcorr函数有疑问。

目前这个函数可以计算矩阵的自相关,但不能计算2个矩阵的互相关:

A=[1,2;3,4];
B=[5,6;7,8];

xcorr(A); %% Possible
xcorr(A,A); %% Not Possible
xcorr(A,B); %% Not Possible

您是否了解执行此操作的任何解决方法,但未使用for循环?

3 个答案:

答案 0 :(得分:2)

要处理矩阵之间的互相关,只需使用它的第2版:xcorr2

所以计算自相关只是

xcorr2(A)

同时找到两个矩阵的互相关

xcorr2(A,B)

例如,使用A,B,结果为:

 8    23    14
30    70    38
18    39    20

答案 1 :(得分:2)

xcorr基本上有两种语法。

c = xcorr(x, y)

计算两个标量信号(作为矢量给出)和

之间的互相关函数
c = xcorr(x)
如果x是一个向量,

计算信号的自相关函数,如果它是一个矩阵,则x的所有列之间的自相关和互相关函数。如果x的大小为n x p,则c的大小为2*n-1 x p^2

写作时

c = xcorr(x, y);

使用两个矩阵 xy,我假设您希望x中所有信号与{{1}中的所有信号之间的互相关函数}}。 y无法开箱即用。但是,如果两个矩阵都有xcorr行,则可以编写

n

获取c = xcorr([x, y]); x中所有信号之间的自相关和互相关函数。 y的大小为c x 2*n-1,其中(p1+p2)^2p1是两个矩阵中的信号(列)数。然后,您可以重新整形并截断结果:

p2

结果是一个三维矩阵,其中第一维对应于滞后,第二维对c = reshape(c, 2*n-1, p1+p2, p1+p2); c = c(:, 1 : p1, p1+1 : end); 中的信号进行枚举,第三维枚举x中的信号;其大小为y x 2*n-1* x p1

答案 2 :(得分:0)

万一有人在寻找相同的问题,这里是xcorr的实现,它将用于矩阵A的所有列与矩阵{{1}的所有列的滞后互相关}。与Donda的答案非常相似,除了它避免了不必要的列比较的4倍不必要的计算。这段代码大部分是从内置的MATLAB B函数中剥离和修改的。

xcorr

希望这会有所帮助!