チーム17B3

課題名

LPFとHPFによるBPF生成

研究者名

3-14-21 Shingo Kitahara
3-14-30 Kengo Shimizu

概要

チーム14A4を参考にして作成した。
LPFとHPFを使って一つの信号を分解し、その後分解した二つの信号を再び合成した。

ソースコード

#include <device.h>
#include <math.h>


#define N 16

double h6[N];

void a(double h[])
{
int i=0, j=0, value[N];
  double max=0.0, a=0;
  double d[N];
  double wc[N][N], ws[N][N];
  double dc[N], ds[N];

//初期化
  for(i=0; i<N; i++){
      for(j=0; j<N; j++){
          wc[i][j]=0; ws[i][j]=0; dc[i]=0; ds[i]=0;
      }
  }
  
  //Wの実部と虚部
  for(i=0; i<N; i++){
      for(j=0; j<N; j++){
          wc[i][j]=cos(2*M_PI*i*j/N);
          ws[i][j]=-sin(2*M_PI*i*j/N);
      }
  }
  
  //DFT
  for(i=0; i<N; i++){
      for(j=0; j<N; j++){
          dc[i]=dc[i]+wc[i][j]*h[j];
          ds[i]=ds[i]+ws[i][j]*h[j];
      }
  }
   
  //√p^2+q^2
  for(i=0; i<N; i++){
      d[i]=sqrt(dc[i]*dc[i]+ds[i]*ds[i]);
      d[i] /= N;
      if(max < d[i]){
          max=d[i];
      }
  }
  
  //value
  a=max/16;
  for(i=0; i<N; i++){
      value[i]=(int)(round(d[i]/a));
  }
  //表示
  for(i=0; i<N; i++){
      LCD_Char_1_DrawVerticalBG(1, i, 2, value[i]);
  }}
  
  void b(double h4[],double h5[]){
  int i=0;
  h6[i++] = 0.5*h4[0];
  int value[N];
  for(;i<N;i++){
  h6[i]+=h4[i]*cos(i*(2*M_PI/N))+h5[i]*sin(i*(2*M_PI/N));
  }
     for(i=0; i<N; i++){
      value[i]=(int)(round(h6[i]));
  }
   for(i=0; i<N; i++){
      LCD_Char_1_DrawVerticalBG(1, i, 2, value[i]);
  }
  
  }
void main(){



LCD_Char_1_Start();
int i=0;
  double h[20]={0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0};
  double h4[20],h5[20];
 
  //LPF    
  for(i=0;i<N;i++){
  h4[i] = ( h[i] + h[i+1] + h[i+2] + h[i+3] ) / 4.0;
  }

 //HPF
  for(i=0;i<N;i++){
  h5[i]=(h[i]-h[i-1])/2.0;
  }



 a(h);
  CyDelay(1000u); //1000u秒時間を置く
  LCD_Char_1_ClearDisplay();
  a(h4);
  CyDelay(1000u); //1000u秒時間を置く
  LCD_Char_1_ClearDisplay();

 a(h5);
  CyDelay(1000u);
  LCD_Char_1_ClearDisplay();    
  b(h4,h5);
  
}
/* [] END OF FILE */

画像

17b3_1.jpg
図1:初期信号
17b3_2.jpg
図2:初期信号のLPF変換
17b3_3.jpg
図3:初期信号のHPF変換
17b3_4.jpg
図4:LPF変換後の信号とHPF変換後の信号の合成

考察

LPFとHPFを使って一つの信号を分解し、その後分解した二つの信号を再び合成した。
この作業により低周波と高周波の信号がLCDに表示されなくなった。
これは以上の作業が低周波と高周波の信号をカットしたBPFの処理をしたと考えられる。
実際は通過域と減衰域の境目で信号をカットするcutoffを行う必要があるが、今回は時間の関係で断念した。

  • 最終更新:2017-06-12 17:15:30

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

認証パスワード