スポンサーリンク

フーリエ変換のプログラムを自分で作成してみた

フーリエ変換を用いることで、時間による関数で与えられている信号に含まれる周波数成分を求めることが出来ます。

このフーリエ変換を行うためのプログラムは多く存在しますが、より理解を深めるために自分でプログラムを作ってみることにしました。

今回の記事では、実際にフーリエ変換を行うプログラムを作成し、動作を確認していきたいと思います。

フーリエ変換とは

フーリエ変換とは、時間t[sec]で与えられた関数f(t)を角周波数ω[rad/sec](または周波数f[Hz])の関数F(ω)に変換する手法のことを言います。

フーリエ変換の基本式

このフーリエ変換の基本式は

$$ F(\omega) = \int_{-\infty}^{\infty} f(x) e^{- i \omega x} dx $$

で与えられます。

このフーリエ変換の基本式は、角周波数ωの代わりに周波数kを用いて

$$ F(k) = \int_{-\infty}^{\infty} f(x) e^{-2\pi i k x} dx $$

と表すこともできます。

個人的には、周波数の方が角周波数より扱いやすいので、今回の記事では2つ目の式を用いていきたいと思います。

離散フーリエ変換

実際に取り扱う信号は、連続的な信号ではなく、一定間隔でサンプリングされた離散的な信号の場合が多いです。

この様な離散信号のフーリエ変換を行う方法として、離散フーリエ変換があります。

この離散フーリエ変換の基本式は、

$$ F(k) = \frac{1}{N} \displaystyle \sum_{ n = 0 }^{ N-1 } f(n) {W_N}^{kn} $$

で表されます。

ここで、基本式に含まれるWN

$$ W_N = e^{-j \frac{2\pi}{N}} $$

で与えられます。

この任意の離散フーリエ変換の式を基に、与えられた離散信号に含まれる任意の周波数成分を求める式は

$$ F(\omega) = \frac{1}{N} \displaystyle \sum_{ n = 0 }^{ N-1 } f(n) e^{-j \omega T_s n} $$

となります。

フーリエ変換のプログラム

実際にMATLABで作成した離散フーリエ変換のプログラムについて説明します。

プログラム

離散フーリエ変換を行う関数:dft

function [Xk] = dft(xn,k,Ts)
    N = length(xn);

    for i = 1:length(k)
        Xk(i) = sum(xn.*exp(-1j*2*pi*k(i)*Ts.*(0:N-1)))/N;
    end
end

解説

関数dft()に与える入力は、

  • xn:変換したい離散信号
  • k:求めたい周波数ベクトル
  • Ts:離散信号のサンプリング間隔

です。

これらの値を入力として与えると、関数dft()内で

$$ F(\omega) = \frac{1}{N} \displaystyle \sum_{ n = 0 }^{ N-1 } f(n) e^{-j \omega T_s n} $$

の式を基に計算を行い

  • Xk:離散フーリエ変換後の値

を出力します。

動作確認

動作確認のために

$$ x(t) = 2 \sin \left( 8 \pi t\right) + 3 \sin \left( 34 \pi t\right) $$

という信号を入力として与えた結果を下図に示します。

グラフをみると、4Hzと17Hzの周波数成分にピークが出ていることが分かります。

この離散フーリエ変換の結果より、入力信号には4Hzと17Hzの成分で構成されていることが分かりました。

実際に入力した離散信号の式は

$$ \begin{eqnarray} x(t) &=& 2 \sin \left( 8 \pi t\right) + 3 \sin \left( 34 \pi t\right) \\ &=& 2 \sin \left( 2 \pi 4 t\right) + 3 \sin \left( 2 \pi 17 t\right) \end{eqnarray}$$

のように4Hzと17Hzのsin波の足し合わせなので、この結果は正しいことが分かります。

絶対値が2分の1(半分)になっているのは、フーリエ変換の特性のためです。

※また機会(要望)があれば、詳しく説明したいと思います。

まとめ

今回は、フーリエ変換についての簡単な説明と、実際に作成したプログラムを紹介しました。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

関連コンテンツ