-1

私は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コサインを取得する必要があります。私の誤解がどこにあるのかわかりません...

誰かがこの結果を説明できたら?

前もって感謝します

4

1 に答える 1

0

実際の信号のスペクトルは原点に対して対称であるため、このようなスペクトル、つまり中心のゼロ周波数を見ることを好みます。ただし、FFT でスペクトルを計算する場合、中央にあるのは高周波であるため、fftshift() を使用してゼロ スペクトルを中央にシフトします。fftshift() は視覚的な問題に使用されるため、シフトされたスペクトルに対して直接 ifft() を実行することはできません。一方、シフトされたスペクトルは元の信号の変調バージョンであり、図 5 の変調信号が得られます。

于 2015-04-18T13:26:16.643 に答える