第10回 FIR回路とIIR回路
復習 ・インパルス応答 システムにインパルスを加えたときの出力(応答) ・畳み込み システムにインパルスを加えたときの出力(応答) ・畳み込み システムの出力は、インパルス応答h(n)と入力信号x(n) の畳み込みとなる。 y(n)=Σh(k)x(n-k)=h(n)*x(n) インパルスδ(n) インパルス応答h(n) 1 システム n n M k=0
畳み込み + 畳み込み y(n)=Σh(k)x(n-k) D D D メモリB 入力データx(k) メモリA インパルス応答h(k) 3 畳み込み y(n)=Σh(k)x(n-k) D D D k=0 メモリB 入力データx(k) h(0) h(1) h(2) h(3) メモリA インパルス応答h(k) n=0 n=1 n=2 + h(0) h(1) h(2) h(3) x(0) x(1) x(0) x(2) x(1) x(0) データの流れ × n=0 y(0)=h(0)x(0) n=1 y(1)=h(1)x(0)+h(0)x(1) n=2 y(2)=h(2)x(0)+h(1)x(1)+h(0)x(2) レジスタ
FIR回路 ① 有限長インパルス応答(Finite Impulse Response)回路 [FIR回路] インパルス応答が有限である回路 一般形 y(n)=Σh(k)x(n-k) n=0~Mの間だけ応答がある n<0 および n>M において、h(n)=0 x(n) D D ・・・ D M h(0) h(1) h(2) ・・・ h(M) k=0 + y(n)
FIR回路の例 + x(n) D D 左図のインパルス応答は y(n)=h(n) y(n) n 差分方程式: 0.5 0.3 0.1 y(n)=h(n) + 有限で終わる y(n) n 0 1 2 3 4 5 6 差分方程式: y(n)=0.5x(n)+0.3x(n-1)+0.1x(n-2)
IIR回路 ② 無限長インパルス応答(Infinite Impulse Response)回路 [IIR回路] インパルス応答が無限である回路 一般形 y(n)=Σaix(n-i)+Σbjy(n-j) n=∞まで、応答がある x(n) y(n) + + a0 D N M a1 b1 i=0 j=1 D a2 b2 : aN bM
IIR回路の例 + x(n) y(n) 左図のインパルス応答は D y(n)=h(n) 0.5 D ・・・ n 0.5 差分方程式: 無限に続く ・・・ n 0.5 0 1 2 3 4 5 6 ・・・ 差分方程式: y(n)=x(n)+0.5y(n-1)+0.5y(n-2)
差分方程式の導出(IIR回路) + + 下図のIIR回路の差分方程式を求める。(2次IIR回路という :遅延器の数が2個で2次) w(n)=x(n)+b1w(n-1)+b2w(n-2) -① y(n)=a0w(n)+a1w(n-1)+a2w(n-2) -② ①を②のw(n),w(n-1),w(n-2)に代入する。 y(n)= a0{x(n)+b1w(n-1)+b2w(n-2)} +a1{x(n-1)+b1w(n-2)+b2w(n-3)} +a2{x(n-2)+b1w(n-3)+b3w(n-4)} = a0x(n)+a1x(n-1)+a2x(n-2) + b1{a0w(n-1)+a1w(n-2)+a2w(n-3)} + b2{a0w(n-2)+a1w(n-3)+a2w(n-4)} +b1y(n-1)+b2y(n-2) w(n) x(n) y(n) + + a0 D w(n-1) a1 b1 D =y(n-1) a2 b2 =y(n-2) w(n-2)
インパルス応答と周波数特性 FIR回路、IIR回路のインパルス応答が h(0),h(1),h(2),・・・・,h(M) であるとき、この回路の伝達関数H(jωT)は と与えられ、オイラーの公式を用いて、伝達関数は H(jωT)=A(ωT)+jB(ωT) の形に整理できるので、この回路の周波数特性は第7回に示したように、 振幅特性 位相特性 となる。 オイラーの公式 |H(jωT)|= A2(ωT)+B2(ωT) ディジタルの場合、 ωT(規格化周波数という) を0~πの範囲で振幅特性、 位相特性のグラフを描く B(ωT) θ=tan-1 A(ωT)
演習 + + 1.次の回路の名称を答え、差分方程式、回路のインパルス応答を求めなさい。 (a) (b) 2.上記回路(a)の出力yaを回路(b)の入力xbに加えるとき、回路(b)の出力は どのような信号となるか調べなさい? xa(n) ya(n) xb(n) yb(n) + + D D 0.5 -0.5
+15点レポート 別配布のIIRフィルタプログラムについて、問を行い提出すること 提出期限 12月13日(金) 提出期限 12月13日(金) 提出形式 A4用紙レポート形式 orメール添付形式 A4用紙の場合 提出場所 研究棟A11階 情報通信工学科事務室 ディジタル信号処理Ⅰ レポート提出箱 メールの場合 report@tb.in.teu.ac.jp
課題 + + ①添付のサンプルプログラムは2次IIR回路のものである。IIR回路の次数 が変化してもIIRフィルタ関数を修正しなくてすむようにするには、(a) の部分をどのように訂正すべきか答えなさい。 ②①で訂正したプログラムを元に係数設定を下図のIIR回路の係数に変更し、 入力信号をx(n)=2*sin(0.2nπ)+2*cos(nπ)とし(n=0~50)、このプログラ ムによる出力信号と入力信号のグラフを示し、比較結果を述べなさい。 ③下図のIIR回路のインパルス応答を求め、このIIR回路の周波数特性を、 規格化周波数ωTを横軸にグラフで示し、この回路の特性を述べなさい。 x(n) y(n) + + D 1.0 D -1.0
IIR回路サンプルプログラム 次項に続く #include <stdio.h> /* 入力信号の取り込み回数ITの設定 */ #include <math.h> #include <stdlib.h> #define N 3 /* フィルタ次数+1 */ void iniv(double a[],int n); void iir(int n,double a[],double b[], double x,double *y,double w[]); main() { int i,j,IT; double a[N],b[N],w[N]; double x,y; /* 配列の初期化 */ iniv(w,N); iniv(a,N); iniv(b,N); /* IIRフィルタの係数設定 */ a[0]=1.0; a[1]=1.0; a[2]=1.0; b[1]=2.0; b[2]=3.0; /* 入力信号の取り込み回数ITの設定 */ IT=10; /* ループ */ for(i=0;i<IT;i++){ /* 入力信号の設定 (このサンプルはインパルス) */ if(i==0) x=1.0; else x=0.0; /* IIR関数へ */ iir(N,a,b,x,&y,w); /* 出力表示 */ printf("out[%4d]=%lf\n",i,y); /* データのシフト */ for(j=N;j>=1;j--){ w[j]=w[j-1]; } 次項に続く
続き (a) /* 配列の初期化関数 */ void iniv(double a[],int n) { int i; for(i=0;i<=n;i++){ a[i]=0.0; } /* IIRフィルタ関数 */ void iir(int n,double a[],double b[],double x, double *y,double w[]) *y=0.0; w[0]=x+b[1]*w[1]+b[2]*w[2]; *y=a[0]*w[0]+a[1]*w[1]+a[2]*w[2]; サンプルプログラムの出力結果 out[0]=1.0 out[1]=3.0 out[2]=10.0 out[3]=29.0 out[4]=88.0 out[5]=263.0 out[6]=790.0 out[7]=2369.0 out[8]=7108.0 out[9]=21323.0 (a)