チーム15C4
課題名
アベレージフィルタ
研究者名
Yuki Yamashita
Masashi Yoshikawa
概要
初期状態としてLCDに出力してある波が、スイッチを押すたびにアベレージフィルタによって
振幅が変化する様子をディスプレイに表示する。
ソースコード
#include<stdio.h>
#include <math.h>
#include <device.h>
#define N 32
void main()
{
int i;
double average_wave[N];
int initial_wave[N] = {0,4,8,12,16,12,8,4,0,4,8,12,16,12,8,4,0,4,8,12,16,12,8,4,0,4,8,12,16,12,8,4};
LCD_Char_1_Start(); LCD_Char_1_ClearDisplay();
for(i = 0; i < N; i++){ average_wave[i] = initial_wave[i]; } while(1){
if(SW_Read()){ for(i = 0; i < N; i++){ initial_wave[i] = average_wave[i]; } for(i = 0; i < N - 3; i++){ average_wave[i] = ( initial_wave[i] + initial_wave[i + 1] + initial_wave[i + 2] + initial_wave[i + 3] ) / 4; } while(SW_Read()); } for(i = 0; i < N; i++) { LCD_Char_1_DrawVerticalBG(1,i,2,average_wave[i]); } }
}
考察
アベレージフィルタをかける度に、グラフが滑らかになり、波が最後的に水平になった。これ以上は変化が起きなくなった。
これは隣り合う値の平均を計算するので、この計算を繰り返す度にそれぞれの値が近くなり、最終的にはどの要素も同じ値になる。
6回フィルタをかけると水平になった。
- 最終更新:2015-07-13 16:14:20