2014年9月25日木曜日

まだしつこくSinテーブルやってたり。

なかなかに家で作業できないのでSinテーブルの追及をまだやってたりします。
より小さく、高精度に…的な。ほんとキリがなくて
理想のSinテーブルを求めた挙句、煮詰まって変なアプリ作りました。

http://www.geocities.jp/denzeeen/denzi/sinsvg.zip

元はmac上でビルドしていますがgccをWinGWでビルドしたexeです。

★使い方はちと説明に困るとこもあるんですがたとえば

1,円周を1024に分割したSinテーブルを作りたい。
2,粗引きテーブルは16おきに
3,テーブルの精度は8bitで

としたい場合

>sinsvg 1024 16 8

とします。

※現在のところ第3パラメータは8か16のみの指定です。

そーするとこいつはprintfでこんなソースコード(1024_16_8.c)を吐きます。

http://www.geocities.jp/denzeeen/denzi/1024_16_8.txt

これは8bit長の円周1024分割Sinルーチンを含んだソースです。Deg90度で256、180度で512、360度で1024です。
ルーチンはいろんなとこにコピペして使えます。

テーブルは下記の49バイトとなりました。
なんだ最後のcosPitchは、先頭と末尾以外255って(笑)

unsigned char sinTable2pai[17] = {0,12,24,37,48,60,71,81,90,98,106,112,118,122,125,127,127};
unsigned char sinPitchTable[16] = {0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23};
unsigned char cosPitchTable[16] = {0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254};

 
更にこの1024_16_8.cをgccなりVisualStudioなりでビルドして実行すると
メインルーチンがこのテーブルから出すSin値を使って、こんな↓図を出すhtmlを吐きます
svgって楽ね。html5の恩恵を初めて受けた気がする。

http://www.geocities.jp/denzeeen/denzi/1024_16_8.html



この図が上記49バイトで求められるSinテーブルの全体像となります。

でも…いろいろな条件で比較してようやく納得した。
確かに精度上げればジャギが消えて本当波が綺麗になめらかーになるけど↓
http://www.geocities.jp/denzeeen/denzi/1024_32_16.html





「だいたいでいいがね、どーせPWM8bitだし、ノイズ載るし。」(名古屋弁)
http://www.geocities.jp/denzeeen/denzi/256_8_8.txt




http://www.geocities.jp/denzeeen/denzi/256_8_8.html

思い切り最小構成にて、このSinカーブを出すための「2π=256」のテーブルは
以下の25バイトです。tiny13でも余裕。
(ルーチン修正すると先頭の0棄てていけるから22バイト)

unsigned char sinTable2pai[9] = {0,24,48,71,90,106,118,125,127};
unsigned char sinPitchTable[8] = {0,6,12,18,25,31,37,43};
unsigned char cosPitchTable[8] = {0,255,255,255,254,254,253,252};

3 件のコメント:

  1. ZIPファイルをChromeでダウンロードしようとしたら
    「このファイルは一般的にはダウンロードうんちゃらかんちゃら」
    という警告が出ました

    どんだけGoogle帝国に監視されてるんだろう(^q^;

    きれいな波形は(もはや今の時代は)だれでも作れるけど
    クソ波形はそんじょそこらじゃ作れないので
    この波形も聞いてみたいです

    返信削除
  2. 実は最初GoogleDisk使ったら、アクセス数が云々ごにょごにょ云われたので、ジオシティーズにしました。ググル同士使ってもなんか不具合がおこるようです。
    多分Chromeさんは、昆虫にビビるオナゴの如く、単純にexeというファイル名に警戒しているのかも。
    http://www.geocities.jp/denzeeen/denzi/sinsvg_noexe.zip
    よろしければこちらの中の_exeをリネームしてください。

    返信削除
  3. ニーズがあるならSinテーブルを元にクソ波系を出すテーブルとルーチンを作ってみようかな(笑

    返信削除