用FFT求信号相位谱

摘要:
先看一下我收到的程序,作为研究对象的信号是这样产生的:      T=128;      N=128;      dt=T/N;      t=dt*(1:N);      x=2*cos(2*t-pi/4);    &
先看一下我收到的程序,作为研究对象的信号是这样产生的:
     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个周期,然后对截短信号进行周期延拓,看看我们得到了什么?
下图,截短信号

    用FFT求信号相位谱第1张

下图,对截短信号周期延拓:

    用FFT求信号相位谱第2张

      可以看出,此时进行周期延拓得到的信号与原来的正弦信号大相径庭。新的周期信号是一个周期的偶函数,原无限长正弦是一个周期的奇函数,两者奇偶性都不一样了,因此不能指望利用新的信号的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);
幅度谱:

     用FFT求信号相位谱第3张

相位谱:

      用FFT求信号相位谱第4张
      可以看见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);
幅度谱:

    用FFT求信号相位谱第5张

相位谱:

    用FFT求信号相位谱第6张

      可以看见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,得到初始相位。

免责声明:文章转载自《用FFT求信号相位谱》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基于FPGA的DS18B20数字温度传感器测温实例c语言-计算银行存款利率下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

codeforces 765 F Souvenirs 线段树+set

问题的含义:多个查询的间隔中两个数字之差的绝对值的最小值:可以根据查询的l对脱机查询进行排序,并且可以从r到l进行反向查询,并且间隔i+1到n的每次更新都可以确保此更新不会影响下一次和后续更新。因为当两个区间相互覆盖时,具有较小l的区间的值必须小于或等于另一个区间,因此可以绘制一个图来理解。...

Jboss

同时,为了扩大JBoss的企业市场,JBoss已经签署了许多渠道合作伙伴。2004年6月,JBoss宣布JBoss应用服务器已通过Sun公司的J2EE认证。这是JBoss应用服务器历史上最重要的里程碑。JBossAOP 1.0于2004年10月发布。这也证实了JBoss是一家创新型公司。JBoss应用服务器5.0于2008年12月6日正式发布。新版本的应用服...

解决xcode打开时loading假死的问题

出现这个问题就真得崩溃了,有些小伙伴甚至还重装了Xcode,这里给大家推荐一个行之有效的方法。...

如何在linux下安装idea

[通过正式安装包安装]http://www.jetbrains.com/在官方网站上下载相应版本。终极旗舰社区版本,将其解压缩到本地对应目录,然后执行/idea.sh命令。安装后,可以在启动程序中找到创意图标。...

IOS崩溃日志解析(crash log)

IOS的应用程序少不了crash,互联网统计分析工具友盟有一项目错误分析的功能,专门用于应用程序崩溃日志统计,最近研究友盟上统计到的崩溃日志,在此对崩溃日志做一个简单的总结。否则,应用将被iOS终止,并产生低内存崩溃报告。这样,我们去我们的dSYM文件看看我们的UUID是否和崩溃日志上的UUID一致,只有dSYM文件的UUID和崩溃日志上的UUID一致,我们...

layui使用layui-excel扩展导出xlsx格式文件

layui-excel扩展导出的文件可用office打开,正常显示;直接用table带的导出功能,导出的文件用office打开显示乱码。--导出表不展示--˃78910layui.config.use(['table','form','laydate','excel'],function(){11varform=layui.form;12vartable=l...