我对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
循环?
答案 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);
使用两个矩阵 x
和y
,我假设您希望x
中所有信号与{{1}中的所有信号之间的互相关函数}}。 y
无法开箱即用。但是,如果两个矩阵都有xcorr
行,则可以编写
n
获取c = xcorr([x, y]);
或 x
中所有信号之间的自相关和互相关函数。 y
的大小为c
x 2*n-1
,其中(p1+p2)^2
和p1
是两个矩阵中的信号(列)数。然后,您可以重新整形并截断结果:
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
希望这会有所帮助!