00001 /** \file osctable.cpp 00002 * brief 三角関数用ルックアップ・テーブル 00003 * 00004 * 三角関数の合成に使うテーブルを作る。テーブルのデータは、サブディレクトリ 00005 * にあるテキスト・ファイルを読み込んで使う。 00006 * 記事本文の内容に合わせて、3種類のサブディレクトリを用意している。 00007 * 00008 * 1_int は、記事中で最初に使うテーブルである。このテーブルは、Scilab 00009 * スクリプトでデータを整数化する際にint()関数を使っている。 00010 * 00011 * 2_roundは、記事中で2番目に使うテーブルを収めたサブディレクトリである。 00012 * このディレクトリのデータは、Scilabスクリプトでデータを整数化する際に 00013 * round()関数を使っている。 00014 * 00015 * 3_smallは、記事中で3番目に使うテーブルを収めたサブディレクトリである。 00016 * このディレクトリのデータは、2_round同様、スクリプト内でround()関数に 00017 * より、整数化している。異なるのは整数化するときの係数で、上二つは 00018 * 32768倍しているが、このディレクトリのデータは32767倍している。その 00019 * 結果、真の正弦関数、余弦関数より小さくなるが、飽和による非対称な誤差 00020 * から逃げることができる。 00021 */ 00022 #include "osc.h" 00023 namespace osc{ 00024 /** ルックアップ・テーブルのサイズ 00025 * 00026 * sine/cosineの計算をするための基本ルックアップテーブルのサイズ。 00027 * 16bit位相を8bit/8bitに分割するので、ルックアップテーブルのサイズは 00028 * 256になる 00029 */ 00030 const int tableSize = 256; 00031 00032 /** cosの上位位相分 00033 * 00034 * 全周を256分割したコサイン・テーブル。 00035 */ 00036 shortfract co_h[tableSize]= { 00037 #include "3_small\\hco.txt" 00038 }; 00039 /** cosの下位位相分 00040 * 00041 * 全周の256分の1をさらに256分割したコサイン・テーブル。 00042 */ 00043 shortfract co_l[tableSize]= { 00044 #include "3_small\\lco.txt" 00045 }; 00046 /** sinの上位位相分 00047 * 00048 * 全周を256分割したサイン・テーブル。 00049 */ 00050 shortfract si_h[tableSize]= { 00051 #include "3_small\\hsi.txt" 00052 }; 00053 /** sinの下位位相分 00054 * 00055 * 全周の256分の1をさらに256分割したサイン・テーブル。 00056 */ 00057 shortfract si_l[tableSize]= { 00058 #include "3_small\\lsi.txt" 00059 }; 00060 }
1.5.2