電音の工場ブログ

当ブログは…

自作エフェクターシンセサイザ製作のネタや開発覚え書きなど、筆者の電音活動を記録しています。お探しの記事が見つからない方は、検索カテゴリ一覧をご利用ください。

スパマーが来訪すると、ときどきコメントをはてなユーザのみに絞ったり開放したりすることがあります。

2007-03-07

8pin AVR LFO 机上検討2

| 8pin AVR LFO 机上検討2 - 電音の工場ブログ を含むブックマーク はてなブックマーク - 8pin AVR LFO 机上検討2 - 電音の工場ブログ 8pin AVR LFO 机上検討2 - 電音の工場ブログ のブックマークコメント

8pin AVR LFO 机上検討1からの続き。

ところでADC値は10bit(1024レベル)で、これが i = 0, 1, ... , 15 (すなわち n = 1, 2, 4, ..., 32768)にリニアにマッピングされることが望ましい。ADC[9:0] を {ADC[9:6], ADC[5:0]} とビット分割し、上位4bit( ADC[9:0]÷64 の商 p)として i に対応する値を取り出し、同時に余り q = ADC[9:0]%64 を得る。商pで256ckの割り込みが何回になるかを決め、余りqは補正する役を担う。

補正は直線補間でも良いが、ここでは iをパラメータとする補間関数  g_i(q) を定義する。g_i(q)は、g_0(0)=0, g_0(64)=256, g_1(0)=0, g_1(64)=512 ...

といった境界条件を持つ。これより考えれば、iが1増えるとレンジが倍になるわけで、

g_1(q) = 2 g_0(p)g_{i}(q) = 2 g_{i-1}(q)

すなわち、

g_i(q) = 2^i g_0(q)

となる。g_0(q)を(テーブル等で)定義すれば、これに定数を掛けることで補間関数g_i(q)を算出することができるとわかる。

なお現実的に g_0(q)の取りうる値は0から255である。


iに対応するADC値まで書き入れると次表のようになる。

ADC i n f[Hz] 1/f[sec]
001244
6412122
1282461.0
1923830.5
89614163840.014967.1
96015327680.00745134

(8pin AVR LFO 机上検討3へ続く)