数値解析と制御のためのScilab入門

数値解析と制御のためのScilab入門では、行列、微分方程式、制御などの基礎的な計算を紹介しています。また、計算結果をScilabを用いたグラフィック表示による可視化について紹介しています。

*

高速フーリエ変換 FFTの計算

   

高速フーリエ変換 FFT の計算を行ってみます。

 フーリエ変換は雑音を含んだ N 個の離散データ からなる信号 x,x2,…,xn のなかからある周波数成分 Xを見つけるために用いられます。また、 X から x を求めることを逆変換といいます。

 X を効率よく計算するアルゴリズムが高速フーリエ変換(Fast Fourier Transform; FFT)と呼ばれています。scilabを用いて FFT 解析を行ってみることにします。

SPONSORED LINK

例として、サンプリング周波数を1kHzとし、周波数が50,90Hzの合成波のノイズがないものとして周波数を求めてみることにします。以下のようなプログラムを実行することによって得られます。


(1) ノイズなしの場合のFFT解析

1. // pure frequencies : 50 and 90 Hz
2. sample_rate=1000;
3. t = 0:1/sample_rate:0.5;
4. N=size(t,’*’); //number of samples(501)
5. clf();
6. s=sin(2*%pi*50*t)+sin(2*%pi*90*t+%pi/4);//+grand(1,N,’nor’,0,2);
7. subplot(2,1,1)
8. plot(t,s)
9. y=fft(s);
10. f=sample_rate*(0:(N/2))/N; //associated frequency vector
11. n=size(f,’*’)
12. subplot(2,1,2)
13. plot(f,abs(y(1:n)))


【プログラムの主なな概要】
2行目ではサンプリング周波数1000Hzとします。
3行目ではサンプリング時間を0.5(s)で時間ステップは0.001(s)です。
4行目ではサンプリング数で501個となります。
6行目でノイズがない場合の50,90Hzの合成波を求めています。
7行目でサブウインドウを指定しています。
8行目では合成波を表示しています。
9行目ではFFTの計算を行っています。
10行目で周波数を求めています。
11行ではサブウインドウを指定しています。
12行目ではfを横軸にFFTの値を表示します。


高速フーリエー変換 FFT

上の波形は、解析するための波形で、下の図はFFT解析による図です。
図からわかるように50Hz,と90Hzの波形のピーク値が見られます。周波数が混在した波形から、その波形が構成されている周波数を推測できます。
周波数解析においてFFTは、有効な手法の一つであることがわかります。


 - グラフィック, 組込み関数

        

  関連記事

カラーマップ:jetcolormap
3次元曲面をカラープロット surf で表示する

3次元グラフィックスを表示する場合に surf を使用します。また、プロットした …

正規分布
正規分布と相関係数

正規分布と相関係数について行ってみます。 初めに  ・正規分布  ・相関係数 を …

scilab 絶対値
絶対値の計算 abs|scilab入門

絶対値の計算:abs の計算の紹介です。  5 – 9 の計算は   …

ポリゴンを塗りつぶす
ポリゴンを任意の色で塗りつぶす xfpoly

ポリゴンを塗りつぶしたい場合があるかと思いっます。 塗りつぶす命令として xfp …

グラフィック・ウインドウに
複数の色を用いてグラフを描く plot2d

ヒトツノウインドウにラインの色を変化させて、数個のグラフを重ねて表示することにし …

scilab べき乗
べき乗 ^|scilab入門

べき乗の計算には ( ^ )を使います。 2の8乗についての計算は次のようになり …

グラフに文字列を描画:xstring
グラフに文字列を描画 xstring

グラフに項目たタイトルの文字列を描画して見やすくする方法があります。 描画するグ …

scilab パイi
円周率 π を表す|scilab入門

円周率 π を表す場合には、パーセントの後にpiとし  %pi のように表記しま …

scilab 余り
余りを求める modulo |scilab入門

除算をした場合に、余りを求めたい場合があります。 余りを求める関数がmodulo …

一つのグラフィックウインドウに複数のグラフを描くsubplot
一つのグラフィックウインドウに複数のグラフを描くsubplot

一つのグラフィックウインドウに複数の裏婦を描き活用したい場合にとても便利なコマン …