xinglong-liu 发表于 2008-7-25 15:05

关于IFFT的疑问

最近需要对信号进行IFFT变换分析,有一个疑问希望大家帮忙解决。
首先我对一个实数信号进行FFT后,截取该时域信号变换后的频域信号的1/2长度进行IFFT。也就是只使用正频率部分的频域成分进行IFFT,得到的IFFT信号的实数部分信号的形状,幅值与原始实数信号相同,只是信号长度为原信号长度的1/2。我感觉有些奇怪!

按道理来说,实数信号由正负两部分频率成分组成,并且正负两部分频率成分互为共轭。因此,该实数信号只能通过对正负两部分频率成分共同的频域信号进行IFFT变换回复。为什么我只用正频率部分就得到了原始信号?有些不解,


function test
clear all;
close all;
clf;
set(0,'language','english')
sig(1:249,2)=0;
sig(250:299,2)=linspace(0,1,50);
sig(300:349,2)=linspace(1,0,50);
sig(350:1024*4,2)=0;
sig(1:end,1)=linspace(1e-6,length(sig)*1e-6,length(sig));
R0=2;
R1=1;
s=sig(:,R0);
figure(1)
subplot(211);plot(s);
Nfft=length(s);
ts=sig(2,1)-sig(1,1);
fs=1/ts;
s_=fft(s,Nfft);
Nhalf=round(Nfft/2);
s_=s_(1:Nhalf,1);
freq=(0:Nhalf-1)*(fs/Nfft);
s1=ifft(s_);
subplot(212);plot(real(s1))

xinglong-liu 发表于 2008-7-26 07:10

怎么无人问津?自己再顶一下。:@P

yangzj 发表于 2008-7-26 17:31

为什么只要实部呢,ifft后还有虚部呀

xinglong-liu 发表于 2008-7-26 21:46

谢谢楼主的提醒。如果只取FFT后信号的正频率部分进行ifft,得到的信号由实部和虚部两部分组成,而原始信号是实信号。因此,只用fft正频率部分无法恢复原始信号。

songzy41 发表于 2008-7-27 09:22

本帖最后由 VibInfo 于 2016-11-8 16:16 编辑

原帖由 xinglong-liu 于 2008-7-25 15:05 发表
关于IFFT的疑问
最近需要对信号进行IFFT变换分析,有一个疑问希望大家帮忙解决。
首先我对一个实数信号进行FFT后,截取该时域信号变换后的频域信号的1/2长度进行IFFT。也就是只使用正频率部分的频域成分进行IFFT,得到的IFFT信号的实数部分信号的形状,幅值与原始实数信号相同,只是信号长度为原信号长度的1/2。我感觉有些奇怪!

按道理来说,实数信号由正负两部分频率成分组成,并且正负两部分频率成分互为共轭。因此,该实数信号只能通过对正负两部分频率成分共同的频域信号进行IFFT变换回复。为什么我只用正频率部分就得到了原始信号?有些不解,


实际上楼主这样做也没有得到原始信号(从图上看似乎得到,实际上没有得到)。在楼主的原始数据中数据长4096,在250-399之间是一个三角波,但反变换回来,在这段区间中为0。把s和s1画在一张图中如下,反变换回来的实部也是另一串数据,与原数据1-2048之间不一样。

xinglong-liu 发表于 2008-7-27 21:48

谢谢songzy41的解答,我仔细运行了一下自己的程序,确实如此。非常佩服你的认真细心的分析。向你学习!:@P

咯咯 发表于 2012-12-9 10:42

songzy41 发表于 2008-7-27 09:22 static/image/common/back.gif
实际上楼主这样做也没有得到原始信号(从图上看似乎得到,实际上没有得到)。在楼主的原始数据中数据长40 ...

问下songzy41教授,如果我在频域得到了1MHz:1MHz:1024MHZ的频域值,想将这些数据反变换到时域。这要怎么实现呢?我看论坛里说不可能是仅仅用matlab里的ifft函数,还需要构建负频率值得频域响应和初始值,负频域值可以用对称性质得到,那么这个初始值要怎么取呢?
页: [1]
查看完整版本: 关于IFFT的疑问