チーム17D1

課題名

アベレージングフィルタ

研究者名

Masaru Aono

概要

17C2を参考に、2タップのハイパスフィルタと4タップのローパスフィルタを作成した。
SW2を押すとハイパスフィルタ、SW3を押すとローパスフィルタがかかる。

ソースコード

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

void main()
{
#define N 32
int wave[N] = {1,1,1,1,16,16,16,16,1,1,1,1,16,16,16,16,1,1,1,1,16,16,16,16,1,1,1,16,16,16,16};
  int avewave[N];
  int i,j,k;
  LCD_Char_1_Start();
  LCD_Char_1_ClearDisplay();
  
  for(;;)
  {
    //2タップアベレージングフィルタ
     if(!SW2_Read()){
         LCD_Char_1_ClearDisplay();
         for(i=0;i<N;i++){
            avewave[i]=wave[i];
         }
         for(j=0;j<N;j++){
              wave[j]=(avewave[j]-avewave[(j+1)%32])/2;
              if(wave[j]<0){
              wave[j]=-wave[j];
              }
         }
         while(!SW2_Read()){
             for(k=0;k<N;k++){
               LCD_Char_1_DrawVerticalBG(1,k,2,wave[k]);
            }
         }
     }
     //4タップアベレージングフィルタ
     else if(!SW3_Read()){
         LCD_Char_1_ClearDisplay();
         for(i=0;i<N;i++){
            avewave[i]=wave[i];
         }
         for(j=0;j<N;j++){
              wave[j]=(avewave[j]+avewave[(j+1)%32]+avewave[(j+2)%32]+avewave[(j+3)%32])/4;
         }
         while(!SW3_Read()){
             for(k=0;k<N;k++){
               LCD_Char_1_DrawVerticalBG(1,k,2,wave[k]);
            }
         }
     }
     
     else
     for(k=0;k<N;k++){
             LCD_Char_1_DrawVerticalBG(1,k,2,wave[k]);
          }
  
     }
}
/* [] END OF FILE */

実行結果

2タップハイパスフィルタ
17D1_5.JPG
17D1_2.JPG
17D1_3.JPG
17D1_4.JPG
4タップローパスフィルタ
17D1_5.JPG
17D1_6.JPG
17D1_7.JPG
17D1_8.JPG

考察

ローパスフィルタをかけると、矩形波が滑らかな図形になっていくのがわかる。今回の実装では、16回ローパスフィルタをかけるとグラフが平らになった。
ハイパスフィルタは、2タップの差が大きいほど出てくる図形は激しくなるので、今回の初期値だと4つの山が出てくる。4回ハイパスフィルタをかけるとグラフが消えた。

本来はFFTを実装したかったが完成に至らず、完成しているアベレージングフィルタを最終成果とする。

  • 最終更新:2017-10-30 18:38:05

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

認証パスワード