掛け算だった…
割り算、割り算って固定観念があったせいか、
計算式を整理しなおすまで32ビット割り算が
必要なものとばかり思ってしまった。掛け算だった…
よく考えてみれば、角速度ωが大きくなれば周波数
も大きくなる(ω=2πf)なんだから、周波数が
大きくなれば角速度も比例するに決まってる…。
割り算は定数の範囲内だから電卓で充分なんだよな。
ちゃんと紙に書いて計算しとけば事前にわかったはず
なのに…。あと三本毛が生えてこないかな…
プログラム中では周波数に対して定数を掛け算すれば
sinテーブル参照のインデックス値が求まるってこと。
理論上はそれだけの話。
問題は計算精度。
折角だから計算精度は高い方がいいに決まってる…。
んだけど、電卓計算の結果をひとたび定数値にして
プログラム上に組み込んでしまえばその時点で
計算精度は確定してしまうから、念入りに机上計算
してみることに。
現状は、sinテーブルの要素数を4096点、計算過程は
32ビット精度(整数部16ビット、小数部16ビット)、
サンプリング周波数(割り込み周期)を80000Hzと
仮定してで計算すると誤差は132ppmほど。うーん、
イマイチ。
割り込み周期かテーブル要素数を変更することを考えると…
sinテーブルの要素数を8192点とすると17ppm。
一方4096点のままサンプリング周波数だけもうちょっと
上げて100000Hzとすると…やっぱり132ppm程度の模様。
さすがにセラロックやRC発振回路程度の精度では
お話にならないので、17ppm程度は確保したいところ。
8192点にするかな…。
|