$ \ tt fft $の正確なインデックス

巡回周波数変換について考えてみましょう。そして、関数の変換がそれ自身であるようにしようとしましょう。

t=linspace(-32,32,4096);
dt=t(2)-t(1);
fq=linspace( -1/(2*dt) , 1/(2*dt) , length(t) + 1 );
fq=fq(1:  length(t)  );
x=exp(-pi*t.*t);
X=fftshift(fft(x)).*exp(-1i*2*pi*fq*t(1))*dt;
plot(t,real(X));hold on;plot(t,imag(X));hold off;

今、これは実際に動作し、私がこれらの権利を得ることは容易ではないと信じています。私は基本的に試行錯誤に頼って、合理的に見えるものが得られるまで、どこにでも$ \ pm 1 $を追加しようとしました。私はこの狂気の背後にある方法を学びたいと思います。

  1. t = linspace(-32,32,4096); のようなものを使用することをお勧めします どのように周波数が非対称であるかを考えてみると、時には時間も必要でしょうか?

  2. X = fftshift(fft(x))の結果は、実際にはどの周波数に対応していますか?

  3. 他の提案など?

1

1 答え

FFTは、循環プロパティのために、相対周波数0が周波数$ 2 \ pi $と等しくなければならない$ [0,2 \ pi] $の範囲のN点のスペクトルを計算します。これは、例を介して最もよく示されています。 $ 2 \ pi $はサンプリング周波数に対応しています。

Example: For a length 3 impulse response, say $h=[0.5, 1, 0.5]$, the FFT calculates the spectrum at the relative frequencies $[0, \frac{1}{3}2\pi, \frac{2}{3}2\pi]$, instead of the frequencies $[0, \frac{1}{2}2\pi, 2\pi]$. One way to calculate these frequencies in Matlab for an $N$ points FFT is as follows:

N = 3;
h = [0.5 1 0.5];
fq = linspace(0, 2*pi, N+1);
fq = fq(1:end-1);
H = fft(h);
figure; 
plot(fq, abs(H)); 

関数fftshiftは、スペクトルの右部分を取り、左に置いて、$ [\ frac {2} {3} 2 \ pi、0、\ frac {1} {3} 2 \ pi] $。

fftshift関数を使用せず、$ [0、2 \ pi] $の範囲をプロットするだけで、tの正の時間インデックスを使用することができます。

1
追加された