MATLAB逆傅立叶变换
示例
傅里叶变换的主要优点之一是它能够逆向返回时域而不会丢失信息。让我们考虑在上一个示例中使用的相同信号:
A1=10; % Amplitude 1 A2=10; % Amplitude 2 w1=2*pi*0.2; % Angular frequency 1 w2=2*pi*0.225; % Angular frequency 2 Ts=1; % Sampling time N=64; % Number of process samples to be generated K=1; % Number of independent process realizations sgm=1; % Standard deviation of the noise n=repmat([0:N-1].',1,K); % Generate resolution phi1=repmat(rand(1,K)*2*pi,N,1); % Random phase matrix 1 phi2=repmat(rand(1,K)*2*pi,N,1); % Random phase matrix 2 x=A1*sin(w1*n*Ts+phi1)+A2*sin(w2*n*Ts+phi2)+sgm*randn(N,K); % Resulting Signal NFFT=256; % FFT length F=fft(x,NFFT); % FFT result of time domain signal
如果F在Matlab中打开,将会发现它是复数矩阵,实部和虚部。根据定义,为了恢复原始的时域信号,我们既需要实数(代表幅度变化)又需要虚数(代表相位变化),因此要返回到时域,可能只需要:
TD = ifft(F,NFFT); %Returns the Inverse of F in Time Domain
请注意,由于我们将NFFT设置为256,因此返回的TD长度为256,但是x的长度仅为64,因此Matlab将零填充到TD变换的末尾。因此,例如,如果NFFT为1024,长度为64,则返回的TD将为64+960零。还要注意,由于浮点舍入,您可能会得到类似3.1*10e-20的信息,但出于通用目的:对于任何X,ifft(fft(X))等于X在舍入误差内。
让我们说一下,在变换之后,我们做了一些事情,只剩下FFT的REAL部分:
R = real(F); %Give the Real Part of the FFT TDR = ifft(R,NFFT); %Give the Time Domain of the Real Part of the FFT
这意味着我们正在丢失FFT的虚部,因此,在此反向过程中我们正在丢失信息。为了保留原始图像而又不丢失信息,您应始终使用FFT的虚部,并将imag函数应用于二者或实部。
figure subplot(3,1,1) plot(x);xlabel('time samples');ylabel('magnitude');title('Original Time Domain Signal') subplot(3,1,2) plot(TD(1:64));xlabel('time samples');ylabel('magnitude');title('Inverse Fourier Transformed - Time Domain Signal') subplot(3,1,3) plot(TDR(1:64));xlabel('time samples');ylabel('magnitude');title('Real part of IFFT transformed Time Domain Signal')