LTSPICEのFFTの最後にあるジャンクは何ですか?


8

FFTの高周波側にジャンクがあるのはなぜですか?LTSPICEでこの回路をシミュレートするとします。

概略図

この回路のシミュレーションCircuitLabを使用して作成された回路

LTSPICEの正弦およびシミュレーションパラメータは次のとおりです。

SINE(0 1 1K 0 0 0 1000)
.tran 1 startup

次に、LTSPICEにウィンドウなしで1,000,000ポイントのFFTを与えるように依頼します。 FFT

最後にすべてのジャンクは何ですか?1KHzでのスパイクは1つだけで、3KHzでのスパイクはそうではない、などと予想されます。これはすべてのFFTで発生しますか?ファンダメンタルズの後に発生するスパイクを制御するものは何ですか?


他の周波数を正確に特定できますか?それらはたまたますべて1 kHzの奇数倍数ですか?その場合、何かが「完全な」正弦を歪め、より「長方形」に見えるようになります。これは、ltspiceが内部で使用する数値の精度にすぎない可能性があります。
マーカス・ミュラー

1
私は-100dB以下を見ることはしませんが、3次高調波から始めて、ウィンドウがないことが問題のようです
Tony Stewart Sunnyskyguy EE75

1
波形圧縮と関係があるかもしれません。詳細およびそれが事実であるかどうかを確認する方法については、この他の質問を参照してください。electronics.stackexchange.com/questions/338292/...
mkeith

このデータを再現できません。私のバージョンのLTspiceでは、1e6以上のシミュレーションポイントが1e6ポイントのFFT、つまり1e-6の最大タイムステップを得ることを望んでいます。
ラウドノイズ

変調帯域幅のオーディオスペクトルに一致させるために準ピークが必要ですか?
Tony Stewart Sunnyskyguy EE75 2018年

回答:


4

@ D.Brownの答えはすでに非常に良いものなので、少しだけ追加します。LTspiceのアルゴリズムはカスタムであり、2の累乗でない数のポイントを受け入れます。これは、解像度が重要ではないという意味ではありません。それでも、1kHz over 1sは整数の周期数を意味するため、ノイズを低減するためのウィンドウ処理または二項平滑化(FFTウィンドウの設定)は必要ありません。ただし、@ mkeithが言及したものは何ですか。つまり、LTspiceはデフォルトで波形圧縮(ディスプレイあたり300ポイント、IIRC)を使用します。これは、他のポイントが削減され、波形の解像度が低下することを意味します。これに対する解決策は、よりタイトなタイムステップか.option plotwinsize=0、波形圧縮を排除する最後のタイムステップのいずれかです。このオプションを追加すると、次のようになりますが、タイムステップは課されません。

デフォルト

これはおそらくあなたが目にするものであり、多かれ少なかれ、そのためのオプションは何ですか?1秒の期間にわたって1 kHz波形をシミュレートしています。回路は、それがそれと呼ぶことができる場合、単純なソースと負荷であり、ソースは高調波のものであり、マトリックスソルバーの簡単なタスクであるため、LTspiceは、すべてのSPICEエンジンと同様に、微分が滑らかであると感じる場合、シミュレーションが遅くならないようにタイムステップを2倍にし、内部制限に達するまで2倍にし続けます。その結果、波形が粗くなり、plotwinsizeあまり改善できません。

解像度を向上させるために、もう1つの治療法である課されたタイムステップが必要です。これが1の結果ですμsタイムステップ:

10u

それは優れていますが、100万ポイントのFFTを実行しているため、おそらく100万ポイントが必要であるため、最大タイムステップを1に設定する必要があります。μs。さらに、このオプションnumdgtは7以上の値に設定されており、本書では倍精度を有効にしています。

ウルトラ

わずかにぐらついたノイズフロアはまだありますが、レベルは-250dB未満になりました。これは機械精度に近いものです。タイムステップを1/1048576(2 ^ -20)にしても結果は改善されません(自分で確認できます)。

結局、それはあなたがどれだけ多くのノイズフロアを受け入れる用意があるかによって決まります。@Tony Stewartのコメントは実用的な感性のもので、100〜120dB未満は1〜10未満を意味しますμVから1V、これはかなりの成果です。


この答えのために仕事を入れてくれてありがとう。余談ですが、LTspiceはWindowsと比較してmacOSでのパフォーマンスが大幅に異なることを強調しました。(これはWindowsバージョンであると想定しています)
loudnoises

@loudnoisesはい、それはワインの下ではありますが、重要ではありません。私はYahoo LTspiceグループのあちこちでいくつかの点を見てきましたが、私はMacユーザーではないので、私はそれらを主張しませんでした。それは設定の問題であり、異なるフードの下に隠されているかもしれませんが、実際には、私にはわかりません。
関係者

優秀な!さて、LTSPICEヘルプファイルを振り返ると、次のことに気づくはずです。データの場合、おそらく波形圧縮をオフにし、最大時間ステップを規定し、場合によっては数値精度のノイズフロアを低減するために倍精度波形ファイル形式を使用することもできます。 "
watkipet

@関係者:「ここに1µsタイムステップの結果があります」と言ったとき、「ここに10µsタイムステップの結果がある」という意味ですか?
watkipet

@loudnoisesネイティブのmacOSバージョンを使用しています。しかし、私は懸念のある市民と同じ結果を目にしています。
watkipet

15

この回答にはいくつかの部分があります。この答えは、FFTアルゴリズムの特性に基づいています。私は特定のLTSpice実装に精通していませんが、あなたが報告する動作はまさに私が期待するものです。

最も一般的なFFT実装は、2の累乗のデータポイントで動作します。したがって、ほとんどの実装では、1,000,000データポイントを1,048,576データポイントにパディングし、その上でFFTを実行します。この長さは正弦波の整数ではないことに注意してください。

データを異なる方法で分解する代替のフーリエ変換メソッドがあります。これらは通常、離散フーリエ変換(DFT)メソッドの名前で呼ばれ、実装が遅く、実装がかなり複雑です。私は実際のアプリケーションでそれらに遭遇したことはほとんどありません。FFTは、データポイントの数が整数の2の累乗(または、整数の4の累乗)である必要がある特定のDFT実装です。

したがって、LTSpiceはデータを1,048,576データポイントにパディングし、最後に追加された48,576データ値は定数を含むと想定しています。

これで問題を確認できます。1,048,576サンプルのバッファーには1,000サンプルの正弦波があり、それぞれ1,000サンプルに続いて48,576の定数値が続きます。これは、周波数1kHzの正弦波の合計では表すことができません。代わりに、FFT結果は、信号を再構築するために必要な追加の高周波値を示します。

これが問題であるかどうかを判断するには、1,024サンプルの周期の正弦波を含む1,048,576サンプルのバッファーを作成します。高周波は大きさが大幅に減少するはずです。

ここで、ウィンドウを適用した効果について:

FFTアルゴリズムはデータを概念的に「ラップ」するため、入力データの最後のポイントの後に入力データの最初のポイントが続きます。つまり、FFTは、データが無限であるかのように計算され、x [0]、x [1]、...、x [1048574]、x [1048575]、x [ 0]、x [1]、...

この折り返しにより、データバッファーの最後のポイントと最初のポイントの間にステップ遷移が生じる可能性があります。このステップ遷移は、高周波からの大きな(偽の)寄与を持つFFT結果を生成します。ウィンドウの目的は、この問題を排除することです。窓関数は両端でゼロになるため、この場合、w [0]とw [999999]は両方ともゼロになります。データがウィンドウで乗算されると、値は最初と最後でゼロになるため、ラップでのステップ遷移はありません。

適用するウィンドウ関数は、バッファーの周波数コンテンツを変更し、許容できるトレードオフを示す関数を選択します。ガウシアンは良い出発点です。データの周波数コンテンツを正確に制御できない実際のアプリケーションでは、ウィンドウ関数を適用して、データ長による暗黙のステップ遷移を排除する必要があります。

残りの問題:

FFTには、別の高周波スペクトルノイズの発生源となる可能性があります。効果はFFTの長さとともに増加し、場合によっては1,000,000データポイントで確認できます。

FFTアルゴリズムの内部ループは、複素平面内の円の周りの点を使用します:e ^(i * theta)、アルゴリズムは 'theta'を0から2 * piまで連続的に細かいステップで反復し、 FFT。つまり、1,048,576サンプルのFFTを計算する場合、外側のループの反復の1つで、内側のループはe ^(i * theta)を計算します。ここで、theta = 2 * pi * n / N、Nは1,048,576です。 、nを0から1,048,575まで繰り返します。これは、e ^(i * 2 * pi / N)を連続的に乗算する明らかな方法で行われます。

Nが大きくなると、e ^(i * 2 * pi / N)が1に非常に近くなり、N倍されます。倍精度浮動小数点を使用すると、エラーは小さくなりますが、注意深く見れば、ノイズフロアの結果がわかると思います。単精度浮動小数点では、1,000,000データポイントでFFT計算自体が大きなノイズフロアを生成します。

この問題を排除するe ^(i * theta)を計算する別の手法がありますが、実装はより複雑です。私はそのような実装を一度だけ作成する必要がありました。


DFTとFFTについて、LTSPICEの右クリックメニューでは「FFT​​」と呼ばれ、構成ダイアログでは「DFFT」と呼ばれます。さて、ヘルプファイルを読んでいるところ、LTSPICEが2のべき乗ではない数の点を受け入れることについて、関係者が言っていたことを確認しました。
watkipet

0

考えられる理由:-

シミュレーターで一時的な波を描くと、実際の計算の間を補間して、行われる困難な作業を最小限に抑え、画面にすばやく結果を表示できるようにします。

LTSpiceの最大タイムステップのデフォルト設定は100 usになる可能性があるため、これらのポイント間で結果が補間されます。つまり、結果は完全ではなく、FFTでの高調波として見られる歪みの原因となります。

最大タイムステップを現在のタイムステップよりもはるかに小さく設定して、何が起こるかを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.