チーム13A7

課題名[#k04f474c]

高速フーリエ変換結果の出力

研究者名

3-15-27 高山 大輝

概要

高速フーリエ変換アルゴリズムを用いて
適当に作成した関数(複素関数も可)をフーリエ変換する。
変換後はLCD内に周波数成分ごとの棒グラフを出力させる。

ソースコード

#include <device.h>
#include <math.h>
#define PI 3.141592653
#include <fft.h>

//double data_re[N_points];   // 実数部
//double data_imm[N_points];  // 虚数部

/* テスト用関数 */
void make_wave(void)
{
  int i;
   for(i = 0; i < N_points; i++) {
   /*
       if(i % (N_points/2) < (N_points/4)) {
           data_re[i] = 0.0;
           data_imm[i] = 50.0;
       }
       else {
           data_re[i] = 100.0;
           data_imm[i] = -100.0; 
       }
       */
       data_re[i]=sin(i*2*PI/N_points)+0.5*sin(2*i*PI*2/N_points)
           +0.8*sin(3*i*PI*2/N_points);
       data_imm[i]=0.0;
   }
}


void main()
{
  int i=0;
   LCD_Char_1_Start();
   LCD_Char_1_ClearDisplay();

  make_wave();

  FFT(1, exponent, data_re, data_imm);
   for(;;)
   {
       /*
       if(SW_Read()){
           FFT(0,exponent,data_re,data_imm);
       }
       */
       
       for(i=0;i<16;i++)
       {   
           LCD_Char_1_DrawVerticalBG(1, i, 2,(int)(mod[i]*1000));
       }
   }
}

/* [] END OF FILE */

表示結果

LCDの左端を直流項としてそのとなりに基底周波数成分、
そのとなりに二倍、三倍と表示されるようになった。
ソースコードで波を複数の正弦波のみで構成して
各成分がその通りになっているか確認した。

考察

今回は自身で作成した矩形波などを高速フーリエ変換したが
PC上から取り込んだ音を変換してみてもおもしろかったのかもしれない。

  • 最終更新:2013-11-18 00:27:34

このWIKIを編集するにはパスワード入力が必要です

認証パスワード