发新话题
打印

[编程技巧] ifft的问题

ifft的问题

对一音频信号做过1024点的fft,怎么样才能用ifft还原回原来的时域信号
比如:
x1=wavread('shiyan.wav');
y1=fft(x1,1024);     
再用ifft怎么样才能由y1得到x1呢
望有人帮忙解决,表示感谢

TOP

real(ifft(y1))
Email失效、QQ丢失、MSN没有、站内短信关闭
有事请在论坛matlab版留言,提问勿指名

TOP

谢谢,OK

TOP

不过还是不对啊,x1是126799*1,而real(ifft(y1))为1024*1

TOP

y1=fft(x1,1024);

表示你只用信号的前1024个点fft
显然ifft后还是1024

TOP

这是你前面的问题造成的,如suffer所说

改为y1=fft(x1);
Email失效、QQ丢失、MSN没有、站内短信关闭
有事请在论坛matlab版留言,提问勿指名

TOP

如果数据太长,也可分段作FFT和IFFT。

TOP

引用:
原帖由 songzy41 于 2007-6-25 06:39 发表
如果数据太长,也可分段作FFT和IFFT。
可以分段作fft ?

TOP

引用:
原帖由 yimao 于 2007-6-25 15:25 发表


可以分段作fft ?
可以分段做。这里给一个简单的例子,仅分二段来做(用二段只是为了说明问题,实际可分任意多的段),可以看到把二段分别做后再拼接,一样可满足要求。
N=10000;
n=1:N;
x=sin(2*pi*0.005*(n-1));
y=zeros(1,N);
for i=1 : 2
    y1=x(1024*(i-1)+1:1024*i);
    Y1=fft(y1);
    y2=real(ifft(Y1));
    y(1024*(i-1)+1:1024*i)=y2;
end
subplot 211; plot(x(1:2048)); grid;
xlabel('原始信号');
axis([0 2048 -1 1]);
subplot 212; plot(y(1:2048)); grid;
axis([0 2048 -1 1]);
xlabel('分段fft和ifft后拼接成的信号');
附件: 您所在的用户组无法下载或查看附件
本帖最近评分记录
  • eight 威望 +1 2007-6-25 17:19 理由:启发引导性回答

TOP

这种分段FFT 只对简单的余弦信号有用吧??

TOP

引用:
原帖由 zhj0231984 于 2008-7-4 20:58 发表
这种分段FFT 只对简单的余弦信号有用吧??
不受余弦信号的限制,任何信号都可以,这是因为FFT的可逆性。
本帖最近评分记录
  • sigma665 振动币 +30 2008-7-5 11:10 理由:谢谢你的意见

TOP

回复 11楼 的帖子

呵呵,fft和ifft的叠加性;
但是有啥用呢?

TOP

请问楼主

你正变换后,再逆变换回去后,信号能复原吗?我关心的是幅值能变换回原来的幅值吗?

TOP

发新话题