チーム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 */
画像
図1:初期信号
図2:初期信号のLPF変換
図3:初期信号のHPF変換
図4:LPF変換後の信号とHPF変換後の信号の合成
考察
LPFとHPFを使って一つの信号を分解し、その後分解した二つの信号を再び合成した。
この作業により低周波と高周波の信号がLCDに表示されなくなった。
これは以上の作業が低周波と高周波の信号をカットしたBPFの処理をしたと考えられる。
実際は通過域と減衰域の境目で信号をカットするcutoffを行う必要があるが、今回は時間の関係で断念した。
- 最終更新:2017-06-12 17:15:30