如何求两个信号的互相关函数?
如何求两个信号的互相关函数?sig1(1:200)=cos(w*(1:200)+5);
sig1(201:501)=cos(w*(201:501)+12);
sig2(1:404)=cos(w*(1:404)+5);
sig2(405:501)=cos(w*(405:501)+15);
如何求两个信号的互相关函数?纵坐标是相关系数,横坐标是数据长度,
谢谢
[ 本帖最后由 zhlong 于 2007-6-4 17:22 编辑 ] matlab直接调用不就行了吗 MATLAB中有个XCORR命令,自己在MATLAB里输一下看看用法吧 如果你要求取延迟时间,你可以按照互相关的具体公式编写函数!如果你只是简单的求取互相关函数,你可以参考楼上所说的函数! 谢谢大家啊,XCORR命令画的图形和计算的不太一样啊,相关度不可能那么大的, 不会编啊,请高手指点迷津啊 你把程序贴上来。 fs=1000;
t=0:1/fs:1;
w=15;
x=cos(w*t+15);
y=sin(w*t+17);
k=length(x);
xk=fft(x,2*k);
yk=fft(y,2*k);
rm=real(ifft(conj(xk).*yk));
rm=;
m=(-k+1):(k-1);
plot(m,rm);
主要是不懂纵轴表示什么,最好是表示相关系数, 楼主用FFT的方法来求相关时要注意,其中数据怎么安排是一个需要了解的问题。从楼主的程序来看求出的是循环相关函数。楼主要求相关系数,其数学表达式应为:
rm(n)=Rxy(n)/sqrt(Rxx(0)*Ryy(0))
我用xcorr函数来计算,程序如下:
fs=1000;
t=0:1/fs:1;
w=15;
x=cos(w*t+15);
y=sin(w*t+17);
k=length(x);
Rxy=xcorr(x,y);
Rxx0=sum(x.*x);
Ryy0=sum(y.*y);
rm=Rxy/sqrt(Rxx0*Ryy0);
m=(-k+1):(k-1);
plot(m,rm);
grid; 太感谢你了,你这种方法运算速度更快,不错。
请版主给你加精。 songzy41 真强啊!!
我也用互相关函数来编写程序。我一直有个疑问,互相关函数表示的是两个信号的关联度,用该方法还能得到什么信息呢? :@)
页:
[1]