xcorr函数_相关函数xcorr的用法及实例

相关函数

相关函数描述了两个信号之间的相似性,其相关性大小有相关系数衡量。

1.自相关函数

自相关函数是信号在时域中特性的平均度量,它用来描述随机信号x(t)在任意两个不同时刻s,t的

取值之间的相关程度,其定义式为:

自相关函数的主要性质:

(1)自相关函数为偶函数,其图形对称于纵轴。

(2)当s=t 时,自相关函数具有最大值,且等于信号的均方值,即

(3)周期信号的自相关函数仍为同频率的周期信号。

2.互相关函数

互相关函数是描述随机信号X(s),Y(t)在任意两个不同时刻s,t的取值之间的相关程度。

互相关函数的应用

互相关函数的上述性质在工程中具有重要的应用价值。

(1) 在混有周期成分的信号中提取特定的频率成分。

(2) 线性定位和相关测速。

在某些领域,自相关函数等同于自协方差。

matlab中提供了xcorr这个相关函数以供调用。但这个函数在使用中比较麻烦,本文将介绍这个函数的具体用法。

本文将详细介绍对应每个注释项Matlab是如何计算的,当然本文考虑输入的是一个简单一维序列

x=[2,3,4],序列中数据对应的序号依次为1,2,3。

第一:缺省注释项,[a,b]=xcorr(x),通过该命令计算的结果为:a=8 18 29 18 8; b=-2 -1 0 1 2。

下面介绍一下,该过程计算机是如何计算的,首先讲b的计算,设一维序列的长度为N,则序列中任意两个数据序号相减,最小值为1-N,最大值为N-1,且能取遍两者之间的所有整数,将这些数从小到大排列得到的就是b;然后讲a的计算,在缺省注释项的情况下,a的计算是这样的,a的每一项是对应b的每一项的

1、当b(1)=-2时,计算a(1)时只用到一组数据——(2,4)注意顺序,只有这两个数据的序号相减(后面数据的序号减去前面的)满足b=-2,因此a(1)的计算公式为:2*4=8

2、当b(2)=-1时,计算a(2)时用到两组数据——(2,3)和(3,4),这两组数据的序号相减(后面数据的序号减去前面的)满足b=-1,因此a(2)的计算公式为:2*3+3*4=18

3、当b(3)=0时,计算a(3)时用到三组数据——(2,2)、(3,3)、(4,4),这三组数据的序号相减(后面数据的序号减去前面的)满足b=0,因此a(3)的计算公式为:2*2+3*3+4*4=29

其它类推。

第二:注释项为‘unbiased’,[a,b]=xcorr(x,‘unbiased’),通过该命令计算的结果为:

a=8.0000 9.0000 9.6667 9.0000 8.0000;b=-2 -1 0 1 2。

1、当b(1)=-2时,计算a(1)时只用到一组数据(记N=1)——(2,4)注意顺序,只有这两个数据的序号相减(后面数据的序号减去前面的)满足b=-2,因此a(1)的计算公式为:(2*4)/1=8

2、当b(2)=-1时,计算a(2)时用到两组数据(记N=2)——(2,3)和(3,4),这两组数据的序号相减(后面数据的序号减去前面的)满足b=-1,因此a(2)的计算公式为:(2*3+3*4)/2=9

即在原结果的基础上除以用到的数据的组数。

第三:注释项为‘biased’,[a,b]=xcorr(x,‘biased’),通过该命令计算的结果为:a= 2.6667 6.0000 9.6667 6.0000 2.6667,b=-2 -1 0 1 2。下面介绍计算机如何计算该过程,注意到本次计算用到的序列x的长度为3,记为M=3。

1、当b(1)=-2时,计算a(1)时只用到一组数据——(2,4)注意顺序,只有这两个数据的序号相减(后面数据的序号减去前面的)满足b=-2,因此a(1)的计算公式为:(2*4)/M= 2.6667

2、当b(2)=-1时,计算a(2)时用到两组数据——(2,3)和(3,4),这两组数据的序号相减(后面数据的序号减去前面的)满足b=-1,因此a(2)的计算公式为:(2*3+3*4)/M=6

3、当b(3)=0时,a(3)的计算公式为:29/M= 9.6667

即在原结果的基础上除以序列x的长度。

第四:注释项为‘coeff’,[a,b]=xcorr(x,‘coeff’),通过该命令计算的结果为:a= 0.2759 0.6207 1.0000 0.6207 0.2759,b=-2 -1 0 1 2,这种情况实际是将第三种情况下得到的结果进行归一化,使得b=0时对应的值为1,a(1)= 2.6667 /9.6667=0.2759;a(2)=6/9.6667= 0.6207 ,

a(3)=9.6667/9.6667=1。

互相关情况:

假设 x=[2,3,4];y=[3,4,5];则语句[a,b] = xcorr(x,y)的运行结果为:

a =

10.0000 23.0000 38.0000 25.0000 12.0000

b =

-2 -1 0 1 2

原因是相同的:当b=-2时,只有x里面的元素2和y里面的元素5符合条件,因此b(-2)=10,其它的类推。

为了对相关函数的作用有一个直观的认识,下面给出一个应用实例:

n=6000;

fs=1000;

t=(0:n-1)/fs;

f0=5;

x=sin(2*pi*f0*t);

z=x+randn(size(x));

[R,ttt]=xcorr(z,1000,'coeff');

subplot(2,1,1);

plot(t(1:1000),z(1:1000));

xlabel('时间/s');

ylabel('幅值');

subplot(2,1,2);

plot(ttt,R);

xlabel('滞后');

ylabel('自相关函数');

运行结果为:

4d9013a25c0bc5d1239cb6a0ef19785c.png

从运行结果可以看出,自相关函数把被噪声污染了的正弦波提取了出来。

本文作者基于这个思想出发,试图将一段被噪声污染的音频信号恢复出来,但没有成功,恢复的结果是留下了噪音,里面的音乐被去除了,这里给出相应代码,欢迎有兴趣的朋友一起讨论。

fs=44100;

[x,fs]=audioread('addnoise.mp3');

[R,ttt]=xcorr(x,840000);

filename = 'filterafter.wav';

audiowrite(filename,R,44100);

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值