声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6305|回复: 20

[FFT] 请大侠们看一下:全相位频谱校正问题

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

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

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

x
我用全相位方法,在无噪的情况下,得到很准确的频率和相位估计,至于幅值估计,现在有些问题,我加的窗为hanning窗,校正采用时移法,
第一段序列为假设序列为x(1)到x(2N-1)点,将序列加2N-1阶窗,HANN(2N-1=)hann(N)*hann(N),加窗后全相位输入序列为记为:Y1:y(N)~y(2N-1)点,
第二段序列为x(L)到x(2N-1+L)点,同样的,加窗后全相位输入序列为Y2:y(L)~y(2N-1+L)点
然后,对上述两个序列做N阶FFT变换:
fft(Y1,N)
求幅值:mag_Y1=abs(fft(Y1,N))

记:[F1,index1]=max(mag_Y1);

fft(Y2,N)

求幅值:mag_Y2=abs(fft(Y2,N))

记:[F2,index2]=max(mag_Y2);


求谱线index1和index2对应的相位,二者相减,得到相位差:delt_fi
再通过校正,得到频率偏差,记为di

通过该频率偏差,在N为4096的情况下,校正的原信号的频率在无噪情况下,达到10(-14)数量级,相位达到10(-11)数量级,

可知校正幅值时,我现在只知道最大谱线对应的F1和F2,二者是相等的,也知道窗函数,怎么得到相应的信号幅值呢?
hann窗的幅值恢复系数为2,我看了yangzj版主的例子还有王兆华老师的文章,幅值我采用:
2*(4/sinc(di).^2*F2*(1-di.^2).^2)/4096.^2,在无噪的情况下,有0.0005的误差,这样是正常的么?为什么频率和相位分辨率那么高,而幅值分辨率那么低呢?

[ 本帖最后由 email 于 2009-3-9 18:58 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-3-9 17:43 | 显示全部楼层
全相位的幅度谱校正公式中,有一个公式,在下面的附件中,请问里面的一些参数是怎么得到的?

幅度谱校正

幅度谱校正
发表于 2009-3-9 21:21 | 显示全部楼层

振幅校正精度

1  如果将
第一段序列为假设序列的x-N+1)到xN-1)点
则第一段序列的全相位相位谱直接得到的x(0)的相位即初相位,相位不必校正

2  在无噪的情况下,振幅精度有0.0005的误差,这样是正常的.
第2个贴子中的Fshanning窗时就是第1个贴子中的振幅校正公式.

3  还有一种叫fft/apfft相位差校正法,fft的振幅谱为a1, apfft的振幅谱为a2, 则振幅校正值为a1^2/a2.
对单一谱线的exp信号,振幅校正精度可达10(-13).
对有二条谱线的cos信号,由於镜像谱线干扰,N=4096,hanning窗时
频率为10.3 振幅校正精度为0.00001
频率为100.3 振幅校正精度为0.00000001
频率为1000.3 振幅校正精度为0.00000000001
这种振幅校正理论上与窗函数无关,是其特点. 但实测还是hanning窗最佳,fft/apfft校正法振动论坛上有介绍,

4 精度高是在无噪时,实用上一点噪声(包括A/D量化噪声)就将精度迅速下降. 振幅精度有0.0005的误差就很好了,实用时难做到

5 "加窗后全相位输入序列为Y2:y(L)~y(2N-1+L)点"   是否应为"Y2:y(N+L)~y(2N-1+L)点",.
    加窗后2N-1个数据移位相加后组成N个数据全相位输入序列Y2, 作N阶fft



[ 本帖最后由 zhwang554 于 2009-3-10 08:29 编辑 ]
 楼主| 发表于 2009-3-10 10:25 | 显示全部楼层

回复 板凳 zhwang554 的帖子

首先很感谢老师的回复!
  我做的这个就是在matlab的环境下做的,不是实际的应用环境。
   对于老师说的第三点,如果采用这样的方法校正幅度,虽然跟窗函数没有关系,精度也很高,可是会多做一次N点的FFT变换,增加了计算量。在已经知道窗函数的情况下,是不是直接用窗函数的频率模函数呢?
  对于老师说的第五点,是我发帖子时候写错了。应该是老师写的那样。
  还有,我想问的是,全相位频谱校正方法,在原理上,其相位计算精度和频率偏移值是没有关系的,是么?可是,我通过仿真发现,频率偏移值大的时候,在相同信噪比的条件下,相应的相位不确定度增加了。这是为什么呢?
  对于频率校正和幅值校正,其精度也呈相同的规律变化,即在相同信噪比情况下,频率偏移值从0.1~0.5增大时,二者不确定度也增加。


[ 本帖最后由 email 于 2009-3-10 10:29 编辑 ]
发表于 2009-3-10 11:06 | 显示全部楼层

回复 地板 email的帖子

  你掌握了全相位时移校正法
    fft/apfft:  作一次fft,   作一次apfft,  没有多作一次fft

  fft/apfft法吸取了fftapfft二者的优点,样点数只须2N-1个.

  如apfft的振幅谱峰值附近相位特性是一条水平线,如果一个峰值附近相位特性不是一条水平线,则其中至少有二个以上频率成分  
  

   关於噪声下校正和频偏的关系,一个研究生作了研究.下图示出了当信噪比为37dB时做200Monte Caro实验模拟下fft/fftapfft/apfft校正方法的均方根误差随频率偏移量变化的曲线。由图中可以看出,在相位校正上,全相位时移相位差法的均方根误差都在1度以内.


Image55.jpg

[ 本帖最后由 zhwang554 于 2009-3-10 14:52 编辑 ]
 楼主| 发表于 2009-3-10 15:15 | 显示全部楼层
很感谢老师的指点!我再看一看,可能是我的程序有些问题。
 楼主| 发表于 2009-3-10 15:35 | 显示全部楼层
下面是我的程序运行的结果,老师能解释一下么?
我是在信噪比等于48db时做的。频率间隔是0.01,做了100次仿真。幅值估计、相位估计和频率估计在0.5的地方都有一个尖峰。

[ 本帖最后由 email 于 2009-3-10 16:14 编辑 ]
phase.jpg
frequency.jpg
am.jpg
 楼主| 发表于 2009-3-10 16:15 | 显示全部楼层
这个情况,有没有可能是程序的问题呢?
 楼主| 发表于 2009-3-10 16:29 | 显示全部楼层
这个规律有些像 杨志坚 丁康老师发表在振动工程学报上的 (2007年 VOL.20,NO.3)的文章, 《高斯白噪声背景下时移相位差校正法的频率估计精度分析》,其中的图2 就是归一化频率估计误差均方根值与归一化频率偏差的关系曲线。如下图:
yangzhijian.jpg
yangzhijian2.jpg
发表于 2009-3-11 08:25 | 显示全部楼层

振幅校正精度(回复 楼主)

信号幅值误差可能是窗函数的频谱模函数导致的,到不是你采用的频谱模函数不对,而是影响精度,导致频率精度10(-14),相位精度10(-11),而振幅精度只有0.0005

用fft/apfft时移相位差法,频率,相位和振幅校正公式均与窗无关,无噪单谱线校正时频率精度,相位精度和振幅精度均在10(-11)

在板凳贴子中提到"但实测还是hanning窗最佳"不对,实测也是与窗无关,无噪单谱线校正时任何窗振幅精度均在10(-11)



[ 本帖最后由 zhwang554 于 2009-3-11 14:10 编辑 ]
发表于 2009-11-22 21:22 | 显示全部楼层
全相位分析法刚刚看的时候觉得挺简单,但是真正计算幅值的时候我还是搞不明白,相位计算还比较准确。
发表于 2009-11-29 01:13 | 显示全部楼层

回复11楼bocaoboluo的贴子

你在网易上的两篇日志看到
一箫一剑走天下

全相位FFT算法的实现2009-11-22 22:22
http://blog.163.com/fdy_001/blog/static/12010203320091022102250697/

全相位FFT在VC下的测试结果和分析  2009-11-27 23:16
http://blog.163.com/fdy_001/blog/static/12010203320091027111614878/

感谢你对我们工作的支持.在网易评语中写不上,在这儿回答一下.
  "全相位FFT算法的实现"一文程序中 振幅校正语句有改进之处
  这程序也出於书中附录三,当时为了避免出现判断语句,在频偏>0.5时,不在振幅峰值处(round(f1)+1)取值,取最大点前面的一个(floor(f1)+1), 有时影响精度. 注意round语句对(f1) 4舍5入,floor语句对(f1) 取整数.


   
可参见下程序, 它始终在峰值处取值, 在频偏>0.5时可提高精度
close all;clc;clear all;
N=256;
t=-N+1:N*2-1; f1=39.8;A1=5;ph1=30;
s=A1*cos(1*(2*pi*t*f1/N+ph1*pi/180));
win=hanning(N)';win1=hann(N)';
win2=conv(win,win1);
win2=win2/sum(win2);
w=pi*2;
s1=s(1:2*N-1);%1(2N-1)个数据
y1=s1.*win2;
      y1a=y1(N:end)+[0 y1(1:N-1)];
Out1=fft(y1a,N);

a1=abs(Out1);

p1=mod(phase(Out1),2*pi);

s2=s(1+N:3*N-1); %
2(2N-1)个数据
y2=s2.*win2;

y2a=y2(N:end)+[0 y2(1:N-1)];

Out2=fft(y2a,N);

a2=abs(Out2);

p2=mod(phase(Out2),2*pi);

g=mod((p2-p1)/pi/2,1);

h=2*pi*g.*(1-g.*g)./sin(pi*g);

aa1=abs((h.^2).*a2)/2;

rr=round(f1)
disp('
频率校正值');
fff=floor(f1)+g(rr+1);
disp('振幅校正值');
aaa=aa1(floor(f1)+1)
disp('
初相位校正值');
ppp=p1(rr+1)*180/pi;

dph=mod(p2-p1,2*pi);
dph=dph(rr+1);
if dph>pi
dph=dph-2*pi;
elseif dph<-pi

dph=dph+2*pi;
end
dk=dph/pi/2;
g=dk;
h=2*pi*g.*(1-g.*g)./sin(pi*g);
AA=abs((h.^2).*a1)/2;

aaa=AA(rr+1)

      
另外apfft程序中的hanninghanning卷积窗改为 hannhanning卷积窗, 也可改善精度







[ 本帖最后由 zhwang554 于 2009-11-29 09:39 编辑 ]
发表于 2009-11-29 22:35 | 显示全部楼层

回复11楼bocaoboluo的贴子

有几个贴子提到apfft/apfft振幅校正精度问题. 这儿将测试结果列出.
利用上面12楼的程序可测频偏0.1-0.9时apfft/apfft校正精度, N=256, 取样频率=N, f1=50.1-50.9,A1=1;如表一
第二列为加双hanning卷积窗, 峰前取值, 0.4-0.9误差大
第三列为加双hanning卷积窗, 峰处取值, 0.4-0.6误差大,有改善
第四列为加hann hanning卷积窗, 峰前取值, 精度好
第五列为加hann hanning卷积窗, 峰前取值, 精度最好
理论上应加双hanning卷积窗, 为什么加hann hanning卷积窗精度好,不清楚,是偶然发现的

                                表一apfft/apfft振幅校正精度

频偏
<0.5 峰处取值
>0.5 峰前取值

hanning卷积窗

全部峰处取值

hanning卷积窗

<0.5 峰处取值
>0.5 峰前取值

hann,hannjng卷积窗

全部峰处取值

hann,hannjng卷积窗

0.1

-1.0109e-004

-1.0109e-004

-1.9754e-007

-1.9754e-007

0.2

-4.0588e-004

-4.0588e-004

-7.9939e-007

7.9939e-007

0.3

-9.1897e-004

-9.1897e-004

-1.8342e-006

-1.8342e-006

0.4


-0.0016


-0.0016

-3.3531e-006

-3.3531e-006

0.5

0.0026

0.0026

5.4360e-006

5.4360e-006

0.6
0.0038

0.0016

-8.2015e-006

-3.3531e-006

0.7
-0.0053

-9.1897e-004

-1.1823e-005

-1.8342e-006

0.8
-0.0071

-4.0588e-004

-1.6559e-005

-7.9939e-007

0.9
-0.0092

-1.0109e-004

-2.2794e-005

-1.9754e-007


      “全相位FFT在VC下的测试结果和分析”一文中频率分辨率对精度的影响,在你的测试中, 当频率分辨率=8时,峰值频谱线在round(50/8)+1=6的位置, 当频率分辨率=16时, 峰值频谱线在round(50/16)+1=4的位置, 这些频谱线靠近零轴, 这时余弦信号的镜像频率的泄漏严重影响精度, 特别你用fft/apfft法,fft的泄漏影响大. 你将信号改为150赫测,结果就不一样, 将余弦信号改为单谱线的exp信号测,无噪时频率分辨率对校正精度没有影响.
       所以尽量使被测峰值运离[0 N/2]频谱两瑞靠近频谱中间,
       关於频率范围50:0.1:60 ,即不同的频偏值对精度影响,在频率分辨率=8,16时,由於你测试峰线靠近零端,主要还是镜像频率的泄漏作用. 本主题5楼和7楼的贴子就测了频偏值对频率振幅相位校正精度影响


[ 本帖最后由 zhwang554 于 2009-11-30 08:38 编辑 ]
发表于 2009-12-25 11:17 | 显示全部楼层

FFT的幅度修正问题

我的信号是0HZ-10KHZ的,我现在采样信号设为100KHZ,采20480个点,用下采样低通滤波法,加窗,再经FFT,可是FFT后的幅度值很不精确,
低通滤波是矩形窗,用汉宁加窗,恢复系数是2,我都做了,但是幅度还是有很大误差,频率精度还基本可以,
发表于 2009-12-25 11:17 | 显示全部楼层
希望得到老师的帮助
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-25 14:52 , Processed in 0.104937 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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