声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3033|回复: 2

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

[复制链接]
发表于 2008-6-25 16:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

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

附 程序

clear all
vmax=30;
v=20;
DT=10000;
n=200;%离散采样点数
maxf=20000;%Hz
N=1000;%滤波器阶数
k1=4; k2=-20; pdb=15;
[y,f1,Y]=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=[f2(1),f3,f1];%对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('插值后反变换得到的时域信号')%得不到原来的模型时域仿真信号?
回复
分享到:

使用道具 举报

发表于 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');
 楼主| 发表于 2008-7-7 08:49 | 显示全部楼层
:@) i try again
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-22 12:47 , Processed in 0.086811 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表