映画のエンドロール観る派?観ない派?

現在H8マイコンを用いて趣味で電子工作をしている者です。スピーカーを鳴らすために、H8マイコンのD/Aコンバータを用いて正弦波を発生させたいと考えております。私が持っている参考書では正弦波は以下のように発生させるものだと書いてあります。

unsigned char sindata[128] ={127,133,139,146,152,158,164,170,
176,181,187,192,198,203,208,212,
217,221,225,229,233,236,239,242,
244,247,249,250,252,253,253,254,
254,254,253,253,252,250,249,247,
244,242,239,236,233,229,225,221,
217,212,208,203,198,192,187,181,
176,170,164,158,152,146,139,133,
127,121,115,108,102,96,90,84,
78,73,67,62,56,51,46,42,
37,33,29,25,21,18,15,12,
10,7,5,4,2,1,1,0,
0,0,1,1,2,4,5,7,
10,12,15,18,21,25,29,33,
37,42,46,51,56,62,67,73,
78,84,90,96,102,108,115,121};

と定義して、(254が振幅の一番上、0が振幅の一番下、127がちょうど真ん中になります)このデータを割り込みを使って、自分の使いたい周波数の正弦波を出す、ということになっています。

ここでふと思ったのが、この正弦波は振幅5V(H8マイコンの動作電源が5V)しか出ないのではないんじゃないかと。振幅を変えるためにはどうしたらいいんでしょうか?上記の128個のデータを全て書き直すしかないのでしょうか?それとも×3/5とかにしてデータを小さくしたらいいんですか?でもそれだとデータが整数じゃなくなってしまいますよね?どうしたら振幅を変えられるのでしょうか?どなたかご教授願います。

A 回答 (1件)

>それとも×3/5とかにしてデータを小さくしたらいいんですか?


その通りですね。

>でもそれだとデータが整数じゃなくなってしまいますよね?
整数で演算すれば、答えも整数ですよ(少数は切り捨てられます)。その分もとの波形より歪が生まれますけどね。

ただ、sindata自体もすでに小数点以下は切り捨てられていますので誤差はすでに含まれていますから、誤差に誤差を積み重ねるので音はさらに悪くなります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!