やっとこの話題にたどり着けました。
まずは思い出話から。
二十年以上昔ですが、光ディスクドライブのサーボ系をデジタル化しようと云うことで私の後輩の I 君がアメリカに渡ってとある LSI メーカに入って LSI 開発を行うことになりました。
当時はデータ収集用の市販の AD コンバータだって適当な価格範囲だったら 10bit、よくて 12bit、デジタル信号処理を行うプロセッサも高級なものなら 16bit ですが、ハードウェアで乗算器などを組むと 8bit × 8bit、10bit × 10bit ぐらい。計算結果は良くて 16bit ぐらいが回路規模、集積度から云うと経済性からも限界だったようです。
もちろん光ディスクドライブへの要求仕様=転送速度なども低かったので、多少は楽だったかも知れませんが、それでも今の水準から考えればお粗末なものです。
サーボ帯域は 3KHz ぐらいは必要でしたから、妥協に妥協を重ねてサンプリング周波数は 100KHz ぐらいは必要だったはずです。ただその時点ではサンプリング=遅れ要素という認識があまりなかったので、何とかなるだろうというノリで開発をはじめようとしました。
そんな背景の中でスタートしましたが、ある日アメリカにいる I 君から電話が掛かってきました。(私自身はその製品の担当ではなかったのですが)
I 君:「画蔵さん、デジタルサーボは無理ぽです」
画蔵:「どうしたの?」
I 君:「サンプリングによる遅れによりサーボ帯域での位相余裕が確保できません」
画蔵:「え、どういうこと?(小考)。なるほどそうかも知れない。じゃあサンプリング周波数を上げれば?AD コンバータの性能がないとか」
I 君:「それは大丈夫なのですが、信号処理の都合でむやみやたら上げられないのです。画蔵さん、分かりますか?」
画蔵:「・・・(小考)。もしかして演算精度の問題で低域のフィルタが組めなくなるとか?」
I 君:「その通りです。よく分かりましたね」
最後の部分ですが、別に理論的に知っていたというわけではなく、なんとなくサンプリング周波数が高くなる、処理したい低域との周波数比が大きくなる、演算精度がやばそう、というイメージはすぐに浮かびました。
いまだったら演算精度は bit 数を増やせばいいし、そんなに難しいことではないとは思いますが(無責任発言)当時としては上述のような都合上無理だったようです。
結局デジタルサーボの開発はその製品に関しては断念、アナログサーボで組むことになりました。
いかがでしょうか。時代を感じさせるエピソードと思っていただけると思います。
デジタルフィルタは後で出てきますが、この話のついでに簡単に触れておくと源信号と遅延素子の出力のそれぞれに係数を掛けて加算して得ます。複雑な特性が必要な場合は遅延素子や加算器の数は増えますし、係数も増えます。
この時低域=サンプリング周波数から遠い周波数では、この係数が小さなものが必要になります。
まず 8bit × 8bit で計算した場合、それぞれの入力値は -127/128 ~ 127/128 になります。この時係数が小さいと結果は 16bit 確保しないとすべて丸められてしまいます。
もう一つは係数自身が低域のフィルタの場合は小さいわけですが、たとえば 2 / 128 の辺りかなと思った場合、少し下だと 1 / 128、上だと 3 / 128 となり、±50% の偏差の中で選択しなくてはいけません。当然設定精度は出ません。これがサンプリング周波数に近いところだと、係数は大きめになりますので、64 / 128 付近ならば、63 / 128、65 / 128 と±2% 以下の精度で調整できます。
あまり詳しくは知りませんが、通信系だとサンプリング周波数はかなり高いといってもフィルタでいじる周波数も高く範囲も狭いと思うので、おそらく気にならないかも知れません。しかしサーボは DC からサーボ帯域+αまでを扱わなくてはいけないので量子化ビット数、演算ビット数、サンプリング周波数の間でバランスが取れていないと思ったような特性が得られないと思います。
オーディオなども超低域から少なくとも 20KHz ぐらいまでは扱う必要があり、しかも行う処理が多岐にわたっています。システム設計上かなり手強いのではないでしょうか。もっとも私が使っているオーディオ編集アプリは内部演算は 32bit ですが他のアプリもそうだと思うので、ほとんど心配ないかも知れません。
オーディオはともかく、デジタル制御を行うシステム設計をする場合は扱う周波数帯を頭に入れて、サンプリング周波数、量子化精度、演算精度に気を配っておく必要があります。
まずは思い出話から。
二十年以上昔ですが、光ディスクドライブのサーボ系をデジタル化しようと云うことで私の後輩の I 君がアメリカに渡ってとある LSI メーカに入って LSI 開発を行うことになりました。
当時はデータ収集用の市販の AD コンバータだって適当な価格範囲だったら 10bit、よくて 12bit、デジタル信号処理を行うプロセッサも高級なものなら 16bit ですが、ハードウェアで乗算器などを組むと 8bit × 8bit、10bit × 10bit ぐらい。計算結果は良くて 16bit ぐらいが回路規模、集積度から云うと経済性からも限界だったようです。
もちろん光ディスクドライブへの要求仕様=転送速度なども低かったので、多少は楽だったかも知れませんが、それでも今の水準から考えればお粗末なものです。
サーボ帯域は 3KHz ぐらいは必要でしたから、妥協に妥協を重ねてサンプリング周波数は 100KHz ぐらいは必要だったはずです。ただその時点ではサンプリング=遅れ要素という認識があまりなかったので、何とかなるだろうというノリで開発をはじめようとしました。
そんな背景の中でスタートしましたが、ある日アメリカにいる I 君から電話が掛かってきました。(私自身はその製品の担当ではなかったのですが)
I 君:「画蔵さん、デジタルサーボは無理ぽです」
画蔵:「どうしたの?」
I 君:「サンプリングによる遅れによりサーボ帯域での位相余裕が確保できません」
画蔵:「え、どういうこと?(小考)。なるほどそうかも知れない。じゃあサンプリング周波数を上げれば?AD コンバータの性能がないとか」
I 君:「それは大丈夫なのですが、信号処理の都合でむやみやたら上げられないのです。画蔵さん、分かりますか?」
画蔵:「・・・(小考)。もしかして演算精度の問題で低域のフィルタが組めなくなるとか?」
I 君:「その通りです。よく分かりましたね」
最後の部分ですが、別に理論的に知っていたというわけではなく、なんとなくサンプリング周波数が高くなる、処理したい低域との周波数比が大きくなる、演算精度がやばそう、というイメージはすぐに浮かびました。
いまだったら演算精度は bit 数を増やせばいいし、そんなに難しいことではないとは思いますが(無責任発言)当時としては上述のような都合上無理だったようです。
結局デジタルサーボの開発はその製品に関しては断念、アナログサーボで組むことになりました。
いかがでしょうか。時代を感じさせるエピソードと思っていただけると思います。
デジタルフィルタは後で出てきますが、この話のついでに簡単に触れておくと源信号と遅延素子の出力のそれぞれに係数を掛けて加算して得ます。複雑な特性が必要な場合は遅延素子や加算器の数は増えますし、係数も増えます。
この時低域=サンプリング周波数から遠い周波数では、この係数が小さなものが必要になります。
まず 8bit × 8bit で計算した場合、それぞれの入力値は -127/128 ~ 127/128 になります。この時係数が小さいと結果は 16bit 確保しないとすべて丸められてしまいます。
もう一つは係数自身が低域のフィルタの場合は小さいわけですが、たとえば 2 / 128 の辺りかなと思った場合、少し下だと 1 / 128、上だと 3 / 128 となり、±50% の偏差の中で選択しなくてはいけません。当然設定精度は出ません。これがサンプリング周波数に近いところだと、係数は大きめになりますので、64 / 128 付近ならば、63 / 128、65 / 128 と±2% 以下の精度で調整できます。
あまり詳しくは知りませんが、通信系だとサンプリング周波数はかなり高いといってもフィルタでいじる周波数も高く範囲も狭いと思うので、おそらく気にならないかも知れません。しかしサーボは DC からサーボ帯域+αまでを扱わなくてはいけないので量子化ビット数、演算ビット数、サンプリング周波数の間でバランスが取れていないと思ったような特性が得られないと思います。
オーディオなども超低域から少なくとも 20KHz ぐらいまでは扱う必要があり、しかも行う処理が多岐にわたっています。システム設計上かなり手強いのではないでしょうか。もっとも私が使っているオーディオ編集アプリは内部演算は 32bit ですが他のアプリもそうだと思うので、ほとんど心配ないかも知れません。
オーディオはともかく、デジタル制御を行うシステム設計をする場合は扱う周波数帯を頭に入れて、サンプリング周波数、量子化精度、演算精度に気を配っておく必要があります。