|
回复 10楼 zhwang554 的帖子
我正在学习<数字信号全相位谱分析和滤波技术>一书,有一个问题向大家请教。
附录1的程序如下:
%FFT和apFFT比较程序,书附录1
close all;clc;clear all;
N=128;
t=-N+1:1:N-1;
y= cos(2*pi*t*(20.4)/N)+0.001*cos(2*pi*t*(28.2)/N+pi);%正弦初相为0和pi
y1 = y(N:2*N-1);%取后N个数据为FFT的输入数据
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);%取2N-1个数据为apFFT的输入数据
winn=conv(win,win);%apFFT需要卷积窗
win2=winn/sum(winn);%窗归一化
y22=y2.*win2;
y222=y22(N:end)+[0 y22(1:N-1)];%构成长N的FFT输入数据
y2_fft=fft(y222,N);
a2=abs(y2_fft);%apFFT的振幅普
p2=phase(y2_fft)*180/pi;
p2=mod(p2,360);%apFFT的相位普%
tt=0:N-1;
subplot(211);plot(tt,10*log10(a1),'b.-',tt,10*log10(a2),'r.-');
title('amplitude spectrum');
ylim([-150,30]);xlim([0,N/2]);
legend('fft','apfft');
xlabel('f');ylabel('db');
grid
subplot(212);plot(tt,p1,'bo-',tt,p2,'r.-');
title('phase spectrum');
ylim([0,400]);xlim([0,N/2]);
legend('fft','apfft');
xlabel('f');ylabel('度');
grid
输入信号正弦波的初相位是0和pi,计算apFFT的相位谱p2=mod(phase(y2_fft)*180/pi,360); 正常来说结果应该是0度和180度,但实际结果为
appendix1.fig
(17.95 KB, 下载次数: 54)
file:///e:/apFFT/appendix1.jpg
0
360.0000
0.0000
0
0.0000
0.0000
360.0000
0.0000
360.0000
360.0000
.........
从而使得相位谱图不为一直线。我已经做过模360度的运算了。请问是什么原因?如何解决?
但如果把初相改成pi/4或其他非0的相位值,结果都正确。只有初相为0时出现上述结果。
[ 本帖最后由 yycc2006 于 2009-4-17 14:29 编辑 ] |
|