0

実験から合成データを生成しようとしています。正の周波数領域で理論上の PSD を取得し、そこから時系列を計算しました。Cよりもデータを操作し、FFTを実行して周波数領域に適合させます。主な問題を説明するよりも、最初にいくつかのコードを示します。

理論上の PSD を評価するビンは、次の式で与えられるビンです。

bins = np.linspace(1,1e3,2**13)

それから、timeseries を次のように計算します。

for i in range(bins.shape[0]):
    signal += dataCOS[i] * np.cos(2*np.pi* t * bins[i] + random.uniform(0,2*np.pi))

ここdataCOSで、 は PSD と対応するビンの値であり、次のt式で与えられます。

t_full = np.linspace(0,1,2**13, endpoint = False)

私の問題は、不鮮明にならない時系列の FFT が必要なことです。わかりました、通常は不可能ですが、私が正しく、フレーム内で一致するように時間ビンごとに正確に 1 つの周波数ビンを追加すると(最高周波数と最低周波数はまだ表示されます)、動作するはずです。それで、私の質問は、どのようにビンを持ち、t_full形を整えるのですか??

ここに私の考えがあります: どちらも同じ量のポイントを持つ必要があり、最高周波数と最低周波数が時間領域から見える必要があります。しかし、よくわかりません。助けていただければ幸いです。

編集 ****************************************** 最初に、私の問題を説明するために添付の写真をもう少し見てください。ここに画像の説明を入力最初に、時間領域のポイントが多すぎるバックトランスフォーメーションの古典的な結果がありますが、すべてのビンが周期的です。ここに画像の説明を入力2 番目は同じですが、周期的ではなくなり、期待どおりのスミアが発生します。もちろん、フィルターを使用してここを改善することもできますが、最初の赤の関数に合わせたい場合は、大きな問題が発生します。最後の写真は私が望んでいた結果です。すべての関数は時間枠内で周期的であるため、にじみはありません。第 2 に、t_bin のすべてのペアは、前に追加した 1 つの周波数を正確に保持するため、計算限界の雲は消えます。ここに画像の説明を入力

それを得るために、必要なビンと t の間隔は次のとおりです。

bins = np.linspace(0,2**14,2**14, endpoint = False)
t_full = np.linspace(0,1,2*bins.shape[0], endpoint = False)
4

1 に答える 1

0

スペクトル漏れを防ぐために、FFT の前に適切なウィンドウ関数を適用するだけでよいでしょう。私は Python ユーザーではないので、コードを示すことはできませんが、式を適用するのは非常に簡単です。フォン ハンウィンドウまたはハミングウィンドウを試してください(これらは似ていますが、わずかに異なる形状のピークが得られます)。

于 2013-10-15T10:07:46.013 に答える