SSブログ
Octave workshop ブログトップ

インパルス応答の周波数特性表示 [Octave workshop]

タップ数やフィルタ係数を決め打ちで、f特を求めたい時に使います。

> IP=[1,1,1]/3;
> [h,w]=freqz(IP);
> grid on;
> plot(w, 20*log10(abs(h)));


3平均化フィルタの周波数特性(ナイキスト=π)

フィルタによっては、次のような、変な特性が求まることがあります。
> IP=[1,0,2,0,1]/4;
> [h,w]=freqz(IP);
> grid on;
> plot(w, 20*log10(abs(h)));


[1,0,2,0,1]/4のフィルタ係数を持つフィルタのf特 変な例

これは、算出したf特が絶対値0(0+0i)を持つ場合に現れる現象のようです。
暫定かもしれませんが、解決法としては、
①周波数軸を0~πに限定表示する方法
②該当する部分のf特を、固定値に挿げ替える方法
の2種類が考えられます。

①周波数軸を0~πに限定表示する方法
> axis([0 3.15 -100 0]);

以下の警告は、その通りです、と認識する程度。
warning: axis: some elements in list of return values are undefined


[1,0,2,0,1]/4のフィルタ係数を持つフィルタのf特 表示域0~π

②該当する部分のf特を、固定値に挿げ替える方法
plot文の行、abs(h)の部分をabs(h+0.00001)→-100dB(h=0) に挿げ替え
> plot(w, 20*log10(abs(h+0.00001)));

これで、abs(h)=0で変になっていた点が、-100dBに固定されます。
何dBに固定するかは、TPOに合わせて、お好みで。


[1,0,2,0,1]/4のフィルタ係数を持つフィルタのf特 -100dB固定



Octave workshop について [Octave workshop]

ディジタルフィルタ設計的なことをやらなければならなくなったため、Octave workshopをインストールした。
※Octave workshopはMATLABライクな数値計算ソフト。
私の場合は主に、画像のフィルタリングや、インパルス応答の周波数特性を簡単に求めるためのツールとして使いたいと思ってる。

MATLABは高いので。。。

とりあえず、Octaveでf特の出し方、備忘録。

> IP=[1,1,1]/3;
> [h,w]=freqz(IP);
> plot(w, 20*log10(abs(h)));

3平均化フィルタのf特を得られたので、とりあえずOK。
でも、インパルス応答を
IP=[1,0,2,0,1]/4;
とかしたら、グラフの横軸がπをはるかに越えて300位まで伸びてしまい、なんかよくわからないグラフになった。

あと、一回plot関数でエラーを吐かせると、なぜか復帰しない。

うむ。。。

Octaveのダウンロード先(日本のミラーサイト)
http://www.ics.es.yamanashi.ac.jp/mirror/octave-workshop/


Octave workshop ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。