geminiysu 发表于 2006-12-2 20:36

如何求两个信号的互相关函数?

如何求两个信号的互相关函数?

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 编辑 ]

hyzxg 发表于 2006-12-4 11:18

matlab直接调用不就行了吗

wo512542384 发表于 2006-12-4 15:18

MATLAB中有个XCORR命令,自己在MATLAB里输一下看看用法吧

lovejunior1133 发表于 2006-12-4 20:03

如果你要求取延迟时间,你可以按照互相关的具体公式编写函数!如果你只是简单的求取互相关函数,你可以参考楼上所说的函数!

geminiysu 发表于 2006-12-5 16:46

谢谢大家啊,XCORR命令画的图形和计算的不太一样啊,相关度不可能那么大的,

geminiysu 发表于 2006-12-6 14:41

不会编啊,请高手指点迷津啊

songzy41 发表于 2006-12-6 15:56

你把程序贴上来。

geminiysu 发表于 2006-12-7 14:55

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);
主要是不懂纵轴表示什么,最好是表示相关系数,

songzy41 发表于 2006-12-8 09:39

楼主用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;

geminiysu 发表于 2006-12-8 15:51

太感谢你了,你这种方法运算速度更快,不错。
请版主给你加精。

jgh530520 发表于 2007-3-21 11:26

songzy41 真强啊!!
我也用互相关函数来编写程序。我一直有个疑问,互相关函数表示的是两个信号的关联度,用该方法还能得到什么信息呢? :@)
页: [1]
查看完整版本: 如何求两个信号的互相关函数?