周波数が連続的に減少する波が、その長さの半分を超えて周波数を増加し始めるのはなぜですか?


7

周波数が連続的に減少する波(正弦波または方形波)をプログラムで生成しようとしています。これを行うには、開始周波数を単純に掛けて、値が減少するようにします。これは、所定の時間スパンの中間ステップで、1から0に線形的に変化します。ちょうど半分の時間帯に、周波数が再び増加し始めたことを見て(聞いて)戸惑いました。頻度の値を確認しましたが、問題ありません。私は波の最初の「半分」しか使用できませんが、私が経験していることを理解することは素晴らしいことです。助けてくれてありがとう!ありがとう


スケールファクターが間違っているか、どこかにオフセットがあり、実際に周波数変調を1から-1に上げているように思えます。
hotpaw2

2
サイン波または方形波の作成方法を正確に教えてください。
ジム・クレイ

回答:


9

周波数が0未満またはサンプルレートの半分を超える値に達していないことを確認してください。

波形の生成方法に関する詳細情報/コードを投稿してください!おそらくあなたはそれを正しくやっていないのでしょう。

たとえば、時変周波数正弦波を生成する場合(たとえば、周波数変調を実装する場合)、次のようなものを生成します。f(t)

y(t)=sin(2πtf(t))

あなたの瞬間的な周波数が次の理由で間違っています:

fi(t)=12πdϕ(t)dt

そして:

12πd2πtf(t)dtf(t)

が定数である特定の場合を除いて。f(t)

したがって、時変周波数正弦波を生成する正しい方法は次のとおりです。f(t)

y(t)=sin(2π0tf(τ)dτ)

シンセサイザでは、を評価するために瞬時周波数を累積するレジスタ/変数を話し、量を位相アキュムレータと呼びます。0tf(τ)dτ

http://en.wikipedia.org/wiki/Frequency_modulation

http://en.wikipedia.org/wiki/Instantaneous_phase


あなたの答えに感謝します、それは私が間違っていたことを説明しました。フェーズアキュムレータベースの実装に切り替えると、問題が解決しました。
ローター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.