声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 振动理论 信号处理 查看内容

离散频谱分析误差产生的原因及离散频谱校正技术

2016-10-16 08:49| 发布者: aspen| 查看: 1516| 评论: 114|原作者: yangzj|来自: 声振之家

摘要: 离散频谱校正理论和技术,不知道大家对这个名词熟不熟悉.近来在论坛上看到一些帖子讨论为何经FFT得到的幅值、频率和相位不准的。
  离散频谱校正理论和技术,不知道大家对这个名词熟不熟悉.近来在论坛上看到一些帖子讨论为何经FFT得到的幅值、频率和相位不准的。
  其实前面我也发过一篇介绍离散频谱校正的综述性的文章,可能大家都忙,没时间去看,呵呵,这里我就我的理解,把离散频谱分析的误差来源和校正方法做个简单的介绍。另外,我想借这个机会了解下,在实际的应用过程中,非常精确的提取这些参数有没有必要,大家平常也没有碰到由于误差而带来的困扰,例如不能对故障做出判断,甚至出现错判的例子。大家平常用离散频谱校正用的多不多?
  请大家讨论下,让我对我这个方向的应用也有个了解,谢谢!
  离散频谱分析的误差产生的原因主要来自两方面,一方面是由于时域加窗截断产生的频域连续化,另一方面是由于计算机只能对有限的离散的频率进行计算,也即是频域离散化的结果。其中,加窗截断的影响使一个无穷长单频率信号在频域对应的一根谱线,变成一个连续谱,以加矩形窗为例,则是变成一个sinc型函数的形状,其峰值对应的频率即为单频信号的频率。但是由于频域的离散化,我们用FFT计算的频率一般都不会刚好会落在峰值处,这就是我们平时常说的泄露,这时我们就只能把计算得到的峰值谱线对应的频率做为估计的频率,如果以频率分辨率fs/N做归一 (即把频率分辨率看成1)的话,这个估计的频率的最大绝对值误差就是0.5,而幅值误差则依赖于加的窗的类型,由于矩形窗主瓣宽度为2,频谱开状较尖,幅值误差也就大。至于相位的最大误差则会相应的达到正负90度,已经完全不能用了。
  离散频谱校正就是针对这种误差提出的各种校正出实际的频率、幅值和相位的一门理论和技术。国内现在比较常用的方法有比值(插值)法、能量重心法、FFT+FT法和相位差法,都有其各自的特点和优缺点。这里我给出一个比值校正法的程序供大家一起研究下。
  当然,对于多频率成分的信号来说,离散频谱分析的另一个误差是来自于频率之间的相互干涉,这也是由于泄露所引起的,这个误差则主要靠加窗抑制旁瓣和减小频率分辨率、拉大频率间的距离(可通过ZFFT实现)来尽量减小。
  %SpectrumCorrect_Test.m
  close all;
  clear all;
  clc;
  fs=1024;
  N=1024;
  t=(0:N-1)/fs;
  x=4*cos(2*pi*80*t+30*pi/180)+3*cos(2*pi*150.232*t+80*pi/180)+1*cos(2*pi*253.5453*t+240*pi/180);
  xf=fft(x);
  xf=xf(1:N/2)/N*2;
  XfCorrect=SpectrumCorrect(xf,3,1);
  XfCorrect(:,1)=XfCorrect(:,1)*fs/N;
  XfCorrect
  w=hann(N,'periodic');
  xfw=fft(x.*w');
  xfw=xfw(1:N/2)/N*4;
  XfCorrectW=SpectrumCorrect(xfw,3,2);
  XfCorrectW(:,1)=XfCorrectW(:,1)*fs/N;
  XfCorrectW
  %离散频谱比值校正法 by yangzj 2007.4.28
  %
  %xf为FFT后的复数谱
  %CorrectNum为校正的谱线条数,即校正最大的CorrectNum条
  %WindowType为加窗类型,1为矩形窗,2为Hanning窗
  %
  %SpectrumCorrect.m
  function XfCorrect=SpectrumCorrect(xf,CorrectNum,WindowType)
  XfCorrect=zeros(CorrectNum,3);
  for i=1:CorrectNum
  A=abs(xf);
  [Amax,index]=max(A);
  phmax=angle(xf(index));
  %比值法
  %加矩形窗
  if (WindowType==1)
  indsecL=A(index-1)>A(index+1);
  df=indsecL.*A(index-1)./(Amax+A(index-1))-(1-indsecL).*A(index+1)./(Amax+A(index+1));
  XfCorrect(i,1)=index-1-df;
  XfCorrect(i,2)=Amax/sinc(df);
  XfCorrect(i,3)=(phmax+pi*df)*180/pi;
  xf(index-2:index+2)=zeros(1,5);
  end
  %比值法
  %加Hanning窗
  if (WindowType==2)
  indsecL=A(index-1)>A(index+1);
  df=indsecL.*(2*A(index-1)-Amax)./(Amax+A(index-1))-(1-indsecL).*(2*A(index+1)-Amax)./(Amax+A(index+1));
  XfCorrect(i,1)=index-1-df;
  XfCorrect(i,2)=(1-df^2)*Amax/sinc(df);
  XfCorrect(i,3)=(phmax+pi*df)*180/pi;
  xf(index-4:index+4)=zeros(1,9);
  end
  XfCorrect(i,3)=mod(XfCorrect(i,3),360);
  XfCorrect(i,3)=XfCorrect(i,3)-(XfCorrect(i,3)>180)*360;
  end
  运行结果
  XfCorrect =
  80.0014 4.0016 29.8261
  150.2333 2.9981 79.7127
  253.5397 0.9996 -118.7272
  XfCorrectW =
  80.0000 4.0000 30.0000
  150.2320 3.0000 80.0000
  253.5453 1.0000 -120.0002
  [ 本帖最后由 yangzj 于 2007-4-28 15:43 编辑 ]
发表评论

最新评论

引用 yangzj 2007-4-30 12:37
呵呵,看来是没有市场哦
引用 eight 2007-4-30 12:40
原帖由 yangzj 于 2007-4-30 12:37 发表
呵呵,看来是没有市场哦


可能近来大家都想放假,没有心思在论坛上吧,呵呵。版主写的东西比较深奥,偶不是专搞这个的,所以看不懂,不然一定捧场
引用 yangzj 2007-4-30 12:48
多谢eight的捧场。
我现在做的课题是“噪声对离散频谱校正的影响及其改进方法”,发这帖一来想让不了解的人有一个了解,二来是想大家对“非常精确的提取信号的频率、幅值和相位参数的意义”发表一下看法。:@)
引用 larf241 2007-5-6 15:18
这个地方真是不错了!
   请问LZ 给一个 WAV 音频文件, 用FFT变换,然后怎样用相位补偿的方法来校正,使得得到的结果更为精确?
   LZ 你是爱打拳皇吗?
引用 w89986581 2007-5-6 15:36
我尝试用全相法修正离散频谱,然后估计相位,没有成功过:(
引用 yangzj 2007-5-6 15:37
原帖由 w89986581 于 2007-5-6 15:36 发表
我尝试用全相法修正离散频谱,然后估计相位,没有成功过:(

呵呵,个人认为那篇文章是有问题的.不知道作者是怎么做出来的
引用 zhangnan3509 2007-5-7 10:26
这进一步证实了我的观点,大当家是对FFT有所研究的!:lol
引用 zhwang554 2007-5-7 12:50
用全相位测相位的程序在本论坛的"请教全相位谱分析问题"和"如何准确确定信号中强线谱的相位?"有介绍
非常精确的提取信号的频率、幅值和相位参数的意义是很大的,用FFT非常精确的提取信号的频率、幅值和相位参数的意义更大,它可以同时测出多个信号的频率、幅值和相位参数.相位测量很重要,相位测准了,测两点相位可得频率,用於激光相位测距可测距离,用於GPS载波相位定位可定位,用於测电流和电压滞后相位角可测材料的介质滞后角。频率测准了也很有用,测运动物体发出频率的多谱勒效应可得运动物体的速度,测激光在倾斜面上形成黑白光栅产生的正弦波频率可得激光波长等

你介绍的比值法不错,但它涉及2条谱线,用全相位时移相位差法效果好.即二段相隔N个样点的2N-1个样点序列,其同一谱线下的相位差值即频偏校正值,apFFT相位不用校正,幅值由频偏值校正
引用 yangzj 2007-5-7 13:02
原帖由 zhwang554 于 2007-5-7 12:50 发表
用全相位测相位的程序在本论坛的"请教全相位谱分析问题"和"如何准确确定信号中强线谱的相位?"有介绍
非常精确的提取信号的频率、幅值和相位参数的意义是很大的,用FFT非常精确的提取信号的频率、幅值和相位参数 ...


非常感谢,现在我知道怎么用全相位法来做校正了,就是你说的"全相位时移相位差法",求得时移T的两段信号的相位差,这个相位差应该是2*pi*f*T,做一些简单的变化就可得到频率偏差,这个思想和普通的"时移相位差法"的思想是一样的,不知道这种方法有什么优点,扩噪能力是不是能更好一些?

[ 本帖最后由 yangzj 于 2007-5-7 13:08 编辑 ]
引用 zhwang554 2007-5-7 15:12
本帖最后由 wdhd 于 2016-6-3 10:59 编辑

  由於数学公式贴不上,简单说一下.
  全相位FFT的泄漏是原FFT泄漏的平方,泄漏分贝减少一倍,如FFT泄漏-20db,全相位FFT泄漏为-40db.你用apFFT的程序将apFFT的振幅谱和原FFT的振幅谱画出来,一比就知道了.复指数信号只有一条谱线,所以频率偏离时的泄漏不影响相位测量精度,无噪时误差几乎为0,但物理上用的正余弦信号都有2条谱线,泄漏互相影响,靠得近影响更大.全相位FFT泄漏分贝值比传统FFT小一倍,所以用全相位FFT测相位精度始终比传统FFT高,而且一次FFT测出,不用校正.
  全相位FFT比FFT精度高在於全相位FFT泄漏分贝小一倍,但FFT泄漏是很小的,所以全相位FFT在几乎无噪时才明显好於FFT.但在密集频谱时,互相泄漏影响大,全相位FFT有实用用优势.
  有噪声时,理论正全相位FFT只比传统FFT的精度好2/3,实用优势不如无噪,但总比FFT好些.但在有噪相位测量时,apFFT由於不用校正,一次FFT测相位,精度虽类同,但全相位FFT测相位比传统FFT始终有实用优势.
  你对校正很了解,FFT校正是用其振幅或相位谱上校正的,全相位FFT是在全相位FFT的振幅或相位谱上校正的,由於全相位FFT的泄漏分贝比FFT小一倍,比FFT干净些,校正精度也好些.所以全相位时移相位差法比原时移相位差法在无噪时好一倍,有噪时略好些,密集谱好多些.
引用 larf241 2007-5-7 15:44
回复楼上的,
数学公式你用别的写好做成附件上传就好了 !   谢谢啊  别怕麻烦 !
引用 larf241 2007-5-7 15:48
请问你在做全相位校正FFT的时候有相关的MATLAB 的程序吗?
  可以帖个出来借鉴下不 ?  
   谢谢 不吝赐教
引用 yangzj 2007-5-7 16:53
原帖由 zhwang554 于 2007-5-7 15:12 发表
由於数学公式贴不上,简单说一下.
   全相位FFT的泄漏是原FFT泄漏的平方,泄漏分贝减少一倍,如FFT泄漏-20db,全相位
FFT泄漏为-40db.你用apFFT的程序将apFFT的振幅谱和原FFT的振幅谱画出来,一比就知道了.
    复 ...


非常感谢您的精彩讲解.
那我想可以这样理解:
全相位谱相对于FFT谱的优点:1、可不经校正直接得到分析数据中点的相位;
                                       2、可减少泄露,进而减少频率间的干涉现现象,这样就可提高分析密集频谱时的精度;
                                       3、抗噪能力略优

另外如果我这么认为不知您同不同意:全相位法之所以有2、3的优点,本质原因是加大了分析点数,因为抗噪能力与分析点数N与信噪比的乘积是成正比的,如果直接把全相位方法的分析数据都拿来做FFT的话,这个优势应该就没有了。

另外想请教下,由全相位谱由频率偏差来校正幅值会不会变得麻烦,这时候应该不是简单的跟窗谱有关

[ 本帖最后由 yangzj 于 2007-5-7 16:57 编辑 ]
引用 zhwang554 2007-5-7 16:54
引用 shenyongjun 2007-5-7 17:02
丁康老师有一篇关于频谱校正的综述论文发表在几年前的《振动工程学报》,最近又在看丁老师《齿轮箱故障诊断实用技术》(书名记不清了)。不知版主是否了解丁老师的工作?
引用 yangzj 2007-5-7 17:08
原帖由 shenyongjun 于 2007-5-7 17:02 发表
丁康老师有一篇关于频谱校正的综述论文发表在几年前的《振动工程学报》,最近又在看丁老师《齿轮箱故障诊断实用技术》(书名记不清了)。不知版主是否了解丁老师的工作?

呵呵,你如果有留意我的帖的话,应该能猜出丁老师是我导师

[ 本帖最后由 yangzj 于 2007-5-7 17:09 编辑 ]
引用 zhwang554 2007-5-7 17:34
你这个问题提得好由克拉美-罗限而言,N增大克拉美-罗限要求更高.

N阶apFFT需要2N-1个数据,其泄漏是N阶FFT的平方,
用这2N-1个数据作FFT,其泄漏仍差於N阶apFFT,见附图.
而且2N-1个数据作FFT的计算量大了1倍.

我们加hanning(N)的卷积窗apFFT作校正,其校正公式和FFT加hannjng窗由偏频校正振幅值一样,
不过apFFT的振幅谱等於FFT的振幅谱的平方,所以apFFT的振幅谱的开方代入公式即可.
引用 yangzj 2007-5-7 17:53
原帖由 zhwang554 于 2007-5-7 17:34 发表
你这个问题提得好由克拉美-罗限而言,N增大克拉美-罗限要求更高.

N阶apFFT需要2N-1个数据,其泄漏是N阶FFT的平方,
用这2N-1个数据作FFT,其泄漏仍差於N阶apFFT,见附图.
而且2N-1个数据作FFT的计算量大了1倍.
...

呵呵,再请教个问题(千万不要嫌我问题多,^_^),既然全相位谱是FFT谱的平方,那把它与FFT谱的平方,也就是功率谱相比如何呢?
引用 zhwang554 2007-5-7 18:21
呵呵,再请教个问题(千万不要嫌我问题多,既然全相位谱是FFT谱的平方,
那把它与FFT谱的平方,也就是功率谱相比如何呢?
如果是1个信号
FFT的振幅谱为A,功率谱为A^2
apFFT的振幅谱为A^2
1个信号apFFT的振幅谱A^2 等於FFT功率谱A^2
A是狄里克雷核(Dirichlet function)
如果是2个信号
FFT的振幅谱为A1+A2,功率谱为(A1+A2)^2= A1^2+2A1*A2+A2^2
apFFT的振幅谱为A1^2+A2^2
2个信号apFFT的振幅谱A1^2+A2^2 不等於FFT功率谱(A1+A2)^2,FFT泄漏多了1项
多个信号apFFT的振幅谱A1^2+…+An^2 不等於FFT功率谱(A1+…+An)^2,FFT泄漏多了

[ 本帖最后由 zhwang554 于 2007-5-7 18:25 编辑 ]

查看全部评论(114)

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

GMT+8, 2024-4-20 17:50 , Processed in 0.057867 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部