shunfeng 发表于 2006-8-27 09:23

求两列波的相位差!谢谢

求助,知道两列波的离散数据,怎么用matlab求出两列波的相位差(小程序)。十分感谢!!!
str=[1.03516
-0.57129
-2.13867
-3.58887
-4.80957
-5.7373
-6.29883
-6.45996
-6.21582
-5.55664
-4.58496
-3.30566
-1.82129
-0.22461
1.37695
2.89063
4.21387
5.27832
6.00586
6.36719
6.32324
5.89355
5.10254
3.99414
2.62695
1.09375
-0.50781
-2.08496
-3.54004
-4.77539
-5.70801
-6.28418
-6.46484
-6.23535
-5.59082
-4.63379
-3.36426
-1.88477
-0.29297
1.31836
2.82715
4.16504
5.23438
5.97656
6.35742
6.32813
5.91797
5.13184
4.03809
2.68066
1.15723]

dis=[-0.32227
-0.99121
-1.61621
-2.19238
-2.57813
-2.94922
-2.95898
-3.39844
-2.82715
-2.87598
-2.40723
-1.98242
-1.51855
-0.96191
-0.52734
0.10742
0.94238
1.45996
1.53809
1.58203
2.05566
1.9873
1.47949
1.22559
0.49805
-0.30273
-0.83008
-1.4502
-1.89941]

sunning 发表于 2006-8-29 01:18

我用MATLAB算了一下,两列波的相位一样

songzy41 发表于 2006-8-29 20:37

不知sunning是用什么方法计算的,得到两个序列的相位一致。
要求两个序列之间的相位差,在电力系统中是一个永久的课题。最常用的是求一个电力容性设备的介质损耗,也就是计算电压和漏电电流(末屏电流)之间的相角。
我是利用序列的自相关和互相关之间的关系来求它们的夹角,“介质损耗带电检测数字化处理方法的研究”,文中给出了相关法的理论推导。
我的程序是:
str1=str1';
dis=dis';
n=1:29;
str=str1(n);
plot(n,str,'r','linewidth',2); hold on;
plot(n,dis,'b'); hold off; grid;
legend('str','dis');
fprintf('Correlation method:\n');
cosA = sum(str.*dis)/sqrt(sum(str.^2) * sum(dis.^2));
angle1 = acos(cosA)*180/pi
把上数据str改名为str1。计算结果为 22.1779°。两曲线的图如下。这两序列肯定没有22.1779°的相位差,这是什么原因产生的?主要是由于dis有较大的直流分量。

songzy41 发表于 2006-8-29 20:51

进一步对dis去直流项:
dmean=sum(dis)/29;
dis=dis-dmean;
其它计算与上帖完全一样,得到两序列的夹角是6.6631°,可见信号中混有直流分量对求相角有很大的影响。去除直流分量后的两曲线图如下。但这个结果还不能算这两序列之间相位差的正确结果。其原因是提供的dis信号共29个样点,不是整周期或整周期的倍数,用上方法不可能把直流分量完全去除,只是有所改善。要想进一步此改善,可以设法取数据长度是整周期或整周期的倍数,或把数据序列取得很长,这样用上方法可进一步减少直流分量。

sunning 发表于 2006-8-29 22:41

回答的很好,不过我不是搞这方面的,所以对于直流分量的影响不是很清楚,只是简单的把两列波的相位图画出来比较的。
页: [1]
查看完整版本: 求两列波的相位差!谢谢