簡體   English   中英

復FFT然后逆FFT MATLAB

[英]Complex FFT then Inverse FFT MATLAB

我在Matlab中使用FFT函數來嘗試分析行波激光模型的輸出。

模型的時域是(實數,虛數)形式,其思想是將FFT應用於復數輸出,以獲得頻域中的相位和幅度信息:

%load time_domain field data
data = load('fft_data.asc');

% Calc total energy in the time domain
N = size(data,1);
dt = data(2,1) - data (1,1);
field_td = complex (data(:,4), data(:,5));


wavelength = 1550e-9;
df = 1/N/dt;
frequency = (1:N)*df;
dl = wavelength^2/3e8/N/dt;
lambda = -(1:N)*dl +wavelength + N*dl/2;

%Calc FFT
FT = fft(field_td);
FT = fftshift(FT);
counter=1;
phase=angle(FT);
amptry=abs(FT);
unwraptry=unwrap(phase);

在展開之后,將最佳擬合應用於感興趣區域中的相,然后從相本身中減去以試圖去除感興趣區域中相的波長依賴性。

for i=1:N % correct phase and produce new IFFT input
    bestfit(i)=1.679*(10^10)*lambda(i)-26160;
    correctedphase(i)=unwraptry(i)-bestfit(i);
    ReverseFFTinput(i)= complex(amptry(i)*cos(correctedphase(i)),amptry(i)*sin(correctedphase(i)));
end

手動執行最佳擬合后,我現在具有如上所示的反向FFT輸入。

pleasework=ifft(ReverseFFTinput);

我現在可以從中提取時域中的相位和幅度信息:

newphasetime=angle(pleasework);
newamplitude=abs(pleasework);

但是,盡管相位輸出與時域輸入相比有很大不同

藍色=反向FFT后的時域相位輸出

校正數據的幅度似乎變化不大(如果有的話)!

在此輸入圖像描述在此輸入圖像描述

盡管階段縮放。 從物理上講這似乎不正確,因為我的理解是去除相位的波長依賴性應該“壓縮”脈沖輸入,即縮短脈沖寬度但提高峰值。

我的主要問題是我是否未能正確使用逆FFT,或者前向FFT或兩者兼有,或者這類似於窗口化還是歸一化問題?

對不起,這個冗長的問題! 並提前感謝。

你實際上看到了兩種效果。

首先是預期的一個。 你在談論“消除相位的波長依賴性”。 如果你做到了 - 完全將相位歸零 - 你實際上會得到一個稍微壓縮的峰值。 你實際做的是為相位添加線性函數。 這不會壓縮任何東西; 這是一個眾所周知的轉變,相當於在時域中移動峰值。 只是傅立葉變換的教科書屬性。

然后是非預期的一個。 您可以使用fftshiftfft獲得的光譜轉換為更好的顯示效果。 因此,在使用ifft將其轉換回來之前,您需要首先應用ifftshift 如果不這樣做,頻譜在頻域中有效地移位。 這導致您的時域相位被添加為時間的線性函數,因此過去接近零的相鄰點之間的差異現在大約為pi。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM