信号処理は難しい

DSPをいじっていて思うのは、信号処理は世間で思われているほど難しくないなと言うことです。もっとみんないじり倒せばいいのに、というのが正直な気持ちです。一方で、マイコンとは違う独特の何かがあるのも事実です。

数学基盤

マイコンと一番違うのは、必ず何らかの数学基盤が求められるということです。といっても抽象数学をいきなりやらされるわけではないのですが、最低でも飽和と丸めは常識的に知っておかなければなりませんし、固定小数点と整数についても知っておかなければなりません。

そのうえフィルタでも実装しようとすると、いきなりラプラス変換やz変換の話が出てくるあたりが、普通の人には耐えられないかもしれません。アマチュア無線でもやっていて最良のフィルタを追い求めている人には伝達関数なども愉快な手慰みかもしれませんが、仕事でちょっとフィルタを実装したい人にはきついだろうなぁと思うこともあります。

「なんでもいいから、ちゃっちゃっと終わらせられないのか」

と、言わんばかりの声を聞くこともあります。ちゃっちゃっと終わらせられるんですよ。フィルタ設計ツールがあれば。そして、信号処理の基本を知っていればね。もちろん、「ちゃっちゃっ」というのは、そういうの無しでと言う声なんですが。

理論と実装のインターフェース

とある会合で、信号処理の達人のお話を聞いたことがあります。その方が実際に受け取った質問の話だったのですが、こういうことがあったそうです。

「IIRフィルタの設計ツールから出た出力を、実際のIIRフィルタの係数にセットしたが所望の特性が得られない」

で、原因はIIRフィルタのモジュールに与える係数の符号を間違えていたことにあったそうです。不注意とばかりに斬って捨てられていましたが、(こりゃぁ間違えたほうに同情するなぁ)と感じました。

ちょっと図1を見ていただきましょう。これは西村芳一著、「DSP処理のノウハウ」の図3-11から引用したものです(原文の添え字を一部だけ修正しています)。

図1. IIRフィルタのブロック図

次に図2を見てください。これは岩田利王著、「実践ディジタル・フィルタ設計入門」の図7-7から引用したものです。

図2. IIRフィルタのもうひとつのブロック図

この二つを見ると、次の2点に気づきます。

このように入門書の記述がばらばらの状態だと、その後に起きることは容易に想像が付きます。フィルタの設計ソフトを作成する人が想定するブロックと、そのユーザーが想定するブロックの間で、形式が同じであっても表記が異なってしまう事が多いことでしょう。これは要するに数学の記述の自由度の高さに問題があります。このような場合、理論側で記述形式が完全に固定されていないと、実装のインターフェースが定まりません。DSP分野に、がっちりとインターフェースを固定できる力を持った人がいないせいともいえるかもしれません。なんにせよ、教科書に書いてある理論と、与えられるライブラリや設計ソフトといった実装のインターフェースが不整合を起こしている場合が多いだろうということは予想が付きます。

フィルタ設計ソフトの想定するブロックと、フィルタソフト(プログラムでもHDLでも)の間に違いがあるとして、それを吸収するのはプログラマの責任です。IIRフィルタのように本来、さっと書いて終わりにしたい部分にこんな罠が仕掛けれているのですから、魔術的に難しいわけではないとはいえ、やはり信号処理は難しいと思われるのは否めないなと感じます。

Blackfin空挺団 | プログラム | EZ-KIT | コア&ペリフェラル | TOPPERS/JSP | こぼれ話 | DSP掲示板