私はMatlab FFT、特に関数fftshiftで得た結果を理解しようとしています
最初に単純な信号の FFT (y = cos (2 * pi * f_signal * t)) を計算し、逆変換して元の信号を見つけようとします。
FFT を実行する前に、開始信号に 100 ポイントを追加して、「ゼロ パディング」を使用した場合と使用しない場合の結果を比較します。
コードは次のとおりです。
% Frequency input signal and time vector
f_signal=10;
nb_points = 100;
f_sampling=nb_points*f_signal;
step_time=1/f_sampling;
t=linspace(0,1/f_signal,nb_points);
%% Original signal with 100 points
y=cos(2*pi*f_signal*t);
%% Adding 100 more points for y
n_zero_padding=100;
y_f=padarray(y,[0 n_zero_padding],'post');
% Plot Input Signal
figure(1);
plot(y);
title('Input Signal');
% Perform Forward FFT
z=real(fft(y_f));
% Center FFT
z_centered=fftshift(z);
figure(2);
plot(z_centered);
title('FFT centrered with zero padding');
% Without centering
figure(3);
plot(z);
title('FFT with zero padding');
% Perform Inverse FFT
z_inv=ifft(z);
figure(4);
plot(z_inv);
title('Inverse FFT with zero padding');
% Inverse FFT with centered spectrum
z_inv_centered=ifft(z_centered);
figure(5);
plot(z_inv_centered);
title('Inverse FFT centered with zero padding');
図 5 の結果がわかりません (fftshift によるシフトされたスペクトルの逆変換)
これは、取得された最初のスペクトルです (シフトされていません) (図 (3))。
これは、fftshift でシフトされた最初のスペクトルです (図 (2))。
上記のシフトされたスペクトルの逆 FT (図 (5)):
後者の図はわかりません。私が理論を取ると、 fftshift でスペクトルをシフトするという事実は、f_sampling / 2、より正確には f_sampling / 2-f_signal および f_sampling / 2 + f_signal を中心とする 2 つの Dirac の取得につながります。
したがって、これら2つのディラックの合計が得られ、この合計の逆FFTを実行します。したがって、周波数が非常に近い逆FFT 2コサインを取得する必要があります。私の誤解がどこにあるのかわかりません...
誰かがこの結果を説明できたら?
前もって感謝します