www.gusucode.com > 全相位FFT算法的MATLAB程序 > Untitled.m
close all;clc;clear all; N=1536; fs=2048; w=2*pi; % t=(0:2*N-2)/fs; t=(-N+1:N-1)/fs; y=1.0*exp(j*(w*t*49.1+50.1*pi/180))+0.8*exp(j*(w*t*149.2+100.2*pi/180))+0.6*exp(j*(w*t*249.3+150.3*pi/180))+0.4*exp(j*(w*t*349.4+200.4*pi/180))+0.2*exp(j*(w*t*449.5+250.5*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=mod((p1-p2)/180/(1-1/N),1); 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 r=round([49.1 149.2 249.3 349.4 449.5]*N/fs) disp('相位校正值') p2(r+1) disp('频率校正值') (ee(r+1)+floor([49.1 149.2 249.3 349.4 449.5]*N/fs))*fs/N disp('振幅校正值') aa(r+1)