プロが教えるわが家の防犯対策術!

任意の周波数の正弦波をソフトウエアだけで生成する方法をどなたかご教授ください。
組み込み機器に実装します。sin(), cos()を使っての演算は負荷がかかりすぎるため使えません。
(サンプルレート16kHzで音声として出力しようとしています)
1Hz~10000Hzくらいの範囲で出力できれば十分です。

コードではなくアルゴリズムだけで結構です。
お知恵をお貸しください。

A 回答 (3件)

>sin(), cos()を使っての演算は負荷がかかりすぎる


そういうことなら、テーブルを使えばどうでしょう。
http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/misc …
http://www.yamagami-planning.com/soft/optimize/o …
http://www.biwako.ne.jp/~beaver/msx/msxtecho/tab …
    • good
    • 0
この回答へのお礼

ありがとうございました。
リンク先を理解するのに苦労しました。

お礼日時:2008/01/09 01:42

組み込みでは、三角関数はテーブル検索+CORDICアルゴリズムで計算するのが定石です。



正弦波を作るだけなら、精度がそれほどなくてもよければ、位相が90度ずれている三角波どうしを乗算しても、けっこうそれっぽい波形ができます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
色々試したのですが、生成したサイン波を更にμ-Lawで変換、出力する処理で負荷が大きすぎ実用とはなりませんでした。
解決手段も思いつかず、組み込みエンジニアとしてはまだまだ修行が足りないなと実感致しました。

お礼日時:2008/01/09 01:45

★単純にテーブルを作って計算。


・0°~360°の sin、con のテーブルを『double』型で持ち、これを元に計算させます。
・単純ですが一番高速ですよ。
・もちろん、0°~90°までの4分割してテーブルの占めるメモリ量を抑える方法も良いでしょう。
・組み込み系ならばね。

関連:
http://oshiete1.goo.ne.jp/qa2650009.html→『数値計算の高速化 (cos, sin, exp)』

最後に:
・短いですが『テーブル化』して計算してみてはどうかな。
・あと『インライン・アセンブラ』ってのは、どうかな。
・以上。おわり。

参考URL:http://oshiete1.goo.ne.jp/qa2650009.html
    • good
    • 0
この回答へのお礼

皆様の御知恵をせっかく拝借しましたが、結局最終的な問題解決とはなりませんでした。
これが文系上がりの組み込みエンジニアの限界です。この業界を続けていくのは正直厳しいと今回実感致しました。

皆様、本当にありがとうございました。

お礼日時:2008/01/09 01:49

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