【解決方法】正弦波を三角波に変換する


何らかの理由により、必要な周波数の三角波を単純に生成することはできませんが、その周波数の正弦波と方形波は得られます。

追加の状態を保持できません。

正弦波または方形波から三角波を計算するアルゴリズムが必要です

三角波 – HandWiki[^]

これにはそれに対する数学的形式主義が含まれていますが、私は数学的形式主義を理解していません。

私は、誰かがそこに含まれる関連する概念をコードに適用できることを期待していました。 他のものに移植できる限り、言語は気にしません。

私が試したこと:

三角波を単独で生成しようとしましたが、クリックを発生させないように、一度に複数のチャンクで生成し、チャンク間の位相を連続的に保つ必要があります。 周波数に基づいて増加し続ける整数とデルタ値を掛け合わせて追跡する正弦波がありますが、これは上下の動きではなく、モジュロを適用すると鋸歯状になりますが、繰り返しになりますが、三角形が必要です。

解決策 2

振幅と周期がわかっている方形波がある場合、単純な幾何学を使用してそこから三角波を作成することはできないでしょうか?
三角波 – HandWiki[^]

TW の立ち上がり開始点が SW の立ち上がりと同期している場合、やっているのは BL から TR へ、次に TL から BR へ対角線を描くだけです。これは簡単であり、高速でスペース効率が良いはずです。

リンク内の図に従って同期が「段階的に」行われる場合、それは、対応する必要があるオフセットの開始点にすぎません。これも単純なジオメトリです。

解決策 1

ウィキペディアより:

加算合成を使用して三角波を近似するには、基本波の奇数高調波を合計し、1 つおきの奇数高調波に -1 を乗算し (または、同等にその位相を π 変更し)、高調波の振幅を 2 ​​乗で 1 倍します。モード番号の、 n (これは、基本周波数に対する相対周波数の 2 乗に相当します)。

これは単純なアルゴリズムであり、記事によると、かなり早く三角波に収束します。 (編集:基本は正弦波ですが、ご存知かと思います。)

解決策 4

おそらくテーブルベースのアプローチを採用するでしょう。
対象のドメイン上で必要な関数の値を保存するだけです。
これにより、通常、ストレージ容量が多少消費されますが、タイミングの問題が発生せずに最速の実行が得られます。

コメント

タイトルとURLをコピーしました