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')

以上是 MATLAB逆傅立叶变换 的全部内容, 来源链接: utcz.com/z/351345.html

回到顶部