4

進行波レーザーモデルの出力を分析するために、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);

ただし、フェーズの出力は時間領域の入力とは大きく異なりますが

blue=逆FFTバック後の時間領域での位相の出力

修正されたデータの振幅はほとんど変化していないようです(あったとしても!)、

ここに画像の説明を入力してください ここに画像の説明を入力してください

フェーズのスケーリングにもかかわらず。物理的に言えば、これは正しくないようです。私の理解では、位相の波長依存性を取り除くと、パルス入力が「圧縮」されます。つまり、パルス幅は短くなりますが、ピークは高くなります。

私の主な質問は、逆FFT、順FFT、またはその両方を正しく使用できなかったかどうか、またはこれはウィンドウ処理や正規化の問題のようなものですか?

長い質問でごめんなさい!そして、事前に感謝します。

4

1 に答える 1

4

実際には2つの効果が見られます。

最初に期待されるものが行きます。あなたは「位相の波長依存性を取り除く」ことについて話している。正確にそれを行った場合(位相を完全にゼロにした場合)、実際にはわずかに圧縮されたピークが得られます。実際に行うことは、フェーズに線形関数を追加することです。これは何も圧縮しません。これは、時間領域でピークをシフトするのと同等のよく知られた変換です。フーリエ変換の単なる教科書のプロパティ。

次に、意図しないものに行きます。で取得したスペクトルを変換して、fft表示fftshiftを改善します。したがって、それをifft元に戻すために使用する前に、ifftshift最初に適用する必要があります。そうしないと、スペクトルは周波数領域で効果的にシフトされます。これにより、時間領域の位相に時間の線形関数が追加されるため、以前はゼロに近かった隣接するポイント間の差が約piになります。

于 2012-08-21T19:50:51.207 に答える