如何用matlab 实现自相关和互相关?

如何用matlab 实现自相关和互相关?,第1张

一、如何实现:

求自相关函数

1、dt=.1

2、t=[0:dt:100]

3、x=cos(t)

4、[a,b]=xcorr(x,'unbiased')

5、plot(b*dt,a)

互相关函数:

1、dt=.1

2、伏郑t=[0:dt:100]

3、x=cos(t)

4、[a,b]=xcorr(x,y,'unbiased')

相关系数只是一个比率,不是等单位量度,无什么单位名称,也不是相关的百分数,一般取小数点后两位来表示。

相关系数的正负号只表示相关的方向,绝对值表示相关的程度。因为不是等单位的度量,因而不能说相关系数0.7是0.35两倍,只能说相关系数为0.7的二列变量相关程度比相关系数为0.35的二列变量相关程郑谈度更为密切和喊厅碰更高。也不能说相关系数从0.70到0.80与相关系数从0.30到0.40增加的程度一样大。

1. 首先说说自相关和互相关的概念。

这个是信号分析里的概念,他们分别表示的是两个时间序列之间和同一个时间序列在任意两个不同时刻的取值之间的相关程度,即互相关函数是描述随机信号

x(t),y(t)在任意两个不同时刻t1,t2的取值之间的相关程度,自相关函数是描述随机信号x(t)在任意两个不同时刻t1,t2的取值之间的相关

程度。

自相关函数是描述随机信号X(t)在任意两个不同时刻t1,t2的取值之间的相关程度;互相关函数给出了在频域内两个信号是否相关的一个判断指标,把两测点之间信号的互谱与各自的自谱联系了起来。它能用来确定输出信号有多大程度来自输入信号,对修正测量中接入噪声源而产生的误差非常有效.

事实上,在图象处理中,自相关和互相关函数的定义如下:设原函数是f(t),则自相关函数定义为R(u)=f(t)*f(-t),其中*表示卷积;设两个

函数分别是f(t)和g(t),则互相关函数定义为R(u)=f(t)*g(-t),它反映的是两个函数在不同的相对位置上互相匹配的程度。

那么,如何在matlab中实现这两个相关并用图像显示出来呢?

dt=.1

t=[0:dt:100]

x=cos(t)

[a,b]=xcorr(x,'unbiased')

plot(b*dt,a)

上面代码是求自相关函数并作图,对于互相关函数,稍微修改一下就可以了,即把[a,b]=xcorr(x,'unbiased')改为[a,b]=xcorr(x,y,'unbiased')便可。

2. 实现过程:

在Matalb中,求解xcorr的过程事实上是利用Fourier变换中的卷积定理进行的,即R(u)=ifft(fft(f)×fft(g)),其中

×表示乘法,注:此公式仅表示形式计算,并非实际计算所用的公式。当然也可以直接采用卷积进行计算,但是结果会与xcorr的不同。事实上,两者既然有定

理保证,首兄那么结果一定是相同的,只是没有用对公式而已。下面是检验两者结果相同的代码:

dt=.1

t=[0:dt:100]

x=3*sin(t)

y=cos(3*t)

subplot(3,1,1)

plot(t,x)

subplot(3,1,2)

plot(t,y)

[a,b]=xcorr(x,y)

subplot(3,1,3)

plot(b*dt,a)

yy=cos(3*fliplr(t))% or use: yy=fliplr(y)

z=conv(x,yy)

pause

subplot(3,1,3)

plot(b*dt,z,'r')

即在xcorr中不使用scaling。

3. 其他相关问题:

(1)相关程度与相关函数的取值有什么联系?

相关系数只是一个比率,不是等单位量度,无什么单位名称,也不是相关的百分数,一般取小数点后两位来表示。相关系数的正负号只表示相关的方向,绝对值表示相关的程度。因为不是等单位的度量,因而不能说相关系禅芹桐数0.7是0.35两倍,只能说相关系数为0.7的二列变量相关程度比相关系数为0.35的二列变量相关程度更为密切和更高。也不能说相关系数从0.70到0.80与相关系数从0.30到0.40增加的程度一样大。

对于相关系数的大小所表示的意义目前在统计学界尚不一致,但通常是这样认为的:

相关系数 相关程度

0.00-±0.30微相关

±0.30-±0.50 实相关

±0.50-±0.80 显著相关

±0.80-±1.00 高度相关

(2)matlab计算自相关函数autocorr和xcorr有什么不一样的?

分别用这两个函数对同一个序列计算,为什么结果不太一样?因为xcorr是没有将均值减掉做的相关,autocorr则是减掉了均值的。而且,用离散信号做自相关时,信号截取长度(采样点N)不一样,自相关函数就不一样。

(3)xcorr是计算互相关函数,带有一个option的参数:

a=xcorr(x,y,'option')

option=baised时,是计算互相关贺坦函数的有偏估计;

option=unbaised时,是计算互相关函数的无偏估计;

option=coeff时,是计算归一化的互相关函数,即为互相关系数,在-1至1之间;

option=none,是缺省的情况。

所以想要计算互相关系数,可用'coeff'参数。

用这个xcorr函数作离散互相关运算时要注意,当x, y是不等长向量时,短的向量会自动填0与长的对齐,运算结果是行向量还是列向量就与x一样。

互相关运算计算的是x,y两组随机数据的相关程度,使用参数coeff时,结果就是互相关系数,在-1至1之间,否则结果不一定在这范围,有可能很大也有可能很小,这视乎x, y数据的大小,所以一般要计算两组数据的相关程度,一般选择coeff参数,对结果进行归一化。

所谓归一化简单理解就是将数据系列缩放到-1到1范围,正式的就是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。变换式为X=(X实测--Xmin)/(Xmax-Xmin)。

一般来说选择归一化进行互相关运算后,得到结果绝对值越大,两组数据相关程度就越高。

自相关函数是描述随机信号X(t)在任意两个不同时刻t1,t2的取值之间的相关程度脊毁滚.设原函数是f(t),则自相关函数定义为R(u)=f(t)*f(-t),其中*表示卷余明积.

给个例子:

dt=.1

t=[0:dt:100]

x=cos(t)

[a,b]=xcorr(x,'unbiased')

plot(b*dt,a)

上面代码是求自相关函数并作图,

matlab中查看帮助时,

help xcorr 解释其意思是:

C(m) = E[A(n+m)*conj(B(n))] = E[A(n)*conj(B(n-m))];

但是,在调用xcorr函数求自相关时,有 scaleopt参数

r=xcorr(s,SCALEOPT)

SCALEOPT有

'biased' - scales the raw cross-correlation by 1/M.

'unbiased' - scales the raw correlation by 1/(M-abs(lags)).

'樱余coeff'- normalizes the sequence so that the auto-correlations

at zero lag are identically 1.0.

'none' - no scaling (this is the default).

注意观察下面的测试:

s = [1 2 3]

r = xcorr(s)

r =

3.00008.0000 14.00008.00003.0000

当用r=xcorr(s,'unbiased')时就能得到

r =3.00004.00004.66674.00003.0000


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12453295.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存