私はMatlabと高速フーリエ変換アルゴリズムを学んでいます。MatlabのFFT(高速フーリエ変換)の使い方
私はこの例を複製しようとした最初のステップとして:https://en.wikipedia.org/wiki/Fourier_transform#Example
Iは、次のコードを使用し
t = -6:0.01:6;
s = cos(2 * pi * 3 * t) .* exp(-pi * t.^2);
figure(1);
plot(t, s);
xlim([-2 2]);
r = fft(s);
figure(2);
plot(t, abs(r));
およびIは、次のピクチャを得:
図2:
を図1はOKですが、図2はOKです。問題の1つは、図2では、時間に対してではなく、の頻度に対してベクトルr をプロットする必要があることです。図2の別の問題は、Y軸のスケールです。
- がどのように私は、周波数領域(図2のX軸)を得ることができます。
したがって、私は例を複製するために、2つの質問がありますか?
- ベクトルr(図2のY軸)をどのようにスケールする必要がありますか?
:ここ
は作業FFTの概要であります実用的なFFTはとにかく正確ではありません)、それはスピードです。問題をより簡単に細分化することができるため、小さな素因数の変換サイズはより高速に実行されます。 – CKT
@CKT私は信号の長さが問題であるとは言いませんでしたが、それはスターターとしての彼/彼女のための示唆に過ぎませんでした。スピードは真ですが、周波数分解能の精度は、電力2の信号長を取ることによって直接影響を受けます。これはDFTではなくFFTの場合です。自分で試してみることができます。 – Soyol
はい、あなた自身で試すことができます: >> DFT = @(N)exp(-1j * 2 * pi/N *(0:(N-1))*(0:(N-1)) ); >> x = randn(100,1); >> max(abs(DFT(100)* x-fft(x))./abs(DFT(100)* x) ans = 1.3516e-13 >> x = [x; 0(28,1)]; >> max(abs(DFT(128)* x-fft(x))./ abs(DFT(128)* x)) ans = 1。5653e-13 2の威力を持たないというわけではありませんが、必ずしもあなたに悪い精度を与えるわけではありません。人々は精度のためにFFTで2のべき乗を使用せず、スピードを上げるために使用します。一般に、2のべき乗以外のサイズの精度は悪化することはありません。 exp(__)の項は、Nが2の累乗であるとき、より良い丸めを与えることはありません。 – CKT