xcorr函数的用法和程序举例
xcorr函数返回两个离散时间序列的互相关。互相关测量向量 x 和移位(滞后)副本向量y 的之间的相似性,形式为滞后的函数。如果 x 和 y 的长度不同,函数会在较短向量的末尾添加零,使其长度与另一个向量相同。
一、语法
1.语法(1)
r = xcorr(x,y)
r = xcorr(x,y) 返回两个离散时间序列的互相关。互相关测量向量 x 和移位(滞后)副本向量 y 的之间的相似性,形式为滞后的函数。如果 x 和 y 的长度不同,函数会在较短向量的末尾添加零,使其长度与另一个向量相同。
举例:
clc
clear all
x=[1 2 3]
y=[5 7]
s_k=xcorr(x,y)
运行结果:
图1 互相关函数xcorr(x,y)的使用
从图1中我们可以看到,计算的结果长度为L=2*max([length(x),length(y)])-1=2*max([3,2])-1=2*3-1=5
2.语法(2)
r = xcorr(x)
r = xcorr(x) 返回 x 的自相关序列。如果 x 是矩阵,则 r 也是矩阵,其中包含 x 的所有列组合的自相关和互相关序列。
举例2
clc
clear all
y=[5 7]
r=xcorr(y)
运行结果
图2 互相关函数xcorr(y)的使用
3.语法(3)
r = xcorr(___,maxlag)
r = xcorr(___,maxlag) 将上述任一语法中的滞后范围限制为从 -maxlag 到 maxlag。
clc
clear all
x=[1 2 3]
y=[5 7]
maxlag=1
s_k=xcorr(x,y,maxlag)
运行结果:
图3 xcorr(x,y,maxlag)函数的用法
从图3中可以看出,xcorr(x,y,1)得到的序列长度,要比xcorr(x,y)序列短,即maxlag存在,限制了其相关计算范围。
4.语法(4)
r = xcorr(___,scaleopt)
r = xcorr(___,scaleopt) 还为互相关或自相关指定归一化选项。除 ‘none’(默认值)以外的任何选项都要求 x 和 y 具有相同的长度。
此处的scaleopt 为归一化选项:可以设置为五种方式之一:‘none’ (默认) 、 ‘biased’ 、 ‘unbiased’ 、‘normalized’ 、 ‘coeff’。其中,设置为 ‘biased’ 、 ‘unbiased’ 、‘normalized’ 、 'coeff’后四种时候,要求x的长度和y的长度相等。
例子:
clc
clear all
x=[1 2 3]
y=[5 7 11]
r_normalized = xcorr(x,y,'normalized')
运行结果
图4 xcorr(x,y,‘normalized’)函数的使用
注意:xcorr(x,y,‘normalized’)中的向量x和向量y必须等长度。
5.语法(5)
[r,lags] = xcorr(___)
[r,lags] = xcorr(___) 除了返回r,还返回用于计算相关性的滞后lags。
举例:
clc
clear all
x=[1 2 3]
y=[7 8 9]
[r_unbiased,lags_unbiased] = xcorr(x,y,'unbiased')
运行结果
图5 [r,lags] = xcorr(___)函数的用法举例
二、特殊举例
为了展示该函数的应用,本部分采用两个比较特殊的向量进行xcorr计算:
x=[1 2 3 0 0 0 0 1 2 3 0 0 0 0 1 2 3 0 0 0 0 1 2 3 0 0 0 0 1 2 3 0 0 0 0]
y=[1 2 3]
其中,y向量内容在x向量中重复出现多次,具有周期性。
具体程序为:
clc
clear all
x=[1 2 3 0 0 0 0 1 2 3 0 0 0 0 1 2 3 0 0 0 0 1 2 3 0 0 0 0 1 2 3 0 0 0 0]
y=[1 2 3]
[r_biased,lags_biased] = xcorr(x,y,'none')
figure(101)
plot(lags_biased,r_biased)
xlabel('lags_{biased}')
ylabel('r_{biased}')
运行结果:
图6 xcorr计算的特殊举例