Mathematics | ![]() ![]() |
はじめに
長さNの入力列xに対して、DFTは長さNのベクトルXになります。fft
とifft
の関係は、つぎのようになります。
x(n) が実数の場合、上の方程式は、実数係数とsin
とcos
関数の和として表わすことができます。
x = [4 3 7 -9 1 0 0 0]' ;
y = fft(x)
y = 6.0000 11.4853 -2.7574i -2.0000 -12.0000i -5.4853 +11.2426i 18.0000 -5.4853 -11.2426i -2.0000 +12.0000i 11.4853 + 2.7574i
データ列x
は実数で、y
は複素数であることに注意してください。変換されたデータの最初の成分は、定数として機能し、5番目の要素はNyquist周波数に対応します。y
の最後3つの値は、負の周波数に対応し、実数列x
に対して、y
の前半の3つの要素の複素共役になります。
この300年間の太陽の黒点の活動の変化を解析しましょう。太陽の黒点の活動は、約11年の周期をもっていることが知られています。確認して見ましょう。
天文学者は、ほぼ300年間のWolfer数と呼ばれる量の一覧をもっています。この中には、太陽の黒点の数と大きさを含んでいます。
load sunspot.dat year = sunspot(:,1); wolfer = sunspot(:,2); plot(year,wolfer) title('Sunspot Data')
Y = fft(wolfer);
この変換の結果は、複素数ベクトルY
になります。Y
の二乗の大きさは、パワーとよばれ、周波数に対してパワーのプロットは、"ピリオドグラム"と言われます。すべてのデータを加算したY
の最初の要素を取り除き、結果をプロットします。
N = length(Y); Y(1) = []; power = abs(Y(1:N/2)).^2; nyquist = 1/2; freq = (1:N/2)/(N/2)*nyquist; plot(freq,power), grid on xlabel('cycles/year') title('Periodogram')
年数に関する周期性のスケーリングは、幾分不便なものです。何が1サイクルなのかを推定するため1サイクルに対する年数をプロットします。便宜的に、0から40years/cycleの周期に対してパワーをプロットします(周期はperiod = 1./freq
)です)。
period = 1./freq; plot(period,power), axis([0 40 0 2e7]), grid on ylabel('Power') xlabel('Period(Years/Cycle)')
[mp index] = max(power); period(index) ans = 11.0769
![]() | 関数のまとめ | 変換されたデータのゲインと位相 | ![]() |