|
FFT和apFFT组合校正法 (回复2楼)
2楼 提出 经过校正后的频谱图,是不是只有峰值处是校正过的,其他谱线是不变的
能量中心法需从5条谱线求出频率偏离,比值法需从2条谱线求出频率偏离,它们都是从振幅谱最大值处找到频率点,再用能量中心法或比值法,所以只有峰值处是校正过的,其他谱线是不变的.
这儿提供一种FFT和apFFT组合校正法,它可以将整个振幅校正谱,频率校正谱,相位校正谱图示出,
图中全部谱线都校正过, 从图中可找任何频率成分的振幅校正值,频率校正值,相位校正值.
FFT须N个样点,apFFT须2N-1个样点.FFT和apFFT组合校正法须2N-1个样点,对前N个样点作FFT,得FFT振幅谱a1及相位谱p1,对全部2N-1个样点作apFFT,得振幅谱a2及相位谱p2,
apFFT相位谱 p2 即初相位校正谱
FFT和apFFT相位差 (p1-p2) /180/(1-1/N) 即频率校正谱
FFT功率谱/apFFT振幅谱 a1.^2/a2 即振幅校正谱
close all;clc;clear all;
N=1024;
w=2*pi;
t=-N+1:N-1;
y=1.0*exp(j*(w*t*49.1/N+50.0*pi/180))+0.8*exp(j*(w*t*149.2/N+100*pi/180))+0.6*exp(j*(w*t*249.3/N+150*pi/180))+...
+0.4*exp(j*(w*t*349.4/N+200*pi/180))+0.2*exp(j*(w*t*449.5/N+250*pi/180));
y1 = y(N:end);
win = hanning(N)';;
win1 = win/sum(win);
y11= y1.*win1;
y11_fft = fft(y11,N);
a1 = abs(y11_fft);
p1 = mod(phase(y11_fft)*180/pi,360);
y2 = y(1:2*N-1);
win = hanning(N)';;
winn = conv(win,win);%apFFT须要卷积窗
win2 = winn/sum(winn);
y22= y2.*win2;
y222=y22(N:end)+[0 y22(1:N-1)];%构成长N的apFFT输入数据
y2_fft = fft(y222,N);
a2 = abs(y2_fft);
p2=mod( phase(y2_fft)*180/pi,360);
ee=(p1-p2)/180/(1-1/N);
aa=(a1.^2)./a2;
subplot(4,1,1),stem(a2,'.');title('apFFT振幅谱');ylim([0,1]);xlim([0 N/2]);grid
subplot(4,1,2),stem(p2,'.');title('初相位校正谱');ylim([0,400]);xlim([0 N/2]);grid
subplot(4,1,3);stem(ee,'.');title('频率校正谱');ylim([-1,1]);xlim([0 N/2]);grid
subplot(4,1,4);stem(aa,'.');title('振幅校正谱');ylim([0,1.5]);xlim([0 N/2]);grid
disp('相位校正值')
p2(50:100:450)
disp('频率校正值')
ee(50:100:450)+(49:100:450)
disp('振幅校正值')
aa(50:100:450)
运行结果:
初相位校正值 50.0000000000024 100.000000000003 150.000000000002 200 249.999999999991
频率校正值 49.0999999419078712 149.19999993660561 249.299999913428547 349.399999883880428 449.499999834899008
振幅校正值 0.999999755117187 0.799999777122636 0.599999946932585 0.400000089303518 0.200000165320486
[ 本帖最后由 zhwang554 于 2008-6-12 11:31 编辑 ] |
|