remezb
振幅応答のミニマックス近似
呼び出し手順
[an]=remezb(nc,fg,ds,wt)
引数
- nc
余弦関数の数
- fg
[0,.5)の範囲の周波数点のグリッド
- ds
グリッド
fg
の指定する振幅- wt
グリッド
fg
の誤差の重み関数- an
余弦フィルタ係数
説明
周波数領域振幅応答のミニマックス近似.
この近似は,n=0,1,...,ncとして
h = sum[a(n)*cos(wn)]
の形式となります.
以下のコマンドによりFIR, 線形位相フィルタを
関数の出力から得ることができます.
hn(1:nc-1)=an(nc:-1:2)/2; hn(nc)=an(1); hn(nc+1:2*nc-1)=an(2:nc)/2;
例
// Choose the number of cosine functions and create a dense grid // in [0,.24) and [.26,.5) nc=21;ngrid=nc*16; fg=.24*(0:ngrid/2-1)/(ngrid/2-1); fg(ngrid/2+1:ngrid)=fg(1:ngrid/2)+.26*ones(1:ngrid/2); // Specify a low pass filter magnitude for the desired response ds(1:ngrid/2)=ones(1:ngrid/2); ds(ngrid/2+1:ngrid)=zeros(1:ngrid/2); // Specify a uniform weighting function wt=ones(fg); // Run remezb an=remezb(nc,fg,ds,wt) // Make a linear phase FIR filter hn(1:nc-1)=an(nc:-1:2)/2; hn(nc)=an(1); hn(nc+1:2*nc-1)=an(2:nc)/2; // Plot the filter's magnitude response plot(.5*(0:255)/256,frmag(hn,256)); // Choose the number of cosine functions and create a dense grid in [0,.5) nc=21; ngrid=nc*16; fg=.5*(0:(ngrid-1))/ngrid; // Specify a triangular shaped magnitude for the desired response ds(1:ngrid/2)=(0:ngrid/2-1)/(ngrid/2-1); ds(ngrid/2+1:ngrid)=ds(ngrid/2:-1:1); // Specify a uniform weighting function wt=ones(fg); // Run remezb an=remezb(nc,fg,ds,wt) // Make a linear phase FIR filter hn(1:nc-1)=an(nc:-1:2)/2; hn(nc)=an(1); hn(nc+1:2*nc-1)=an(2:nc)/2; // Plot the filter's magnitude response plot(.5*(0:255)/256,frmag(hn,256));
参照
- eqfir — FIRフィルタのミニマックス近似
Report an issue | ||
<< remez | Filters | sgolay >> |