こちら

卒業論文 周波数サンプリングFIR フィルタの固定小数点DSP への実装に関する研究(謝辞削除版)

なぜ公開するのか

自分が突然死ぬと、自分しか持っていないデジタルデータにアクセスできない、ということに気がついた。というか、最近そういうことがあった。内容の良し悪し以前に、そもそも内容にアクセスできなくなるのは、なんか惜しいなと思った。これがすばらしいから読んでほしい、とか、そういうことではない。というか、色々間違ってそうな気もするから、一般的には参考にしてはいけない可能性すらある。

博士論文くらいまで行くと、国会図書館にあったりするっぽいが、卒論ってあんまりそうなってないよね。すくなくとも自分のは公開されていない。こういう所に適当に置いとけば、webarchiveとかに引っかかり、割と長いこと見れるかもしれない。

謝辞は個人情報っぽかったので削除しておいた。

雑な概要

ディジタル信号処理(DSP)は、入ってくる離散時間サンプル(サンプリング周波数で細切れになっている)を何かしらの形で表現して、それを足したり引いたり掛けたり、いろいろ計算することで、ローパスとかハイパスとかを作れる方法。サンプルが浮動小数点(doubleとか)で表わされるようなシステム(PCとかスマホだと普通。VSTとかAUとかは、あえてやらない限り基本そうなっている)は、割と高い精度で計算ができる。

いっぽう、浮動小数点ではない「固定小数点」でサンプルを表わすようなシステムでは、ビットが足りないとかで十分な精度が出ない場合がある。 そうすると、計算に誤差があるので、カットオフ周波数がズレたり、色々とイマイチなことが起きる。

このイマイチを解決する簡単な方法は、桁を増やすことで、それで良ければそうすればよい。ただ、桁を増やすと、計算の量が増えて間にあわなくなったり、メモリが足りなくなったりする。桁が増やせない場合はどうしよう?詰んだか??

ワンチャンある。なんでもかんでも解決できるわけではないので、ちょっと範囲を絞ろう。色んなフィルターをつくれる定番の「バイクアッドフィルター」というのがある。max/mspとかpure dataにある biquad~ がそれだと思えばいいと思う。これのことだけ考える。 biquad~ といっても、計算の順番や、途中の計算をどうやって取っとくかとかで、実装方法が色々ある。 ここの、https://en.wikipedia.org/wiki/Digital_biquad_filter direct form 1 とか 2 とか、そういうやつ。

そのうちの、 normal form というのを使うと、EQとか作る時にはいい感じになった。めでたしめでたし。