查看: 11210|回复: 46

[绘图技巧] 互相关函数图像的横坐标问题

  [复制链接]
发表于 2007-3-29 15:39 | 显示全部楼层 |阅读模式

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

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

x
以下是我编程的例子,主要求两个信号的相位差,按照某篇参考资料的说法,t_max对应的值就应该是它们的相位差,但是这个程序中做出的互相关函数的横坐标不是-40到+40,而是0到1200,请问这个横坐标表示的是什么意思呢?
n=99;%设定每周期数据采集点数
T=6;%采样周期数
t=0:2*pi/(n-1):2*T*pi;%采样数
y1=4*sin(t);%信号1
y2=8*sin(t+pi/6);%信号2,相位差取pi/6
Cc=xcorr(y1,y2);%求互相关函数
[y_max,t_max]=max(Cc)%找出Cc的最大值及对应的t_max
subplot(311); plot(t,y1); grid;
subplot(312); plot(t,y2); grid;
subplot(313); plot(Cc); grid;

[ 本帖最后由 ChaChing 于 2009-5-5 18:35 编辑 ]

相位.fig

38.84 KB, 下载次数: 297

本例作图

回复
分享到:

使用道具 举报

发表于 2007-3-29 18:30 | 显示全部楼层
楼主得到的互相关函数,其横坐标是样点数。因为Cc长为1177,绘图中便按1~1177排列。信号y1和y2分别长589,在计算互相关函数时从-588计算到588,共有1177个互相关系数,中心点是589。
计算出的t_max =597应和中心点求差值,算出差几个样点,再进一步求出相应的相位差。我把程序稍作修改为:
n=99;                              %设定每周期数据采集点数
T=6;                               %采样周期数
t=0:2*pi/(n-1):2*T*pi;             %采样数
N=length(t);
fs=1/(n-1);
y1=4*sin(t);                       %信号1
y2=8*sin(t+pi/6);                  %信号2,相位差取pi/6
Cc=xcorr(y1,y2);                   %求互相关函数
[y_max,t_max]=max(Cc)              %找出Cc的最大值及对应的t_max

sample_delay=t_max-N;              %计算与中心点相差的样点数
T_sig=(N-1)/6;                     %求信号一个周期的样点数,一个周期相对应于2*pi
delay1=pi/6                        %pi/6的弧度
delay2=2*pi*sample_delay/T_sig     %计算与中心点相差的样点数所对应的弧度值
这样计算出pi/6=0.5236,而从相关函数最大值处求出的相位差是0.5129。

评分

1

查看全部评分

 楼主| 发表于 2007-3-29 19:37 | 显示全部楼层
:lol :handshake :victory: 哦,太谢谢你啦,很明白的解释!!!多谢指导!!!:victory:
斑竹快给他加分吧:@)

还有一个小问题,楼上知道为什么相关函数求得的最大的值所对应的时间差就是这两个信号的相位差呢?:loveliness:

[ 本帖最后由 ChaChing 于 2009-10-10 11:48 编辑 ]
发表于 2007-3-29 20:08 | 显示全部楼层
对于单频信号而言,时移等于相移,相关系数从初始值变成最大值的时候,说明相位差也从初始相位差变为零。

评分

1

查看全部评分

发表于 2007-5-20 12:23 | 显示全部楼层
我想问一下,如果信号是sin(a*t)和sin(a*(t+dt))如何得到dt,很多文献都说用相关函数法(互相关函数最大值对应的)得到时间差,可我也用上面的程序做了就是不对
我给的dt=6.7433e-005,而通过程序计算出的时间差为 3.2057e-009,好像与a的值有关。

[ 本帖最后由 ChaChing 于 2010-1-8 13:21 编辑 ]

cross_fun_cyc.m

900 Bytes, 下载次数: 130

我的程序

 楼主| 发表于 2007-6-19 19:38 | 显示全部楼层
楼上想求的也是相位差吧,我编了一个程序,可以利用互相关函数的算式编,求出来的结果相当精确哦,嘿嘿,介绍你看一篇文章,里面有方法哦:lol 《基于虚拟仪器的相位测量算法研究》----电测与仪表,白鹏等著!

互相关函数求相位差.doc

93.5 KB, 下载次数: 465

这是我求相位差的两种方法,可以参考一下

点评

赞成: 5.0
赞成: 5
  发表于 2016-12-27 09:42
太好了,终于有解决办法了  发表于 2015-11-24 09:27

评分

1

查看全部评分

发表于 2007-11-1 13:16 | 显示全部楼层

回复 #6 jgh530520 的帖子

下不来、

[ 本帖最后由 ChaChing 于 2010-6-11 13:09 编辑 ]
发表于 2007-11-1 13:27 | 显示全部楼层
发表于 2007-12-2 20:35 | 显示全部楼层
非常感谢
发表于 2008-6-15 16:34 | 显示全部楼层
原帖由 songzy41 于 2007-3-29 18:30 发表
楼主得到的互相关函数,其横坐标是样点数。因为Cc长为1177,绘图中便按1~1177排列。信号y1和y2分别长589,在计算互相关函数时从-588计算到588,共有1177个互相关系数,中心点是589。
计算出的t_max =597应和中心点求 ...

N/6为什么是(N-1)/6?
发表于 2008-6-15 16:45 | 显示全部楼层
原帖由 jgh530520 于 2007-6-19 19:38 发表
楼上想求的也是相位差吧,我编了一个程序,可以利用互相关函数的算式编,求出来的结果相当精确哦,嘿嘿,介绍你看一篇文章,里面有方法哦:lol 《基于虚拟仪器的相位测量算法研究》----电测与仪表,白鹏等著!

你的程序比较准确,但是如果相差2*pi的整数倍+最小相位差时,没法求出最小值

比如两点之间距离wx/v=相位差,sin(w(t-x/v)),并不能求出准确的距离,怎么办??
发表于 2008-12-11 16:30 | 显示全部楼层

明白点了

多谢这么多高手,感觉自己得多学习呀
发表于 2009-3-5 15:30 | 显示全部楼层
看着你们的帖子我是深有感触啊!我决定要好好把这门语言学好了啊!!:handshake
发表于 2009-4-10 16:47 | 显示全部楼层

回复 楼主 jgh530520 的帖子

谢谢大家的工作
发表于 2009-4-19 12:35 | 显示全部楼层

求助

老师布置了自相关函数的作业,自己编程实现任意函数的自相关,不得调用xcorr,我想用积分方式,但是不知如何处理公式中的 时间t和‘tao’两个变量。下面是我调用的xcorr实现的,不符合老师的要求。请各位高手帮帮忙!
%***************2.正弦波***************%
%(1).时域波形
t=0:pi/500:4*pi;
N=length(t)-1;
y=sin(t);
subplot(211)
plot(t,y);
axis([0,4*pi,-1,1]);
title('正弦时域波形图');
xlabel('t');
ylabel('y');
grid;
%(2).自相关分析
[c,lags]=xcorr(y,'unbiased');%求自相关函数
subplot(313)
plot(lags/N*4*pi,c);%作自相关波形
xlim([0,4*pi]);
xlabel('t');
ylabel('自相关函数值Rx(t)');
title('正弦波自相关分析');
grid;
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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