アナログシンセ掲示板ログ閲覧所
Library of BBS for DIYers of Analog Synth

[ トップページへ / 一覧表示 / 最新記事 / 管理用 ]
[ to Top Page / Title List ]


設計と製作 指数変換実装編part1
#8814
この記事の投稿者にメールを送信 takeda (2008年01月07日19時41分)
指数変換実装編part1

ブレゼンハムのアルゴリズムで計算するLFOの場合(0.3Hzから16Hz):

指数変換の出力として要求される数字は、直線のかたむきの数字の分母。53.3/53.3から、1/53.3。コレを、255/255から5/255と変形させて、255から5までの間で指数で変化する値が取れればよさげ。
2を底とする5の対数はエクセルなら "=LOG(5)/LOG(2)"で計算できて2.3219。255は、8ぐらい。対数変換の入力として、2.32から8までリニアに変化が必要。
さて、入力は、AD変換で得る0から255までのリニアな変化。これを、2.32から8までの範囲で変化する値に変換してさらに、このリニアな変化を指数変換に突っ込めば5から255までの指数変化する数列が得られると。
入力の範囲が0から255と決まっていて、変換が2回重なるのなら、あらかじめ変換した値を256個、もっときゃ良いじゃん、が、テーブルメソッド。

で、perlで書いたテーブル生成スクリプトがこちら。
http://www.aleph.co.jp/~takeda/radio/parm/software/GetExpTable4LFO.pl
前半が、エクセルに突っ込んでカーブをグラフで見るためのデータ、後半は、プログラムに突っ込むように整数化(って、四捨五入だけど)したもの。
作ったエクセルデータがこちら。最近、やっとopenofficeを使い始めて、エクセル、怖くなくなったー。
http://www.aleph.co.jp/~takeda/radio/parm/software/exp-table4LFO.xls
このデータをもとに、テーブルメソッドで指数変換を実装した(ちょっとマトモに動きそうな)ベルゼンハム式LFOのアルゴリズム。
http://www.aleph.co.jp/~takeda/radio/parm/software/lfo2.c
実際にpicや、atmelに載せるにはそっちの初期化が必要。124usごとに呼び出す。

テーブルメソッドの良い点は計算コストが殆ど無し。欠点は、メモリーを湯水のように使っちゃう点。チビCPUには、きつい。


[この記事の元になった記事]

指数変換 : takeda (2008年01月07日19時37分)

[この記事に対する返事]

返事はありません。