2

キャプチャしたデータに対して FFT を実行しようとしています。私は 10MHz から 100MHz の範囲で作業しているので、8192 のサンプル キャプチャは、FFT を実行するときに意味のあるものを伝えるのに十分な大きさではありません。そのため、正弦波の重複しないキャプチャを多数取得しており、それらを平均化したいと考えています。

私が現在(Scilabで)すべてのファイルのforループで行っていることは次のとおりです。

temp1 = read_csv(filename,"\t");
temp1_fft = fft(temp1);
temp1_fft = temp1_fft .* conj(temp1_fft);
temp1_fft = log10(temp1_fft);
fft_code = fft_code + temp1_fft;

そして、すべてのファイルを使い終わったら、次のようにします。 fft_code = fft_code./numFiles;

しかし、これを正しく扱っているかどうかはわかりません。重複しないサンプルのためのより良い方法はありますか?

4

1 に答える 1

0

近いと思いますが、temp1_fftを取得する前に、スペクトル ( )の大きさを平均化する必要がありますlog10。そうしないと、平均化する代わりにそれらを乗算することになります。代わりに、次のようにlog10to を for ループの外側に移動します (scilab の構文はわかりません)。

for filename in files:
    temp1 = read_csv(filename,"\t");
    temp1_fft = fft(temp1);
    temp1_fft = temp1_fft .* conj(temp1_fft);
    fft_code = fft_code + temp1_fft;

fft_code = fft_code./numFiles;
fft_code = log10(fft_code);

conj位相情報は、信号に対してサンプリングが開始された時期に依存するため、絶対に振幅を使用する必要があります ( を乗算するときに既にこれを行っています)。位相情報が必要な場合は、捕捉が何らかの方法で信号と同期していることを確認する必要があります。

これが行うことは、「パワー スペクトル平均化」と呼ばれます。

パワー スペクトル平均化は、RMS 平均化とも呼ばれます。RMS 平均化では、振幅の 2 乗の合計の加重平均 (FFT に複素共役を掛けたもの) が計算されます。重み付けは、線形または指数関数的です。RMS 平均化はデータの変動を減らしますが、実際のノイズ フロアは減らしません。十分な数の平均を使用すると、実際のランダム ノイズ フロアの非常に適切な近似値を表示できます。RMS 平均化には振幅のみが含まれるため、RMS 平均の実部または虚部、または位相を表示しても意味がなく、パワー スペクトル平均には位相情報が含まれません。

于 2012-10-01T14:34:40.703 に答える