チーム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タップハイパスフィルタ
4タップローパスフィルタ
考察
ローパスフィルタをかけると、矩形波が滑らかな図形になっていくのがわかる。今回の実装では、16回ローパスフィルタをかけるとグラフが平らになった。
ハイパスフィルタは、2タップの差が大きいほど出てくる図形は激しくなるので、今回の初期値だと4つの山が出てくる。4回ハイパスフィルタをかけるとグラフが消えた。
本来はFFTを実装したかったが完成に至らず、完成しているアベレージングフィルタを最終成果とする。
- 最終更新:2017-10-30 18:38:05