FFTのアーティファクト


10

最近、FFTは完全ではないことに気付きました。信号を取得してからFFTを取得してから逆FFTを実行すると、結果の出力は入力とまったく同じにはなりません。ここに私が何を意味するかを示す画像があります:FFTは常に機能するとは限りません

画像はかなり自明だと思います。IFFT信号は「FFT​​スペクトル」の逆変換であり、「差分」プロットはIFFT信号と元の信号の差です(IFFT-オリジナル)。

明らかに小さいのですが、いくつかのアーティファクトがあります。そもそもなぜ発生するのか知りたい。これはフーリエ変換の有限ウィンドウのためですか?または、FFTアルゴリズムの何かのためですか?

注:このプロットには32ポイントがありますが、100、1000、1024、256、および64ポイントで確認しました。同様の大きさの差(またはいずれか)には常にこの残差があります。)。10161015


4
FFTだけでなく、すべての限定精度の数学にはこれらのエラーがあります。
エンドリス2013年

回答:


16

表示される違いは、浮動小数点形式の数値エラーによるものです。FFTおよび逆FFTを実行するために必要なすべての操作は有限の精度でのみ実行でき、この有限の精度の結果を右下のプロットに示しています。


このエラーが浮動小数点の精度を超えて爆発する可能性がある状況はありますか?
キッチ2013年

6
そして、@ MattLの答えを確認するだけです:、倍精度浮動小数点数には53ビットの仮数があります。したがって、表示される丸め誤差は最後の2ビットにあります。それはそれが得るのと同じくらい良いです。1016253
ワンダリングロジック

@Kitchi:はい、浮動小数点形式であっても、数値エラーが大きな問題となる状況はたくさんあります。逆行列は多くの例の1つです。それはすべて条件番号と関係があります
Matt L.

1
@MattL。-素晴らしい!参照いただきありがとうございます。
キッチ2013年

7

一般に、数値をデジタル形式で正確に表すことはできません。エラーが発生します。あなたがMatlabにいるなら、コマンドでepsを書くことができます、それはあなたに数を与えます。

引数なしのEPSは、1.0から次に大きい倍精度数までの距離、つまりEPS = 2 ^(-52)です。

プロットに表示されるエラーは、epsによって返される範囲です(つまり、2 ^(-52))。

IFFTからの出力に実際の値が期待される場合でも、虚数部が正確にゼロに等しくない場合があります。同じこと。

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