信号处理中的反傅里叶变换(IFFT)原理

您所在的位置:网站首页 信号共轭的物理意义 信号处理中的反傅里叶变换(IFFT)原理

信号处理中的反傅里叶变换(IFFT)原理

2024-07-05 20:25| 来源: 网络整理| 查看: 265

信号处理中,经常需要将信号转换到频域进行分析,有时候还会从频域转回时域,用到FFT和IFFT函数。

FFT变换是将信号从时域转换到频域,在时域看起来复杂的信号转换到频域看起来就方便容易了很多。但有时候也需要将频域信号转换到时域,所以这时需要用到IFFT变换。

其实IFFT的计算原理之一就是将频域(注意频域是复数)数据进行取共轭复数(虚部取反),然后再进行FFT变换,这样便将频域信号转换到时域。因为FFT变换的结果是复数,所以从频域进行FFT变换过来的结果也是复数,而此时只需取复数的实部,便是原时域信号(同时此复数的虚部已经比非常小了,就省略不要了)。

注意:FFT以后数列是共扼对称排列的顺序,当把某个范围频率的数据清另,必须将与它共扼对称的频率数据也清另,不可少清,也不可多清,这样就不会出来复数了。

在MATLAB中,通过计算MATLAB自带的IFFT函数和FFT结果进行虚部取反再计算FFT。两种方法表明:结果一致。

%% 将正弦波做FFT计算,50%的重叠。验证IFFT的计算——对比自带函数IFFT函数,和对FFT结果取共轭,再进行FFT计算的区别。 clear;clf; Fs=24000;t = 0:1/Fs:0.07;y=sin(200*2*pi*t+50); % 24k采样率下,生成200Hz、0.07秒正弦波 i=(floor(length(y)/512)-1)*2; % 因为分帧计算,这里计算循环次数。因为要50%的重叠,所以需要乘以2 yfft=zeros(1,length(y)); % 初始化函数 yifft=zeros(1,length(y)); % 初始化函数 Windows=hamming(512); % 取窗函数 for a =0:i StartPoint=1+256*a; y0(1:512)=y(StartPoint:(StartPoint+512-1)); %取每次要处理的512个数据 y0=y0.*Windows'; % 加窗 TempData=fft(y0); % 做FFT计算 Yifft=ifft(TempData); % MATLAB自带IFFT函数 Yfft=conj(TempData); % 取共轭复数 Yfft=fft(Yfft); % 虚部取反做FFT计算 Yfft=(real(Yfft)/512)*0.98; % 取出实部,并对其除以N。乘以0.98为了做图进行对比 yfft(StartPoint:StartPoint+512-1)=yfft(StartPoint:StartPoint+512-1)+Yfft; %重组 yifft(StartPoint:StartPoint+512-1)=yifft(StartPoint:StartPoint+512-1)+Yifft; %重组 end %% 作图 figure(1); plot(y,'*'); hold on plot(yfft,'r'); hold on ; plot(yifft,'k'); grid on legend('原信号时域','虚部取反做fft时域','Ifft时域'); xlabel('时域(t)'); ylabel('幅值');

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3