進行波レーザーモデルの出力を分析するために、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、またはその両方を正しく使用できなかったかどうか、またはこれはウィンドウ処理や正規化の問題のようなものですか?
長い質問でごめんなさい!そして、事前に感謝します。