请大侠们看一下:全相位频谱校正问题
我用全相位方法,在无噪的情况下,得到很准确的频率和相位估计,至于幅值估计,现在有些问题,我加的窗为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))
记:=max(mag_Y1);
fft(Y2,N)
求幅值:mag_Y2=abs(fft(Y2,N))
记:=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 编辑 ] 全相位的幅度谱校正公式中,有一个公式,在下面的附件中,请问里面的一些参数是怎么得到的?
振幅校正精度
1如果将第一段序列为假设序列的x(-N+1)到x(N-1)点
则第一段序列的全相位相位谱直接得到的x(0)的相位即初相位,相位不必校正
2在无噪的情况下,振幅精度有0.0005的误差,这样是正常的.
第2个贴子中的Fs在hanning窗时就是第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 编辑 ]
回复 板凳 zhwang554 的帖子
首先很感谢老师的回复!我做的这个就是在matlab的环境下做的,不是实际的应用环境。
对于老师说的第三点,如果采用这样的方法校正幅度,虽然跟窗函数没有关系,精度也很高,可是会多做一次N点的FFT变换,增加了计算量。在已经知道窗函数的情况下,是不是直接用窗函数的频率模函数呢?
对于老师说的第五点,是我发帖子时候写错了。应该是老师写的那样。
还有,我想问的是,全相位频谱校正方法,在原理上,其相位计算精度和频率偏移值是没有关系的,是么?可是,我通过仿真发现,频率偏移值大的时候,在相同信噪比的条件下,相应的相位不确定度增加了。这是为什么呢?
对于频率校正和幅值校正,其精度也呈相同的规律变化,即在相同信噪比情况下,频率偏移值从0.1~0.5增大时,二者不确定度也增加。
[ 本帖最后由 email 于 2009-3-10 10:29 编辑 ]
回复 地板 email的帖子
你掌握了全相位时移校正法fft/apfft法:作一次fft, 作一次apfft,没有多作一次fft
fft/apfft法吸取了fft和apfft二者的优点,样点数只须2N-1个.
如apfft的振幅谱峰值附近相位特性是一条水平线,如果一个峰值附近相位特性不是一条水平线,则其中至少有二个以上频率成分
关於噪声下校正和频偏的关系,一个研究生作了研究.下图示出了当信噪比为37dB时做200次Monte Caro实验模拟下fft/fft和apfft/apfft校正方法的均方根误差随频率偏移量变化的曲线。由图中可以看出,在相位校正上,全相位时移相位差法的均方根误差都在1度以内.
[ 本帖最后由 zhwang554 于 2009-3-10 14:52 编辑 ] 很感谢老师的指点!我再看一看,可能是我的程序有些问题。 下面是我的程序运行的结果,老师能解释一下么?
我是在信噪比等于48db时做的。频率间隔是0.01,做了100次仿真。幅值估计、相位估计和频率估计在0.5的地方都有一个尖峰。
[ 本帖最后由 email 于 2009-3-10 16:14 编辑 ] 这个情况,有没有可能是程序的问题呢? 这个规律有些像 杨志坚 丁康老师发表在振动工程学报上的 (2007年 VOL.20,NO.3)的文章, 《高斯白噪声背景下时移相位差校正法的频率估计精度分析》,其中的图2 就是归一化频率估计误差均方根值与归一化频率偏差的关系曲线。如下图:
振幅校正精度(回复 楼主)
信号幅值误差可能是窗函数的频谱模函数导致的,到不是你采用的频谱模函数不对,而是影响精度,导致频率精度10(-14),相位精度10(-11),而振幅精度只有0.0005用fft/apfft时移相位差法,频率,相位和振幅校正公式均与窗无关,无噪单谱线校正时频率精度,相位精度和振幅精度均在10(-11)
在板凳贴子中提到"但实测还是hanning窗最佳"不对,实测也是与窗无关,无噪单谱线校正时任何窗振幅精度均在10(-11)
[ 本帖最后由 zhwang554 于 2009-3-11 14:10 编辑 ] 全相位分析法刚刚看的时候觉得挺简单,但是真正计算幅值的时候我还是搞不明白,相位计算还比较准确。
回复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)+;
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)+;
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>pidph=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程序中的hanning和hanning卷积窗改为 hann和hanning卷积窗, 也可改善精度
[ 本帖最后由 zhwang554 于 2009-11-29 09:39 编辑 ]
回复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.60.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信号测,无噪时频率分辨率对校正精度没有影响.
所以尽量使被测峰值运离频谱两瑞靠近频谱中间,
关於频率范围50:0.1:60 ,即不同的频偏值对精度影响,在频率分辨率=8,16时,由於你测试峰线靠近零端,主要还是镜像频率的泄漏作用. 本主题5楼和7楼的贴子就测了频偏值对频率振幅相位校正精度影响
[ 本帖最后由 zhwang554 于 2009-11-30 08:38 编辑 ]
FFT的幅度修正问题
我的信号是0HZ-10KHZ的,我现在采样信号设为100KHZ,采20480个点,用下采样低通滤波法,加窗,再经FFT,可是FFT后的幅度值很不精确,低通滤波是矩形窗,用汉宁加窗,恢复系数是2,我都做了,但是幅度还是有很大误差,频率精度还基本可以, 希望得到老师的帮助
页:
[1]
2