2013/02/10

Excelのフーリエ変換を使う

FPGAでフーリエ変換をする必要が出来たのだが、そもそもフーリエ変換が良くわかっていないので勉強してみました。
簡単にいうと、時間領域の信号(たとえばsin波)を周波数領域に変換することなのですが、そもそも勉強家じゃないとピンと来ない・・^^;
ググると色々出てきますが、まずは自分で解析して結果を見てみたいということで、Excelのアドイン機能の分析ツールを使えばフーリエ解析(FFT)が出来るようです。

(1) Excelのフーリエ変換を使用できるようにする
まず、Excelに分析ツールをアドインします。(Excel2010)


Excelを開き、「オプション」 → 「アドイン」 → 「設定」 をクリックすると、以下のウィンドウが表示


分析ツール(VBAってのもあったが両方チェックした)をチェックしてOK


Excelの「データ」タブに「分析」が追加される。これで準備完了。


(2) 分析したいデータを作成する
ここは何を測定したいかで全然変わるので難しいのですが、まずは簡単な例で作成してみます。パラメータは、
  被測定周波数        :5MHz (5MHzのサイン波に3次の波を加えて少し矩形波っぽくしたもの)
  サンプリング周波数:100MHz
  FFTポイント数        :128 (Excelで解析する場合2のべき乗であある必要がある)

上記パラメータですが、一般的にはまず被測定周波数が決まっており、それを何MHzでサンプリングし、FFTを掛けるかを設計すると思います。自分はサンプリング周波数を100MHzとしました。
分析出来る最大周波数はこのサンプリング周波数で自動的に決まります。それはナイキスト周波数と呼ばれ、サンプリング周波数の1/2で50MHzとなります。50MHzにしたのは、5MHzを矩形波と仮定した場合、その周波数成分は、5MHzの3次,5次,7次,9次・・の周波数成分の合成となるのですが、まぁ9次(5MHz×9=45MHz)くらいまで捉えられればいいやという仕様です。

次にFFTポイント数ですが、これはFFT分解能に関わってきます。「サンプリング周波数100MHz」/「FFTポイント数128」=781,250Hz 。これは、FFT結果の1ステップの周波数に相当、つまり、周波数解析できる分解能になります。この分解能が粗いと感じたらFFTポイント数を増やす必要があります。1024とか4096とかの方がいいのかな。(Excelだと4096とかだと2分くらい時間がかかるので128にしました)
ちなみに、100MHzで128サンプリングすると10ns×128=1.28usになります。5MHzは200usなので1.28us/200ns=6.4 で6.4個の5MHzをサンプリングすることになります。

Excelで被測定周波数を作成します。
矩形波っぽくするために、4/π*sin(2πft)+sin(2πft)/3 (合ってるのかな?) で5MHzのsin波に15MHz(3次)の高調波成分を合成して作成しました。Excelで波形を散布図で見るとちょっと粗いけど・・まぁいいや。



(3) FFT してみる
「データ」→「データ分析」をクリックすると、分析ルールのウィンドウがポップアップ。
「フーリエ解析」を選択しOK。さらに、フーリエ解析する範囲を聞かれる。出力先は指定しないと、デフォルトで別シートになってしまうため指定する。


FFT解析に数秒かかる。(4096とかだと数分かかるが辛抱強く待つ)
FFT結果は、複素数形式( a + bi )で出力される。a=実部、b=虚部 となる。複素数はここでは説明しない(出来ない^^;)が、出力パワーを知るには絶対値を求めれば良い。
複素数の絶対値を取るのに便利な関数が用意されている。IMABS() でサクッと絶対値を取る。


(4) FFT結果をグラフで表示する
128ポイント全ての結果をグラグ化すると以下の通り。
フーリエ解析のポイントが2点あります。
1点目は、128ポイントの後半64ポイントはミラー化されているだけなので基本的には使用しない領域。(ナイキスト周波数50MHzを超える部分)
2点目は、先頭データはDC成分が見えるため、これも基本的には使用しない。
(このサンプルはDC成分が無いため見えていないが、DC成分が多いと0番目の絶対値が大きすぎで、被測定周波数成分が立っていないように見えますがそんなことは無い。注意が必要)
※こういう時は、10*LOG(IMABS(),10)とすればdB表示になり、DC成分含め見やすくなるので、dB表示にした方が見やすいこともありますね・・

横軸を分解能の周波数に変更すれば、フーリエ変換結果の周波数成分が分かる(下のグラフ)
【解析1】 前半と後半は対象となっている
【解析2】 5MHzと15MHzの成分が検出されているのが分かる(5次以降は無い)
【解析3】 ちょっと粗いかな(FFTポイントを多くすれば解像度も上がりピークも滑らかになりそう)
【解析4】 縦軸は絶対値だが10log10(*)でdB表示するともう少し滑らかになる・・

以上、、
サンプリング周波数は10MHzでは上手く行きませんが、15MHzだと解像度も上がり5MHzのピークは良く見えますね。また、25MHzだと解像度も上がるし15MHzもちゃんと解析できますので、このパラメータの例だと25MHzサンプルくらいが良い感じです。
ナイキスト周波数と分解能の関係、FPGAリソースに応じてFFTサンプル周波数とサンプルポイント数を決めるのが良さそうです。

おわり。(日曜なのに仕事した気分です^^)

2 件のコメント:

  1. 大変参考になりました!
    フーリエ変換のイメージ湧きやすかったです!

    返信削除
    返信
    1. 参考になって良かったです。
      分からない人が書いたので、分かり安のかも^^;

      削除