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

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

日志

apfft谱分析中的振幅校正精度

已有 1433 次阅读2009-12-1 01:40 |个人分类:apfft|

有几个贴子提到apfft/apfft振幅校正精度问题.

email发表于 2009-3-9 17:15  振动论坛上主题 <请大侠们看一下:全相位频谱校正问题>

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

我用全相位方法,在无噪的情况下,得到很准确的频率和相位估计,至于幅值估计,现在有些问题,我加的窗为hanning窗,校正采用时移法

 

fudeyun发表于 2009-11-20 12:47 振动论坛上主题 <请教:VC下实现apFFT,但幅度校正不准确,高手帮忙看看>

http://www.chinavib.com/forum/thread-88525-1-1.html
我在VC下实现了apFFT算法,但是幅度校正不准确,情况如下

 

bocaoboluo发表于 2009-11-16 22:16  振动论坛上主题<apFFT的相位和幅值计算的问题>

http://www.chinavib.com/forum/viewthread.php?tid=88438&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D186
关于apFFT分析法的结果幅值的问题在于,结果开根号后与理论值有大约0.2的误差,比如理论为2,计算结果幅值为2.2.****。不知道哪里出错了....

 

bocaoboluo发表于 2009-11-17 16:26 振动论坛上主题<请问王老师关于apFFT问题>12

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

怎么计算apFFT的幅值呢?还是没有看明白,与FFT结果根号的关系吗?

    

       apfft/apfft谱分析程序如书中附录三(空格前),当时为了避免出现判断语句,在频偏>0.5,不在振幅峰值处(round(f1)+1)取振幅值,而取最大点前面的振幅值(floor(f1)+1), 有时影响精度. 注意round语句对(f1) 45,floor语句对(f1) 取整数.
    
若补充判断语句用下程序, 它始终在峰值处取值, 在频偏>0.5时可提高精度

     另外,附录三的apfft/apfft校正法程序中原调用matlab中的hanning窗(第5句), 若改为另一种Hanning窗生成公式sin(pi*(1/2:N-1/2)/N).^2,可明显提高精度

close all;clc;clear all;

N=256*4;

t=-N+1:N*2-1; f1=39.8;A1=1;ph1=30;

s=A1*cos(1*(2*pi*t*f1/N+ph1*pi/180));

win=sin(pi*(1/2:N-1/2)/N).^2;

win2=conv(win,win);

win2=win2/sum(win2);

s1=s(1:2*N-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);

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);

fff=floor(f1)+g(rr+1)

aaa=aa1(floor(f1)+1);

ppp=p1(rr+1)*180/pi

dph=p2-p1;

dph=dph(rr);

dph=mod(dph,2*pi);

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)

运行结果:

fff = 39.8
ppp =  29.999999999993
aaa =0.999999999999621

振幅校正精度10(-12),可见用sin(pi*(1/2:N-1/2)/N).^2;)的卷积窗振幅校正精度明显改善

发表评论 评论 (1 个评论)

回复 李元 2010-1-8 09:51
向大侠致敬!

facelist doodle 涂鸦板

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

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

GMT+8, 2024-5-20 00:40 , Processed in 0.029944 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部