声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3468|回复: 10

[其他] 如何求两个信号的互相关函数?

[复制链接]
发表于 2006-12-2 20:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-12-4 11:18 | 显示全部楼层
matlab直接调用不就行了吗
发表于 2006-12-4 15:18 | 显示全部楼层
MATLAB中有个XCORR命令,自己在MATLAB里输一下看看用法吧
发表于 2006-12-4 20:03 | 显示全部楼层
如果你要求取延迟时间,你可以按照互相关的具体公式编写函数!如果你只是简单的求取互相关函数,你可以参考楼上所说的函数!
 楼主| 发表于 2006-12-5 16:46 | 显示全部楼层
谢谢大家啊,XCORR命令画的图形和计算的不太一样啊,相关度不可能那么大的,
 楼主| 发表于 2006-12-6 14:41 | 显示全部楼层
不会编啊,请高手指点迷津啊
发表于 2006-12-6 15:56 | 显示全部楼层
你把程序贴上来。
 楼主| 发表于 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=[rm(k+2:2*k) rm(1:k)];
m=(-k+1):(k-1);
plot(m,rm);
主要是不懂纵轴表示什么,最好是表示相关系数,
发表于 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;

评分

1

查看全部评分

 楼主| 发表于 2006-12-8 15:51 | 显示全部楼层
太感谢你了,你这种方法运算速度更快,不错。
请版主给你加精。
发表于 2007-3-21 11:26 | 显示全部楼层
songzy41 真强啊!!
我也用互相关函数来编写程序。我一直有个疑问,互相关函数表示的是两个信号的关联度,用该方法还能得到什么信息呢? :@)
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 19:08 , Processed in 0.059162 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表