8

数学の授業でフーリエ変換について学び、理解したと思っていました。今、私は R (統計言語) をいじって、実際に離散 FFT の結果を解釈しようとしています。これは私がやったことです:

x = seq(0,1,by=0.1)
y = sin(2*pi*(x))

calcenergy <- function(x) Im(x) * Im(x) + Re(x) * Re(x)

fy <- fft(y)
plot(x, calcenergy(fy))

そして、このプロットを取得します:

sin(2*pi*(x)) の 0 から 1 までの 0.1 ステップのエネルギー密度スペクトル

私がこれを正しく理解していれば、これはエネルギー密度スペクトルの「半分」を表しています。変換は対称であるため、すべての値を x の負の値にミラーリングして、完全なスペクトルを得ることができます。

しかし、私が理解していないのは、なぜ 2 つのスパイクが発生しているのかということです。ここには単一の正弦波周波数しかありません。これはエイリアシング効果ですか?

また、このプロットから周波数を取得する方法もわかりません。正弦関数の単位が秒であると仮定しましょう。密度スペクトルの 1.0 のピークは 1Hz でしょうか?

繰り返しますが、FFT の背後にある理論は理解しています。実際のアプリケーションが問題です:)。

助けてくれてありがとう!

4

2 に答える 2

12

N ポイントの純粋な実数入力信号の場合、約 N/2 の複素共役対称性を持つ N ポイントの複素出力が得られます。N/2 を超える出力ポイントは、実際の入力信号について有用な追加情報を提供しないため、無視できますが、それらをプロットすると、前述の対称性が見られ、単一の正弦波の場合、ビンnとビンにピークが見られます。 N - n. (注: 上位の N/2 ビンは、負の周波数を表すものと考えることができます。) 要約すると、N ポイントの実数入力信号の場合、FFT から N/2 の有用な複素出力ビンが得られます。これは、DC からの周波数を表します ( 0 Hz) からナイキスト (Fs / 2) まで。

于 2012-05-11T10:04:18.607 に答える
3

FFT の結果から周波数を取得するには、FFT に入力されたデータのサンプル レートと FFT の長さを知る必要があります。各ビンの中心周波数は、ビン インデックスにサンプル レートを掛けて FFT の長さで割った値です。したがって、中間ビンで DC (0 Hz) から Fs/2 までの周波数が得られます。

FFT の結果の後半は、実際のデータ入力に対する前半の複素共役です。その理由は、複素共役の虚数部分が相殺されるためです。これは、厳密に実数など、虚数の内容がゼロの合計結果を表すために必要です。

于 2012-05-11T17:03:43.907 に答える