我要加入 登录
声振论坛 返回首页

zhwang554的个人空间 http://home.vibunion.com/?62061 [收藏] [复制] [分享] [RSS]

日志

网上用fft测相位的问题

已有 1503 次阅读2009-9-24 21:15 |个人分类:apfft|

网上经常提出用fft测相位的问题,收集如下:

1  ALUCARD 2006-03-11 19:57在研学论坛的帖子<大家是如何求某一频率信号的相位的>

我指的是离散信号。用傅利叶变换求吗?

http://bbs.matwav.com/viewthread.php?tid=456628

2 啦啦啦啦 2006-6-10 21:51  CPUBBS论坛的帖子<求助:用FFT测两波形相位差>

求助程序代码图,大哥,你要知道就告诉我吧!有相关资料也可以啊~~~

www.cpubbs.com/bbs/thread-15185-1-1.html 79K 2009-7-27

3  w89986581  2007-4-26 17:39 在振动论坛的帖子<如何准确确定信号中强线谱的相位>

如何准确确定信号中强线谱的相位?求fft变换谱的相位?跳变怎么处理的?
http://www.chinavib.com/forum/viewthread.php?tid=41548

 
4  Dajiao 2007-5-28 13:56在振动论坛的帖子<频谱分析中的相位谱问题!!!!!>

我做的设计是虚拟频谱分析仪,但是我用"频谱测量.vi"所得到的频谱中相位谱怎么和理论上差距那么大?谱线乱七八糟的.不知道该怎么处理一下.希望能给于帮助!!

http://www.chinavib.com/forum/thread-44490-1-9.html

 

5  lovemafel 2007-7-18 11:40:00在中电网技术论坛的帖子<相位谱中提取初相位>

我使用FFT(幅值-相位)进行分析,幅值频谱我可以取得50Hz信号的有效值,但相位谱如何得到50Hz的信号的初始相位

http://bbs.eccn.com/ecbbs/dispbbs.asp?boardID=70&ID=35231&page=1

 

6  dichen 2007-8-17 11:30 在振动论坛的帖子<在Matlab中如何实现求两个信号的相位差?>

matlab中如何实现两个多频率成分信号在各频率点的相位差?多谢。

http://www.chinavib.com/forum/viewthread.php?tid=50382#

7  Ellen1 2007-9-6 08:55   在61IC电子工程师社区的帖子<怎样用FFT算法测相位差?>

我现在在做一个相位差的测量,查资料有用FFT 算法测的,但是经过FFT变换以后该怎么样处理就不是很清楚,请教各位大虾!

http://www.61ic.com/bbs/viewthread.php?tid=5150

8  wcke 2007-9-20 10:25在振动论坛发表于的帖子<如何计算FFT的相位精度>

12位AD采样,128点FFT求相位,设无频谱泄漏,相位精度能达到多少?如何计算?谢谢大家帮我解答一下,不甚感激

http://www.chinavib.com/forum/viewthread.php?tid=52111

9 一只鸟仔2008-2-23 10:44在 研学论坛发表于的帖子<【讨论】相位谱在信号分析中有什么作用?>

我记得我们在对一个时域函数求它的频谱时,所得到的是复振幅,如果不含 j 的话,我们可以在一个坐标系上就把它的频谱表示出来,但是如果显含 j 的话,我们不得不单独描绘它的振幅谱和相位谱了。这就让我想到一个问题,振幅谱的物理意义好理解,并且,它在波形形成中的作用很明确,那么相位谱呢,它的意义何在,当然了,肯定是有作用的了,只是我还没弄清楚,哪位大侠能够点拨一二!越详细越好!

 
10  fandia 2008-07-17 18:50阿果石油网的帖子<请教:如何计算相位谱>
请问如何计算相位谱,或谁有计算相位谱的文献资料,借我看看,不胜感激

 

11 cone大象无形2008-11-30 18:00 在浙江大学飘渺水云间FreeCity的帖子<关于FFT的相位谱zz>

昨天收到一条消息,发送消息的人表示出对FFT相位谱的忧虑,他给出了一段Matlab程序,显示了FFT的相位谱并没有真实反映正弦信号的初相。

今天我研究了一下这个问题,得到了一些比较有启发的结论。本来想直接以消息的形式对问题进行答复,但是考虑到消息中不太好控制图片的显示方式,而且这个问题如果能和更多的人进行讨论,想必会得到更多的启发,所以直接发到了这里。
     先看一下我收到的程序,作为研究对象的信号是这样产生的:
T=128;
N=128;
dt=T/N;
t=dt*(1:N);
x=2*cos(2*t-pi/4);
...
      (我觉得这个信号存在一点问题,因为t是从1开始的,所以它的初相应该和-pi/4有点差别吧。)
      为什么进行FFT,用angle得到相位-频率特性却不能反映这个信号的初始相位?
      胡广书的《数字信号处理-理论、算法与实现(第二版)》第三章第八节《关于正弦信号抽样的讨论》,得出了关于正弦信号抽样的六个结论,最后总结了一个总的原则:抽样频率应为信号频率的整数倍,抽样点数应包含整周期。
      书中的结论五与采样频率和抽样点数有很大的关联。结论五主要说只有满足了上面的那个总的原则,频谱泄漏才不会发生。我想不光是幅度谱的频谱泄漏现象,抽样频率和抽样点数同样会对相位谱产生影响。
      考虑一个无限长的正弦信号(相当于初相为-90°),如果我们截取它的整数个周期,然后对截短的信号进行周期延拓,则得到的延拓的信号与原无限长正弦没有区别。
      现在我们再次对这个无限长的正弦进行截短,长度为1.5个周期,然后对截短信号进行周期延拓,看看我们得到了什么?
下图、无限长正弦:正弦
下图、截短信号:一点五个周期正弦
下图、对截短信号周期延拓:周期延拓之后
      可以看出,此时进行周期延拓得到的信号与原来的正弦信号大相径庭。新的周期信号是一个周期的偶函数,原无限长正弦是一个周期的奇函数,两者奇偶性都不一样了,因此不能指望利用新的信号的DFT求出原信号的初相。exp(-jωt)=cos(ωt)-jsin(ωt),进行变换的时候,若f(t)为实偶函数,则f(t)sin(ωt)就是奇函数,对一个奇函数在对称区间内积分只能得到0,因此实偶函数的傅立叶变换肯定是实的,对一个实数用angle求相位,当然相位是0。而原正弦肯定是初相为-90°。
      我想这就是问题所在,DFT就是DFS,只不过DFT先将有限长信号进行周期延拓,然后求DFS,再截取一个周期。
      使用DFT,在有限的观测时间内采集信号的信息。如若观测时间内正好得到了整数个正弦周期,则DFT的周期延拓可以不失真的表示原正弦,可是如果观测时间内得到的信号不是整数个周期,那么问题随之而来,就像上面的例子,观测时间内得到了1.5个周期的正弦,然后进行周期延拓,显然乱了套。

如果满足了胡广书老师所总结的抽样条件,则对正弦的DFT谱无疑可以很好地反映初相,我写了两个例子:
      第一个例子,信号只包含一个正弦:
t=linspace(0,2-0.125,16);
x=cos(2*pi*t+pi/4);
X=fft(x);
stem(abs(X));
figure;
stem(angle(X)/pi*180);
幅度谱:一个正弦
相位谱:一个正弦相位
      可以看见DFT相位谱第三个点对应正弦的相位,刚好是45°。
      第二个例子信号中包含两个正弦:
t=linspace(0,2-0.125,16);
x=cos(2*pi*t+pi/4)+2*cos(2*pi*0.5*t+pi/8);
X=fft(x);
stem(abs(X));
figure;
stem(angle(X)/pi*180);
幅度谱:两个正弦
相位谱:两个正弦相位
      可以看见DFT相位谱第二个和第三个点对应两个正弦的相位,刚好是22.5°和45°。
      如果没有满足上面所说的条件,就会得到不准确的结果,有兴趣可试试下面的
代码:
t=linspace(0,2.5-0.125,32);
x=cos(2*pi*t+pi/4);
X=fft(x);
stem(abs(X));
figure;
stem(angle(X)/pi*180);

如何克服这个问题?我觉得这非常困难。在不能预知信号频率的情况下,无法确定采样频率和观测点数。也许可以先进行一次观测,通过幅度谱估计出正弦的频率,然后根据频率调整抽样频率,重新对信号进行采样,使采样符合上面所述的条件。但是这样做有很多的问题,例如硬件可能不好实现。而且虽然第二次调整了采样频率和抽样点数,可是初始相位已经无法得到了,因为第二次采样不可能再从零时刻开始。
      Sandygreta同学说可以这样做,先以较高的抽样频率对信号进行采样,通过FFT幅度谱估算出正弦信号的频率,然后计算出满足抽样条件的最佳的抽样频率和观测时间,使抽样频率为正弦频率的整数倍(大于2倍),且观测时间内能正好得到整数个正弦周期。然后对刚才采集的信号样本进行插值,接着使用计算出来的采样频率和观测时间对插值的结果重新采样,计算FFT,得到初始相位。

http://www.zju88.cn/agent/thread.do?id=Simulate-49326452072b5d773cdb1834c2f7e70993b3f3af&page=0&bd=Simulate

 

12        mayi (蚂蚁)于 Sun Jul 18 19:25:17 2004在BBS 水木清华站的贴子:<求教如何测三相交流电的相位?>

 http://www.smth.edu.cn/bbsanc.php?path=%2Fgroups%2Fsci.faq%2FPowerTech%2Fstudy%2Fmotor%2FM.1090149917.K0     

要求比较精确的两两相位, 不知道怎么实现,或者有没有相关的一些资料?bow!

讨论中提到用双线示波器目测,过零法,也有人提出用高精度fft.

 

13     airen 于 2007-10-24 20:34 振动论坛 的贴子:< 信号经过FFT后,该怎样计算幅值和相位>

我想用整周期截断的DFT来对信号进行处理,求得各谱线对应的幅值和相位,下面的信号经过FFT后,该怎样计算幅值和相啊?还请各位高手指点啊啊

http://www.chinavib.com/forum/thread-53683-1-1.html

 

14

年华 于 2006-3-21 15:02  振动论坛 的贴子:< 新手求助:fft变换之后如何求得波的幅值相角这些参数>

求助:fft变换之后如何求得波的幅值相角这些参数,例如 5sin(wt)+6sin(wt),采样后,做fft变换,从fft幅值普中如何求得原时域信号的幅值以及相位这些参数。有公式么?多谢多谢

 

15 untwind于 2006-6-30 17:36振动论坛 的贴子:< 求助:MATLABFFT分析后相位如何确定??>

MATLAB对简单的正、余弦函数的分析中,如x=cos(2*pi*t+pi/3),程序如下:
t=0:0.01:20.47;
x=cos(2*pi*t+pi/3);
xf=fft(x);
[am,index]=max(xf);
ang=angle(xf);
ph=ang(index);
但是输出结果ph=2.5656而不是pi/3=1.07
求教MATLAB中相位是怎么计算的?这种结果的差异只是泄漏或栅栏效应的结果吗?atan(x)输出结果在(-pi/2,pi/2),它怎么转化到实际信号分析结果中的??

急求高手指点,不胜感激!!

http://www.chinavib.com/forum/redirect.php?tid=18619&goto=lastpost

 

16 作者: qeagle (神啊請讓我失戀吧) 看板: MATLAB

標題: Re: [問題] 請問fft的相角代表什麼...???

時間: Tue Jun 22 18:47:52 2010

我目前所知如下

其實相角代表的是你第一點取樣時那個信號那個頻率的相位

但是我用MATLAB去模擬,發現初始相位都會有個OFFSET誤差

若用準頻,也就是頻率剛好落在INDEX上的話,會有個-60度存在

若是頻率有頻偏則會有另有誤差....

其所代表的初始相位會不準,我自己用一個測試信號,一直變初始相位

看到的相角就不是初始相位,所以才會覺得奇怪....

所以雖然fft的相角代表和初始相位有關,但因為頻率無法百分百準確所以用來求相角是不行的

若要真的求相角,需要用其它的FFT解析法...

目前參考老共的apfft,所得到的相角即使有頻偏,相角亦是準確的

http://www.ptt.cc/bbs/MATLAB/M.1277203674.A.802.html

 

17. Reducing Spectral Leakage of Rectangular Window? - westocl - 2012-04-19 14:57:00

Those things dont care about the spectral phase. I want to estimate the

spectral phase, hense am tied into the Rectangular Window.

http://www.dsprelated.com/showmessage/171814/2.php

 

 

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 我要加入

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

GMT+8, 2024-5-19 20:45 , Processed in 0.054504 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部