triciayyz 发表于 2008-6-25 16:28

对fft得到的频谱进行插值,再ifft竟然得不到原信号了,郁闷

编了下面这段程序,fft再ifft是可以得到原时域信号的,可是对频域信号插值之后,尽管插值前后的频域信号无论幅值还是角度都对应的很好,可奇怪的是,再ifft竟然无法得到原来的时域信号了,郁闷

大家伙给说说,问题出在哪了

附 程序

clear all
vmax=30;
v=20;
DT=10000;
n=200;%离散采样点数
maxf=20000;%Hz
N=1000;%滤波器阶数
k1=4; k2=-20; pdb=15;
=lianxupu_tt(vmax,v,DT,n,k1,k2,pdb,maxf,N);%调用函数
%y时域模型信号 %f=离散采样频率 %Y=模型的频域信号,信号长度n

Y1=fftshift(Y);
Y1=Y1(n+1:n*2);
magY1=20*log10(abs(Y1));%幅值(d
subplot(411) plot(f1,magY1)
title('信号频谱幅值')
xlabel('频率/Hz')
ylabel('幅度(d')
subplot(412)
plot(y)
title('模型的原时域信号')

figure(2)
%插值
fs=40008;%采样频率
N=10000;%点数
df=fs/N;
f2=(-N/2:N/2-1)*df;%构造一个期望的频率离散采样结果
f3=-fliplr(f1);
f3=f3(1:n-1);
f3=;%对f3填补x轴负方向的频率点,为了进行下面的插值
YY=spline(f3,Y,f2);%对频域信号Y进行插值,由原来的频率采样f3插值后对应f2
magYY=20*log10(abs(YY));
subplot(211)
magY=20*log10(abs(Y));%幅值(d
plot(f3,magY,f2,magYY)
title('信号的插值结果比较(幅值)')
legend('模型信号','插值信号')
o1=angle(Y);
o2=angle(YY);
subplot(212)
plot(f3,o1,f2,o2)
title('信号的插值结果比较(角度)')
legend('模型信号','插值信号')

figure(1)
subplot(413)
yy=real(ifft(YY));
plot(yy)
title('直接反变换得到的时域仿真信号')%经验证,可以得到原来的模型时域仿真信号
subplot(414)
y1=real(ifft(Y));
plot(y1)
title('插值后反变换得到的时域信号')%得不到原来的模型时域仿真信号?

xray 发表于 2008-6-25 19:09

回复 楼主 的帖子

因为FFT插值不是那样进行的,正确的插值方法如下:
clear

N = 512;
M = 4;
t = 0:N-1;
t_1 = 0:1/M:N-1/M;
s = sin(1/32*pi*t);         % 整周期采样
s_1 = sin(1/32*pi*t_1);

sfft = fft(s);
x = ifft(sfft);
sfft_1 = [ sfft(1:N/2) zeros(1,(M-1)*N) sfft(N/2+1:N) ];    % M倍插值
x_1 = ifft(sfft_1)*M;

figure(1); hold on;
plot(t, s, 'r-+');
plot(t, x, 'b-x');
plot(t_1, real(s_1), 'r-+')
plot(t_1, real(x_1), 'b-x');

triciayyz 发表于 2008-7-7 08:49

:@) i try again
页: [1]
查看完整版本: 对fft得到的频谱进行插值,再ifft竟然得不到原信号了,郁闷