解析中(DFT)ではなく、合成中(IDFT)に大きさが正規化されるのはなぜですか?


17

私が見たほとんどの例とFFTコードでは、順方向DFT操作の出力(周波数の大きさ)はNでスケーリングされます-つまり、各周波数ビンの大きさを与える代わりに、N倍の大きさを与えます。

運用上、これは単純に、各基底正弦と信号の内積をとることによってDFTが計算されるためです(つまり、非正規化相関)。しかし、それはなぜ出力を返す前に単にNで割らないという哲学的な質問には答えませんか?

代わりに、ほとんどのアルゴリズムは再合成時にNで除算します。

これは私には直観に反しているように思われ、(私が何かを見逃していない限り)DFTのすべての説明を非常に混乱させます。

私が思いつくすべてのシナリオで、実際の大きさ(大きさ* Nではなく)はDFT操作に必要な値であり、正規化された大きさはIDFT操作に入力する値です。

なぜDFTはDFT / Nとして定義されておらず、IDFTは正規化された大きさの正弦波の単純な合計として定義されていないのですか?


2
正直に言って、これはここで尋ねられた最もクールな質問の1つだと思います。
フォノン

回答:


9

DFTの出力を順方向または逆方向にスケーリングするかどうかは、慣例や数学的に便利なこととは関係ありません。DFTへの入力に関係するすべてがあります。順変換と逆変換の両方でスケーリングが必要または不要な例をいくつか示します。

順変換を1 / Nでスケーリングする必要があります。

まず、単純な正弦波を分析するには、数学的に言えば、変換の長さは無関係である必要があることを明確にする必要があります。N = 1024、Freq = 100で、信号が次のとおりであるとします:

f(n)= cos(Freq * 2 * Pi * n / N)

f(n)の1024ポイントDFTを取得すると、bin [100] = 512であることがわかります。ただし、これはNでスケーリングするまで意味のある値ではありません。512/ 1024 = 1/2、そしてもちろん、他の1/2はbin [924]の負のスペクトルにあります。

DFTの長さを2倍、N = 2048にすると、出力値は1024ポイントDFTの2倍になり、1 / Nでスケーリングしない限り、結果は無意味になります。DFTの長さは、この種の分析の要因にはなりません。したがって、この例では、DFTを1 / Nでスケーリングする必要があります。

前方変換をスケーリングしてはなりません。

ここで、32タップFIRフィルターのインパルス応答があり、その周波数応答を知りたいとします。便宜上、ゲイン1のローパスフィルターを想定します。このフィルターの場合、DFTのDC成分は1でなければならないことがわかります。そして、 DFTは、DC成分が単純に入力値の合計(つまり、FIR係数の合計)であるためです。

したがって、この入力では、意味のある答えを得るために、DFTは1 / Nでスケーリングされません。これが、変換の結果に影響を与えることなく、インパルス応答を必要なだけゼロパディングできる理由です。

これら2つの例の根本的な違いは何ですか?

答えは簡単です。最初のケースでは、すべての入力サンプルにエネルギーを供給しました。つまり、正弦波は1024サンプルすべてに存在するため、DFTの出力を1/1024でスケーリングする必要がありました。

2番目の例では、定義により、1つのサンプル(n = 0のインパルス)にのみエネルギーを供給しました。インパルスが32タップフィルターを通過するのに32サンプルが必要でしたが、この遅延は無関係です。1つのサンプルにエネルギーを供給したため、DFTの出力を1でスケーリングします。インパルスが1ではなく2ユニットのエネルギーで定義された場合、出力を1/2でスケーリングします。

逆変換をスケーリングしてはなりません。

次に、逆DFTについて考えてみましょう。フォワードDFTと同様に、エネルギーを供給しているサンプルの数を考慮する必要があります。もちろん、正と負の両方の周波数ビンを適切に埋める必要があるため、ここではもう少し注意する必要があります。ただし、2つの適切なビンにインパルス(つまり、1)を配置すると、逆DFTで使用するポイントの数に関係なく、逆DFTの出力は振幅が2の余弦波になります。

したがって、フォワードDFTと同様に、入力がインパルスの場合、逆DFTの出力をスケーリングしません。

逆変換をスケーリングする必要があります。

次に、ローパスフィルターの周波数応答がわかっていて、インパルス応答を取得するために逆DFTを実行する場合を考えてみましょう。この場合、すべてのポイントでエネルギーを供給するため、意味のある答えを得るには、DFTの出力を1 / Nでスケーリングする必要があります。入力値が複雑になるため、これはそれほど明白ではありませんが、例を介して作業すると、これが正しいことがわかります。1 / Nでスケーリングしない場合、Nのオーダーのピークインパルス応答値が得られますが、これはゲインが1の場合には当てはまりません。

詳細に説明した4つの状況は、DFTの出力をスケーリングする方法が明確なエンドポイントの例です。ただし、エンドポイント間には多くの灰色の領域があります。それでは、別の簡単な例を考えてみましょう。

N = 1024、Freq = 100の次の信号があるとします。

f(n) = 6 * cos(1*Freq * 2*Pi * n/N)  n = 0 - 127
f(n) = 1 * cos(2*Freq * 2*Pi * n/N)  n = 128 - 895
f(n) = 6 * cos(4*Freq * 2*Pi * n/N)  n = 896 - 1023

時間領域

3つのコンポーネントの振幅、周波数、および持続時間の違いに注意してください。残念ながら、2番目のコンポーネントは他の2つのコンポーネントの1/36の電力レベルですが、この信号のDFTは3つのコンポーネントすべてを同じ電力レベルで表示します。

非ウィンドウ化Freqドメイン

3つのコンポーネントすべてが同じ量のエネルギーを供給しているという事実は明らかであり、これがDFTの結果を説明していますが、ここで重要なポイントがあります。

さまざまな周波数成分の持続時間がわかっている場合、それに応じてさまざまな周波数ビンをスケーリングできます。この場合、DFTの出力を正確にスケーリングするためにこれを行います。bin [100] / = 128; bin [200] / = 768; bin [400] / = 128;

それが私の最後のポイントになります。一般に、特定の周波数成分がDFTへの入力にどのくらいの時間存在するかはわからないため、この種のスケーリングを行うことはできません。ただし、一般的には、すべてのサンプルポイントにエネルギーを供給します。そのため、信号を分析するときにフォワードDFTを1 / Nでスケーリングする必要があります。

問題を複雑にするために、この信号にほぼ確実にウィンドウを適用して、DFTのスペクトル解像度を改善します。最初と3番目の周波数成分は信号の最初と最後にあるため、27 dB減衰しますが、中心成分は4 dBだけ減衰します(ハニングウィンドウ)。

窓付きスペクトル

明確にするために、DFTの出力は、スケーリングされているかどうかにかかわらず、入力のかなり貧弱な表現になる可能性があります。

通常は純粋な数学の問題である逆DFTの場合、未知の信号の分析とは対照的に、DFTへの入力は明確に定義されているため、出力をスケーリングする方法がわかります。

アナログまたはFFTのスペクトラムアナライザで信号を分析する場合、問題は同様です。デューティサイクルも知らない限り、表示される信号のパワーはわかりません。しかし、それでも、ウィンドウイング、スパン、スイープレート、フィルタリング、検出器のタイプ、およびその他の要因はすべて、結果を正すために機能します。

最終的に、時間領域と周波数領域の間を移動するときは、非常に注意する必要があります。スケーリングに関して尋ねた質問は重要なので、出力をスケーリングする方法を知るには、DFTへの入力を理解する必要があることを明確にしたいと思います。入力が明確に定義されていない場合、DFTの出力は、スケーリングするかどうかにかかわらず、非常に懐疑的に見なさなければなりません。


包括性と詳細な情報のためにこの回答を選択しましたが、直感的な概要についてはPhononの優れた回答も参照してください。
ブライホイト

9

計算精度の問題を含むいくつかの理由を考えることができますが、数学的には何があっても同じように定義しており、数学は精度の問題を知らないので、それはおそらく正義にはなりません。

これが私の見解です。単なる変換としてではなく、信号処理の意味でのDFTの意味を概念的に考えてみましょう。この場合、DFTを信号とシステムに適用すると、異なる結果を確認したいと思うように思えます。

たとえば、値1の定数信号にDFTを適用してみましょう。この信号の長さは有限で、16タップ長であると仮定します。この場合、DFTには何が必要ですか?明らかに、信号の各周波数成分の振幅を教えてほしい。明らかに、信号には周波数0と振幅1の単一成分がありますが、DFTはビン0と高さ16に単一のピークを与えます!この場合、DFTの定義に対する不満は完全に理にかなっています。合成係数ではなく、分析係数をスケーリングする必要があります。

さて、同じ数値配列、つまり16個の文字列を分析しますが、この場合はシステムとして分析します。システムの周波数応答に概念的に意味するものは何ですか?ほとんどの人は、入力の振幅と比較した出力の振幅、つまり伝達関数だと言うでしょう。この場合、単一振幅のDC信号をシステムに供給し、定常状態応答の振幅を調べると仮定します。さて、2つの一定の16タップ信号を畳み込むと、過渡的なランプに続いて振幅のDC信号である定常状態の出力が得られます(check-this-out!)16!この場合、非スケーリング分析変換の定義は、他の方法よりも意味があります。

結局のところ、それはあなたが表現しようとしているものについてのすべてです。このシステム中心のDFTの定義を検討する理由はたくさんあります。

ただし、変換を純粋に数学的な観点から見ると、分析変換と合成変換の両方倍にスケーリングすることにより、この変換を正規直交およびユニタリにすることができるため、どちらも最も意味がありません1(N)


すばらしい回答、ありがとう!包括性のためにuser5108_Danの回答を選択しましたが、あなたの回答は間違いなく最高の直感を提供するのに役立ちました。
ブリホイ

7

実際、スケールファクターを配置する3つの異なる方法は、さまざまな異なるFFT / IFFT実装で一般的です:1.0前方および1.0 / N後方、1.0 / N前方および1.0後方、1.0 / sqrt(N)前方および後方の両方。

これら3つのスケーリングのバリエーションにより、回転因子に汎用のスケーリングされていないsin()およびcos()トリガー関数を使用したIFFT(FFT(x))ラウンドトリップが恒等変換になります。

フォワードFFTで正弦波の大きさを保存しても、総エネルギーは保存されないことに注意してください(Parsevalの定理のように)。お好みのものを選んでください。

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