【実践編】MATLABで信号をFFT解析する方法

FFT

YouTube動画

基本的には同じ内容ですが、データの作り方など、少し細かく紹介しています。

こちらも是非チェックしてみてください!

相変わらずMATLABのマニュアルが分かりづらいのでまとめておきます。コードはまとめてコマンドウィンドウに貼り付けてOK。

想定読者

  • MATLABでFFT解析をしたい方
  • Excelでデータの用意

    ここでは例として、Excelでそれぞれ周波数の異なるsinカーブを3つ用意。
    今回は1Hz, 3Hz, 10Hzとした。
    それを足し合わせたE列の信号(黄色)を解析対象とする。

    スクリーンショット 2018 07 30 21 00 05

    A列とE列だけ残し、CSVファイルとして保存する。

    なお、それぞれの列の計算式は下記の通りです。

    • B列 ”=SIN(2*PI()*A2)”
    • C列 ”=SIN(2*PI()*3*A2)”
    • D列 ”=SIN(2*PI()*10*A2)”
    • E列 ”=SUM(B2:D2)”

    コピペすればExcelにそのまま貼り付けられるようになっています。また、私のGithubにもExcelファイルをアップしておくのでそちらもご利用下さい。
    https://github.com/buono/MATLAB_FFT

    MATLABでデータインポート

    MATLABで下記の通り、tとsumをそれぞれ配列としてインポート。

    スクリーンショット 2018 07 30 21 05 22

    スクリーンショット 2018 07 30 21 06 23

    信号を設定し、プロット

    今回は下記コードで0.002秒間隔で4秒までの信号を作った。

    T = 0.002;             % サンプル周期
    L = 1001;             % 信号のポイント数(時間じゃないので注意!)
    t = (0:L-1)*T;        % 時間ベクトル
    
    Y = fft(sum);
    P2 = abs(Y/L);
    P1 = P2(1:L/2+1);
    P1(2:end-1) = 2*P1(2:end-1);
    
    Fs = 1/T;
    F = Fs*(0:(L/2))/L;
    plot(F,P1);
    

    下記の通り、1Hz, 3Hz, 10Hzにピークがあるのが分かる。

    スクリーンショット 2018 07 30 22 06 06