1.コンテキスト
GLSLを使用して、次のような特定の周波数での波形の振幅をプロットしています。
上記のような単純な波形を表示するのは簡単な作業です。正しい方程式を使用するだけです(GLSLの抜粋コードはこちらから入手できます)。私が今やろうとしているのは、2つの波形間の周波数変調の結果を表示することです。
2.調査
いくつかの調査の結果、これを達成するための2つの可能な方法を見つけました。
dspのようなアプローチを使用することは、私が知る限り、位相アキュムレータ(ここで最初の回答を参照)をルックアップテーブルと組み合わせて使用することは、信号処理を扱うときに推奨されるアプローチです。GLSLの初心者として、複数のGPUサイクルにわたって変数を格納およびインクリメントできないため、これはGLSLシェーダーでは不可能であることを理解しました。
純粋数学的なアプローチを使用すると、これにはChowningの単純なfm式のような方程式が含まれます。 FM式http://img577.imageshack.us/img577/4820/fmformula.png
この式は、状況によってはうまく機能します(コサイン波が別のコサインを変調するか、コサインが鋸歯を変調します)が、次のような一般的な式を見つけることができませんでした。すべての場合に機能します(鋸歯状波がコサインを変調する場合、搬送波周波数は鋸歯状振幅によって変調されると思いますが、得られるのは明らかに変調されていない搬送波だけです)。
3.質問
- この問題を解決するための最良のアプローチは何でしょうか?
- GLSLでdspのようなアプローチは可能ですか?
- そうでない場合、すべての作業を実行するのに十分な柔軟性のある一般的なFM方程式はありますか?
ここに含まれるすべての分野(オーディオdsp、コンピューターサイエンス、GPUプログラミング、数学)でのスキルの欠如を考えると、ここで本当に単純なものが欠けていても驚かないでしょう。しばらくお待ちください。