一、函数调用格式及说明
r=xcorr(x,y)
返回两个离散时间序列的互相关。互相关反映向量x和移位(滞后)向量y之间的相似性,形式为滞后的函数。如果x和y的长度不同,函数会在较短向量的末尾添加0,使其长度与另一个向量相同。
r
(
n
)
=
∑
k
=
−
∞
∞
x
(
k
)
y
(
n
+
k
)
r(n)=\sum_{k=-∞}^{∞}x(k)y(n+k)
r(n)=k=−∞∑∞x(k)y(n+k)
r=xcorr(x)
返回x的自相关序列。如果x为矩阵,则r也是矩阵,其中包含x所有列组合的自相关和互相关序列;
如果x为M×N矩阵,则xcorr(x)返回 ( 2 M − 1 ) × N 2 (2M-1)×N^2 (2M−1)×N2矩阵;如果指定了maxlag,则r的大小为 ( 2 × m a x l a g + 1 ) × N 2 (2×maxlag+1)×N^2 (2×maxlag+1)×N2
-
r=xcorr(__,maxlag)
maxlag规定为整数标量,将滞后范围限制为从-maxlag到maxlag;如果没有指定maxlag,则滞后范围等于2N-1,其中N是x和y中较长一方的长度。 -
r=xcorr(__,scaleopt)
指定归一化选项。
scaleopt-归一化选项 | 说明 |
---|---|
‘none’(默认) | 原始、未缩放的互相关。当x和y长度不同时,'none’是唯一有效的选项 |
‘biased’ | 互相关的有偏估计: R x y , b i a s e d ( m ) = 1 N R x y ( m ) R_{xy,biased(m)}=\frac{1}{N}R_{xy(m)} Rxy,biased(m)=N1Rxy(m) |
‘unbiased’ | 互相关的无偏估计: R x y , u n b i a s e d ( m ) = 1 N − ⌈ m ⌉ R x y ( m ) R_{xy,unbiased(m)}=\frac{1}{N-\left \lceil m\right \rceil}R_{xy(m)} Rxy,unbiased(m)=N−⌈m⌉1Rxy(m) |
‘normalized’或’coeff’ | 对序列进行归一化,使零滞后时的自相关等于1: R x y , c o e f f ( m ) = 1 R x x ( 0 ) R y y ( 0 ) R x y ( m ) R_{xy,coeff(m)}=\frac{1}{\sqrt{R_{xx}(0)R_{yy}(0)}}R_{xy(m)} Rxy,coeff(m)=Rxx(0)Ryy(0)1Rxy(m) |
5.[r,lags]=xcorr(__)
还返回用于计算相关性的滞后,lags为滞后索引,以向量形式返回。
二、函数应用示例
1. 两个向量的互相关
%%%%%%%%%% 示例1:计算x和y两个向量的互相关 %%%%%%%%%%
n=0:15;
x=0.84.^n; %x的长度N=16
y=circshift(x,5); %x右移5个元素,circshift是一个循环移位函数
[c,lags]=xcorr(x,y); %计算结果c的长度为2N-1
stem(lags,c); %stem函数用于绘制火柴梗图,在lags的指定点处按照茎状形式画出数据序列c,以圆圈终止,lags大小与c一致
%在x和y的元素完全匹配的滞后值(-5)处,出现最大峰值。
2. 向量的自相关
%%%%%%%%%% 示例2:计算向量x的自相关 %%%%%%%%%%
n=0:15;
x=0.84.^n; %x的长度N=16
[c,lags]=xcorr(x); %计算结果c的长度为2N-1=31
stem(lags,c); %lags值为-15到15,长度与c一致
%在零滞后时(此时x与自身完全匹配),出现最大峰值
3.归一化的互相关
%%%%%%%%%% 示例3:计算归一化的互相关 %%%%%%%%%%
n=0:15;
x=0.84.^n;
y=circshift(x,5);
[c,lags]=xcorr(x,y,10,'normalized'); %使用单位峰值计算并绘制向量x和y的归一化互相关,并指定最大滞后为10
stem(lags,c); %c和lags均为长度为21的向量
三、线性卷积与互相关
线性卷积的定义为:
y
(
n
)
=
∑
k
=
−
∞
∞
x
(
k
)
h
(
n
−
k
)
y(n)=\sum_{k=-∞}^{∞}x(k)h(n-k)
y(n)=k=−∞∑∞x(k)h(n−k)
互相关的定义为:
y
(
n
)
=
∑
k
=
−
∞
∞
x
(
k
)
h
(
n
+
k
)
y(n)=\sum_{k=-∞}^{∞}x(k)h(n+k)
y(n)=k=−∞∑∞x(k)h(n+k)
可以看出,线性卷积与互相关的区别在于计算之前是否存在反褶,其计算思路是一致的,都是通过滑窗的思想。
clear all;
close all;
clc;
x1=[1,1,3,4,2];
x2=[1,3,2];
N=length(x1);
M=length(x2);
% 线性卷积:先将x2反褶,然后滑动x2计算结果
y1=conv(x1,x2); % 计算x1和x2的线性卷积,线性卷积结果的长度为L=N+M-1
% 互相关:x1和x2的长度不同,先在较短向量的末尾添加0,然后滑动x2计算结果
y2=xcorr(x1,x2); % 计算x1和x2的互相关,互相关结果的长度为L=2N-1