手習ひデジタル信号処理(22) 残響生成器その2、全域通過フィルタ、Scilabで見る

Joseph Halfmoon

残響生成器の2回目は、2個目の要素部品、全域通過フィルタ(all pass filter)であります。前回同様、要素部品は、Scilab使って「味わってみる」と(実機で個別に動かすのがメンドイだけだろ~。)前回から比べるとXCOSでのブロックダイアグラムが少しこなれてきた?分からんけど。

毎度、お世話になっております。手習ひさせていただいております教科書へのリンクは以下です。

三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理

今回テーマは、上記教科書の「6.2 残響生成器」の6.2.2あたりです。

Scilab XCOSでブロックダイアグラム描いてシミュレーション

これまた前回同様にXCOS(MATLABのSimulinkに似た?もの)を使ってブロックダイアグラムを描き、インパルス応答を見るところからです。

ブロック図は上記教科書の図14のものそのままです。恐れ多いことですが、図14には申し上げたきことあり、です。図14のタイトル『「全域通過フィルタ」による「残響生成ユニット」の「ブロック図」』とあるのですが、このタイトルでは、「残響生成ユニット」全体の「ブロック図」と読めるような気がいたします。図14自体は「全域通過フィルタ」ですよね。多分。

XCOS上で描いた「残響生成ユニット」用の「全域通過フィルタ」のブロックダイアグラムを冒頭のアイキャッチ画像に掲げました。前回は、Z-1 ブロックを並べて描いていて長大、かなり見苦しかったです。大体何百個も並べなくてはならなくなったらどうするの、という感じ。今回は、多少進歩?したかも知れません。Shift Registerというブロックを使えば、Z-M ブロック相当のお仕事をブロック一つで済ませられそうでした。それを使ってみました。ブロック図スッキリ。

そして今回やってみた、M=10のケースにピッタリだったのが、M=10個にちょうどいいように初期値設定されていたことです。ただね、M=59個とか、M=97個とか実際の回路のときの数字にすると初期値設定するだけで手が疲れてしまいそうな気がしないでもない(取り合えずコピペで作ればいいんでないかい、自分。)

また今良く見直したら、三上先生の教科書ではM=10、g=0.6のときのインパルス応答の図が載っていました。私は前回の櫛型フィルタのブロックをコピペして作ったので、M=10、g=0.8のときの「インパルス応答」計算してました。でもね、三上先生の教科書でも図15は『「櫛型フィルタ」の「インパルス応答」』というタイトルです。タイトルコピペかも?ここは「全域通過フィルタ」の「インパルス応答」というタイトルとすべきかと。細かい話で恐れいります。

さてXCOSが描いたグラフが以下です(g=0.8です。)例によって連続時間向けのグラフ描画なので折れ線でグラフが描かれています。チト離散な感じがしなくてすみません。

AllPassImpluseRespose

どうも連続時間のケース向けに部品や関数が用意されていて、離散時間は若干オマケ的な扱いに思わなくもないです(個人の感想です。)自前で離散時間向けにいろいろ関数やブロックなどを用意したら良いのだろうけれども、とても元気がありません。

もともと前回の櫛型フィルタに限りなく近いブロックダイアグラムなので、「出だし」の負の一発目を除けば似てますな。

伝達関数からボーデ線図を描く

三上先生の教科書では、『「振幅特性」は周波数によらず一定になるので」とのことで、省略されています。しかし、なんで全域通過フィルタなんどというものを挿入するのかと言えば、振幅ではなく位相の方を調整したいんじゃないのか、と想像いたします。なんで All pass filter を挿入するのよ、という肝心なところに触れてない気がします。気のせい?

しかし、上記教科書では「首尾一貫して位相には触らないようにしている」ようにも思えます(個人の感想です。)もしかすると学力の伴わない私のようなものが惑わないようにするための自主規制なのかもしれませぬ。

Scilabで(離散的な)全域通過フィルタの伝達関数からボーデ線図を描くプログラム例が以下に。

// All Pass Filter
clc;
clear();
clf();

g=0.8
M=10
Hz = syslin('d', (%z^(-M)-g)/(1-g*%z^(-M)))

bode(Hz, 0.01, 1.0)
xtitle("All Pass Filter 正規化周波数 Bode Plot(g=0.8, M=10)")

M=10, g=0.8のときのボーデ線図が以下に。確かに振幅特性つまりません。

AllPassBodePlot

折角なので、実際に使用するM=59、g=0.6 のときのボーデ線図が以下に。

AllPassBodePlot59

M=10でもM=59でも振幅特性は一定ですが、位相の方は周波数が上がるにつれて遅れていくことが分かります。M=10のときは、階段状の「なんだかなー」な波形ですが、M=59となると「いい感じ」な特性になってきている気がします(勝手な気分です。)

次回こそ実機で、残響の生成され具合を「見て」「聞いて」みたいと思います。

手習ひデジタル信号処理(21) 残響生成器その1、櫛型フィルタ、Scilabで見る へ戻る

手習ひデジタル信号処理(23) 番外編、アナログ・マイクロフォン追加 へ進む