FFTが実数ではなく複素数を生成するのはなぜですか?


83

私たちが遭遇したすべてのFFT実装は、アルゴリズムへの入力が実数(整数)の離散セットであったとしても、(実数部と虚数部を含む)複素数になります。

周波数領域を実数だけで表すことはできませんか?

回答:


88

FFTは基本的に基底変換です。FFTが元の信号を変更する基準は、代わりに正弦波のセットです。その基礎がすべての可能な入力を記述するためには、振幅だけでなく位相も表すことができる必要があります。位相は複素数を使用して表されます。

たとえば、単一の正弦波のみを含む信号をFFTするとします。フェーズによっては、完全に実際のFFT結果が得られる場合があります。しかし、入力の位相を数度シフトした場合、FFT出力は他にどのようにその入力を表すことができますか?

編集:これはやや緩い説明ですが、私は直感を動機付けようとしているだけです。


3
それは多くの答えに役立ちます。FFT結果に周波数と位相のみが含まれている場合、時間領域サンプルの振幅情報をどのようにキャプチャしますか?つまり、iFFTで正しい振幅をどのように再作成しますか?
スティーブランディス2012

7
FFTの各値は、異なる周波数成分に対応しています。その値の大きさはコンポーネントの振幅であり、複素角はそのコンポーネントの位相です。
zmccord 2012

54

FFTは、振幅位相を提供します。振幅は複素数の大きさ(sqrt(x ^ 2 + y ^ 2))としてエンコードされ、位相は角度(atan2(y、x))としてエンコードされます。FFTから厳密に実際の結果を得るには、入力信号が均一な対称性を持っている必要があります(つまり、x [n] = conj(x [Nn]))。

気になるのが強度だけの場合、複素数の大きさは分析に十分です。


41

はい、実数のみを使用して厳密に実数の入力のFFT周波数領域の結果を表すことができます。

FFT結果のこれらの複素数は、単純に2つの実数であり、長さと方向角(または大きさと位相)の両方を持つ結果ベクトルの2D座標を提供するために必要です。また、FFT結果のすべての周波数成分は、固有の振幅と固有の位相を持つことができます(FFTアパーチャのあるポイントに対して)。

1つの実数だけでは、大きさと位相の両方を表すことはできません。位相情報を破棄すると、iFFTを使用して信号を再作成しようとすると、信号が簡単に大きく歪む可能性があります(信号は対称ではありません)。したがって、完全なFFT結果には、FFTビンごとに2つの実数が必要です。これらの2つの実数は、一般的な規則により、複雑なデータタイプの一部のFFTにバンドルされていますが、FFTの結果は、2つの実数ベクトル(1つはコサイン座標用、もう1つはサイン座標用)を簡単に生成できます(一部のFFTはそうします)。

振幅と位相を直接生成するFFTルーチンもありますが、複雑な(または2つの実数の)ベクトル結果を生成するFFTよりも実行速度が遅くなります。振幅のみを計算し、位相情報を破棄するFFTルーチンもありますが、通常は、より一般的なFFTの後で自分で実行できるようにするよりも速く実行されません。おそらく、可逆ではないという犠牲を払って、コーダーに数行のコードを節約します。しかし、多くのライブラリは、これらの低速で一般的ではない形式のFFTをわざわざ含めず、コーダーに必要なものまたは不要なものを変換または無視させます。

さらに、多くの人は、複雑な算術を使用すると、関連する数学はるかに洗練されていると考えています(厳密に実数の入力の場合、FFT結果の余弦相関または偶数成分が実数成分に入れられ、正弦相関または奇数成分がFFTの結果は、複素数の虚数成分に入れられます。)

(追加:)さらに別のオプションとして、実数と虚数のコンポーネントではなく、各FFT結果ビンの2つのコンポーネントを、両方とも実数の偶数と奇数のコンポーネントと見なすことができます。


19

与えられた周波数のためのあなたのFFT係数がいる場合fx + i y、あなたが見ることができるx一方で、その周波数で余弦係数としてy正弦の係数です。特定の周波数に対してこれらの2つの波を追加すると、その周波数で位相シフトされた波が得られます。この波sqrt(x*x + y*y)の大きさは、複素係数の大きさに等しくなります。

離散コサイン変換(DCT)を全ての実係数を得たフーリエ変換の相対的です。2次元DCTは、多くの画像/ビデオ圧縮アルゴリズムで使用されます。


9
  1. 離散フーリエ変換は、基本的に「時間領域」の複素数のベクトルから「周波数領域」の複素数のベクトルへの変換です(適切なスケーリング係数を適用すると、DFTは独自のものになるため、引用符を使用します逆)。入力が実数の場合、一度に2つのDFTを実行できます。入力ベクトルxyを取得し、F(x  +  i  y)を計算します。後でDFTをどのように分離するかを忘れていますが、それは対称性と複素共役に関するものだと思います。

  2. 離散コサイン変換ソートのあなたは実数と「周波数ドメイン」を表すことができ、かつ非可逆圧縮アルゴリズム(JPEG、MP3)において一般的です。(私にとって)驚くべきことは、位相情報を破棄しているように見えても機能することですが、これはほとんどの信号処理の目的にはあまり役に立たないようです(畳み込み/相関を行う簡単な方法を私は知りませんDCT)。

私はおそらくいくつかの詳細を間違えました;)


1
変換F(x + iy)の場合について、詳細を知りたいと思います。後でDFTを分離します。
CatsLoveJazz 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.