新浪博客

互相关与卷积

2014-05-08 20:42阅读:

互相关

设两个函数分别是f(t)和g(t),则互相关函数定义为:

它反映的是两个函数在不同的相对位置上互相匹配的程度。

线性卷积

在泛函分析中,是通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与经过翻转和平移的g的重叠部分的累积。如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是'移动平均'的推广。

理解卷积的物理含义也许有点难,但是理解其计算却是相对容易,东南大学的数字信号课程里做了一个线性卷积的动画演示:http://zlgc.seu.edu.cn/jpkc2/ipkc/signal/new/course/one/flash/juanji_swf.htm
因此,我们很容易理解,卷积和相关是相似的,两者就是多了一个旋转过程而已,卷积要先对Y轴旋转!
用卷积来表示相关就是:
通常来说,计算卷积都是在频域进行的,这主要是利用了FFT变换的卷积定理

快速傅里叶转换(FFT)计算卷积,在时域(time domain)做卷积相当于这两个信号的离散傅里叶转换在频域(frequency domain)做相乘。
因此,matlabz中计算相关和卷积都是在频域计算的,再转回时域,这可以简单用代码来验证一下:

Matlab计算互相关函数xcorr,计算卷积函数conv;

C = xcorr(x,y,'option'),如果xy长度不同,matlab会自动给短向量后面补零,最终长度length=2*max(n,m)-1;
'biased'为有偏的互相关函数估计;
'unbiased'为无偏的互相关函数估计;
'coeff'0延时的正规化序列的自相关计算;
'none'为原始的互相关计算,也是默认模式;
Z= conv(x,y,'shape'),两向量长度不需要一致,最后卷积长度length=n+m-1;
'full'为默认模式,返回全部卷积(n+m-1);
'same',返回中间部分卷积,长度与x相同(n);
'valid',返回中间没有用零填充部分的卷积值,用滑动窗的方法解释的话,就是第2个窗口能够完全被第一个窗口重合、包含的部分(max(n-max(0,m-1),0),因此如果n<m的话,返回值就不存在)

% 卷积法计算互相关的验证程序
dt=0.1;
t=[0:dt:100];
x=5*sin(4*t);
y=3*cos(3*t);
[a,b]=xcorr(x,y);
plot(b*dt,a);
yy=3*cos(3*fliplr(t)); % Y为轴对称翻转 yy=fliplr(y);
c=conv(x,yy);
err = a-c;
subplot(3,1,1);
plot(b*dt,a,'k');
title('Corr','fontsize',16);xlabel('Logs','fontsize',12);
subplot(3,1,2);
plot(b*dt,c,'r');
title('Conv','fontsize',16);xlabel('Logs','fontsize',12);
subplot(3,1,3);
plot(b*dt,err,'g');
title('Error','fontsize',16);xlabel('Logs','fontsize',12);
% 这里误差小于1e-13,本人认为是由matlab的数值误差所引起,可以忽略。




我的更多文章

下载客户端阅读体验更佳

APP专享