前回はサンプリング周波数をむやみに高くすると、今度は低い周波数に対する信号処理の演算精度が落ちる、ということを書きました。
それへ係数が小さくなるので、ビット数が足りないと設定しきれない、ということでしたが、実際にフィルタを組んでみてどんな感じになるのか確認してみます。
いきなりですが、
これは一次の IIR フィルタです。フィードバック系を一段含んでいます。
先にサンプリング周波数と信号処理周波数の関係を考えておきます。サンプリング周波数が決まると、信号処理周波数はサンプル周波数に対する比率で考えることになります。
たとえば上述のフィルタでサンプリング周波数 fs を 100KHz としておき、適当なパラメータを入れて 1KHz がカットオフ周波数 fc になる LPF を組んだとします。そうするとそのパラメータは 1KHz という絶対値に影響を受けて設定されたのではなくて、fc / fs に影響されて設定されたことになります。言い換えると、そのパラメータをそのままにして fs を 10KHz にすると、fc は 100Hz、1MHz にすると 10KHz となる要領です。こういった表現をする時は「サンプリング周波数」=「正規化周波数」と呼ぶようです。上述の例では fc は 0.01 ということになります。
そういうことを頭において、上述のブロック図のパラメータの計算式を示します。ここでは詳しい式の導入は書きませんが、いわゆる双一次変換を使っています。

こうしておいて、fc / fs 変化させて見たのが次の表とグラフです。


b はともかく a は周波数比が大きくなるとかなり小さい値になります。b も有効桁数を考えるとかなり怪しいでしょう。
a についてこれを制限されたビット数で表すと次のようになります。

パラメータ設定レジスタが 8bit しかないと 1 / 1000 の値を設定しようとしても出来ません。 1/ 333 でやっと 1。ただしこれは 1/ 128 という意味ですから、実際は 0.0078 であって所望の 0.00933 ではありません。
表から比率が 1 / 1000 で±10% ぐらいの精度でパラメータを設定しようとすると、13bit 以上は必要ということになります。さらに付け加えると今回は一次 LPF ですが、次数が高くなったり遮断特性を考慮すると各項のパラメータもデリケートになります。従ってサンプリング周波数を上げたいのならば演算ビット数もそれ相応に確保しておかないと思った性能が出ないことがあります。
前回の例で云うと光ディスクドライブのサーボ設計上、低域としては 20Hz ~ 500Hz ぐらいの領域をメカ(レンズアクチュエータ)の特性に合わせて細かく調整する必要があります。仮にサンプリング周波数を 100KHz とすると、20Hz では 1 / 5000 になりますから 16bit ぐらいのビット数がないとラフな設定しかできないことになります。( a は 14h になります)
M くん:「やっぱり連続的に信号を扱うことのできるアナログ信号処理の方が精度が優れているのですね」
W 助手:「やめい!」
次回はサーボ設計に限るかも知れませんが、解決策を考えてみようと思います。
それへ係数が小さくなるので、ビット数が足りないと設定しきれない、ということでしたが、実際にフィルタを組んでみてどんな感じになるのか確認してみます。
いきなりですが、

これは一次の IIR フィルタです。フィードバック系を一段含んでいます。
先にサンプリング周波数と信号処理周波数の関係を考えておきます。サンプリング周波数が決まると、信号処理周波数はサンプル周波数に対する比率で考えることになります。
たとえば上述のフィルタでサンプリング周波数 fs を 100KHz としておき、適当なパラメータを入れて 1KHz がカットオフ周波数 fc になる LPF を組んだとします。そうするとそのパラメータは 1KHz という絶対値に影響を受けて設定されたのではなくて、fc / fs に影響されて設定されたことになります。言い換えると、そのパラメータをそのままにして fs を 10KHz にすると、fc は 100Hz、1MHz にすると 10KHz となる要領です。こういった表現をする時は「サンプリング周波数」=「正規化周波数」と呼ぶようです。上述の例では fc は 0.01 ということになります。
そういうことを頭において、上述のブロック図のパラメータの計算式を示します。ここでは詳しい式の導入は書きませんが、いわゆる双一次変換を使っています。

こうしておいて、fc / fs 変化させて見たのが次の表とグラフです。


b はともかく a は周波数比が大きくなるとかなり小さい値になります。b も有効桁数を考えるとかなり怪しいでしょう。
a についてこれを制限されたビット数で表すと次のようになります。

パラメータ設定レジスタが 8bit しかないと 1 / 1000 の値を設定しようとしても出来ません。 1/ 333 でやっと 1。ただしこれは 1/ 128 という意味ですから、実際は 0.0078 であって所望の 0.00933 ではありません。
表から比率が 1 / 1000 で±10% ぐらいの精度でパラメータを設定しようとすると、13bit 以上は必要ということになります。さらに付け加えると今回は一次 LPF ですが、次数が高くなったり遮断特性を考慮すると各項のパラメータもデリケートになります。従ってサンプリング周波数を上げたいのならば演算ビット数もそれ相応に確保しておかないと思った性能が出ないことがあります。
前回の例で云うと光ディスクドライブのサーボ設計上、低域としては 20Hz ~ 500Hz ぐらいの領域をメカ(レンズアクチュエータ)の特性に合わせて細かく調整する必要があります。仮にサンプリング周波数を 100KHz とすると、20Hz では 1 / 5000 になりますから 16bit ぐらいのビット数がないとラフな設定しかできないことになります。( a は 14h になります)
M くん:「やっぱり連続的に信号を扱うことのできるアナログ信号処理の方が精度が優れているのですね」
W 助手:「やめい!」
次回はサーボ設計に限るかも知れませんが、解決策を考えてみようと思います。