VHDLで設計したSinCos CORDICの精度評価を開始しました。
実際には、精度評価をするのはVHDLによる設計ではなくC++によるモデルの方です。両者はビット単位で合致するようチェックをかけていますので、それを担保にC++でテストをします。C++の方が親しんでいる分、テストプログラムを書きやすいです。
で、昨日は初っぱなから躓きました。妙な誤差があります。0と±πではほとんど誤差がないのに、その間では盛り上がるように誤差が増えていきます。誤差の絶対値としては126dBくらいです。一見、十分低いようですが32bit精度でこれでは困ります。熟考後、当たりを付けたのがπ精度。テストプログラムではエイヤ!と3.141592を使っていたのですが、これが原因でした。精度を倍精度浮動小数点数に合わせると、平均で30dBくらい改善したようです。ちょっと盛りすぎか。
ピークにはまだ不満があるので、腰を据えて追いかけていきます。