これまでに遭遇したすべての FFT 実装は、アルゴリズムへの入力が実数 (整数) の離散セットであったとしても、(実数部と虚数部を含む) 複雑な値になります。
実数だけで周波数領域を表現することはできませんか?
これまでに遭遇したすべての FFT 実装は、アルゴリズムへの入力が実数 (整数) の離散セットであったとしても、(実数部と虚数部を含む) 複雑な値になります。
実数だけで周波数領域を表現することはできませんか?
FFTは基本的に基底変換です。FFTが元の信号を変更する基礎は、代わりに正弦波のセットです。その基礎がすべての可能な入力を記述するためには、振幅だけでなく位相も表すことができる必要があります。位相は複素数を使用して表されます。
たとえば、単一の正弦波のみを含む信号をFFTするとします。フェーズによっては、完全に実際のFFT結果が得られる場合があります。しかし、入力の位相を数度シフトした場合、FFT出力は他にどのようにその入力を表すことができますか?
編集:これはやや緩い説明ですが、私は直感を動機付けようとしているだけです。
FFTは、振幅と位相を提供します。振幅は複素数の大きさ(sqrt(x ^ 2 + y ^ 2))としてエンコードされ、位相は角度(atan2(y、x))としてエンコードされます。FFTから厳密に実際の結果を得るには、入力信号の対称性が均一である必要があります(つまり、x [n] = conj(x [Nn]))。
気になるのが強度だけの場合、分析には複素数の大きさで十分です。
はい、実数のみを使用して厳密に実数入力の FFT 周波数領域の結果を表すことは可能です。
FFT 結果のこれらの複素数は、単に 2 つの実数であり、長さと方向角 (または大きさと位相) の両方を持つ結果ベクトルの 2D 座標を得るために両方が必要です。また、FFT 結果のすべての周波数成分は、固有の振幅と固有の位相 (FFT アパーチャのあるポイントに対して) を持つことができます。
1 つの実数だけでは、大きさと位相の両方を表すことはできません。位相情報を破棄すると、iFFT を使用して信号を再作成しようとすると、信号が大幅に歪む可能性があります (信号は対称ではありません)。したがって、完全な FFT 結果には、FFT ビンごとに 2 つの実数が必要です。これらの 2 つの実数は、一般的な慣例により、一部の FFT では複雑なデータ型にまとめられますが、FFT の結果は簡単に (一部の FFT ではそうです) 2 つの実数ベクトル (1 つはコサイン座標用、もう 1 つはサイン座標用) を生成します。
振幅と位相を直接生成する FFT ルーチンもありますが、複雑な (または 2 つの実数) ベクトル結果を生成する FFT よりも実行速度が遅くなります。振幅のみを計算し、位相情報を破棄する FFT ルーチンも存在しますが、通常は、より一般的な FFT の後に自分で実行するよりも速く実行されません。おそらく、コーダーは元に戻せないという代償を払って数行のコードを節約できます。しかし、多くのライブラリは、これらの低速で一般的でない形式の FFT を含めることを気にせず、コーダーに必要なものまたは不要なものを変換または無視させます。
さらに、多くの人は、複雑な演算を使用することで、関係する数学がより洗練されていると考えています(ここで、厳密に実数の入力の場合、FFT 結果の余弦相関または偶数成分は実数成分に入れられ、正弦相関または奇数成分はFFT の結果は複素数の虚数部に入れられます。)
(追加:) さらに別のオプションとして、各 FFT 結果ビンの 2 つの成分を、実数成分と虚数成分の代わりに、偶数成分と奇数成分、どちらも実数と見なすことができます。
特定の周波数の FFT 係数が である場合、f
その周波数での余弦の係数と見なすx + i y
ことができますが、 は正弦の係数です。これらの 2 つの波を特定の周波数に追加すると、その周波数で位相がシフトした波が得られます。この波の大きさは、複素係数の大きさに等しいです。x
y
sqrt(x*x + y*y)
離散コサイン変換(DCT) は、すべての実数係数を生成するフーリエ変換に関連する変換です。2 次元 DCT は、多くの画像/ビデオ圧縮アルゴリズムで使用されます。
離散フーリエ変換は、基本的に、「時間領域」の複素数のベクトルから「周波数領域」の複素数のベクトルへの変換です (引用符を使用するのは、適切なスケーリング係数を適用すると、DFT が独自のものになるためです)。逆)。入力が実数の場合、一度に 2 つの DFT を実行できます。入力ベクトルxとyを取り、 F( x + i y ) を計算します。後で DFT をどのように分離したかは忘れましたが、対称性と複素共役に関するものだと思います。
離散コサイン変換を使用すると、「周波数ドメイン」を実数で表すことができ、非可逆圧縮アルゴリズム (JPEG、MP3) で一般的です。(私にとって)驚くべきことは、位相情報を破棄するように見えても機能することですが、これにより、ほとんどの信号処理目的での有用性が低下するようです(畳み込み/相関を行う簡単な方法を知りませんDCT)。
私はおそらくいくつかの詳細が間違っていると思います;)