声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2166|回复: 12

[编程技巧] ifft的问题

[复制链接]
发表于 2007-6-23 21:42 | 显示全部楼层 |阅读模式

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

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

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

使用道具 举报

发表于 2007-6-23 21:49 | 显示全部楼层
real(ifft(y1))
 楼主| 发表于 2007-6-23 23:08 | 显示全部楼层
谢谢,OK
 楼主| 发表于 2007-6-23 23:26 | 显示全部楼层
不过还是不对啊,x1是126799*1,而real(ifft(y1))为1024*1
发表于 2007-6-23 23:38 | 显示全部楼层
y1=fft(x1,1024);

表示你只用信号的前1024个点fft
显然ifft后还是1024
发表于 2007-6-24 20:05 | 显示全部楼层
这是你前面的问题造成的,如suffer所说

改为y1=fft(x1);
发表于 2007-6-25 06:39 | 显示全部楼层
如果数据太长,也可分段作FFT和IFFT。
发表于 2007-6-25 15:25 | 显示全部楼层
发表于 2007-6-25 17:09 | 显示全部楼层
原帖由 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后拼接成的信号');
ym.jpg

评分

1

查看全部评分

发表于 2008-7-4 20:58 | 显示全部楼层
这种分段FFT 只对简单的余弦信号有用吧??
发表于 2008-7-5 09:14 | 显示全部楼层
原帖由 zhj0231984 于 2008-7-4 20:58 发表
这种分段FFT 只对简单的余弦信号有用吧??

不受余弦信号的限制,任何信号都可以,这是因为FFT的可逆性。

评分

1

查看全部评分

发表于 2008-7-7 15:06 | 显示全部楼层

回复 11楼 的帖子

呵呵,fft和ifft的叠加性;
但是有啥用呢?
发表于 2008-7-7 17:03 | 显示全部楼层

请问楼主

你正变换后,再逆变换回去后,信号能复原吗?我关心的是幅值能变换回原来的幅值吗?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-12 03:39 , Processed in 0.081438 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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