FFTにおけるゼロ追加と分解能について

このQ&Aのポイント
  • FFT解析において、時間軸データの後にゼロを追加すると、周波数分解能が上がることが数値計算で確認されています。しかし、周波数軸データにゼロを追加する場合、共役関係やナイキスト周波数を考慮する必要があります。
  • 周波数軸データの値を内挿すると周波数分解能が向上し、逆変換すると時間軸の継続時間が長くなる可能性があります。適切な内挿方法については、参考URLや書籍をご紹介します。
  • 以下はFFT解析におけるゼロ追加や補間に関する参考URLや書籍です。 1. 「FFT解析の基礎」(書籍) 2. 「FFTの応用」(書籍) 3. 「FFT解析におけるゼロ追加の効果について」(ブログ記事) 4. 「周波数分解能の改善についての研究論文」(学術論文) 5. 「FFT解析の最新技術」(ウェブサイト)
回答を見る
  • ベストアンサー

FFTにおけるゼロ追加、補間や分解能について

FFT解析で、時間軸データの後にゼロをつけると、周波数分解能が上がることは数値計算で確認しましたが、次の場合のやり方がわかりませんので教えていただけないでしょうか。 1. 周波数軸データの後にゼロをつけて最高周波数をあげ、逆変換して刻み時間を細かくしたいのですが、ゼロの配置は共役関係やナイキスト周波数を考えるとどういう風になるのでしょうか。 2. 周波数軸データの値を内挿すると周波数分解能が上がり、逆変換すると結果として時間軸の継続時間が長くなるように思うのですが、それでよいのでしょうか。またその場合、良い内挿の方法はあるのでしょうか。 3. 以上に関するURLや書籍を紹介していただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.4

「時系列の中央部分がゼロに近い」の「中央部分」とは、「IFFTをしたときに得られる、t=0からt=周期までサンプル値を並べた配列の中央付近」ってことですね。周波数空間で応答関数を表現したものが滑らかであればそうなる。応答関数もそれをIFFTしたものも、持っている情報量は同じなので、こりゃしょうがないです。補間をしないで(半分の点数で)IFFTして得られるのは時系列のエリアス(つまり、時系列を周期の整数倍だけ時間軸上でずらしたものを全部の整数について合計したものの一周期分)であって、それ以上のことは情報がないから分からない。  もしも何か別の拘束条件があるのなら、一応、手がない訳ではありません。すなわち、拘束条件によって時系列関数としてあり得る関数が絞られるから、その中から解を探すんです。しかしこの手(「超解像」という)は誤差に極めて敏感で不安定であり、だから応答関数の精度が非常に良いと保証できる場合でない限り使えません。(10時間掛けて計算するぐらいだから、そんな保証はタブンできないでしょう。)拘束条件がないのなら、せいぜい例えば「FFTしてサンプルを間引いたときに応答関数に一致するような時系列のうちで、ノルムが最小であるもの」を「一例として」構成してみせるぐらいが関の山です。  なお、もしもご質問が「時系列のうち、後端ならともかくヨリニヨッテ中央部分が抜けるのが困る(「後端部分はどうせゼロに近い」とアプリオリに分かっていて、だからIFFTでドンナ値が出ようと誤差に過ぎないと考えて利用しない)」という話であるのなら、それは時間軸の原点の位置がまずいだけかも知れません。すなわち、ひょっとすると「応答関数を細かく計算するとギザギザしていて、それを1点おきに間引いてから補間したためにギザギザが失われ、IFFTすると時系列が時間軸上で周期/2だけずれて現れる」という現象なのではないか。  どういうことかと言いますと、ある滑らかな応答関数をIFFTして得た時系列(中央部分がほとんど0)を考え、その時系列を時間軸上で周期/2だけ平行移動したとします。それをFFTして得られる応答関数はギザギザに振動していてでも1点おきに間引くと元の滑らかな応答関数の格好になる(。で、これを10時間掛けて計算したのだとしましょう)。この、間引いた物(滑らかな応答関数)を普通のヤリカタで補間して得られるものも当然滑らかであり、これをIFFTすると、最初の時系列(中央部分がほとんど0)、つまり時間軸上で周期/2だけずらす前の物に(ほぼ)戻ってしまう。  もしそういうことが起こっているのだとすると、計算なさった時系列の後端部分はゴミなんかじゃなく、それを前端部分の前にくっつけたものこそが時系列の本来の姿ということになります。  またしても滑ってるかも知れませんが…

その他の回答 (3)

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.3

ANo.1、もういっちょ滑ってました。 >・ 時間軸データの値を内挿する ⇔ 時間軸データの値を内挿する 同じに決まってる。いや、そうじゃなくて、 ・時間軸データの値を内挿する ⇔ 周波数軸データの後にゼロをつける です。

pipiruru11
質問者

補足

指のすべりの件、多分そうだろうと解釈していました。 一連のご回答を見て、この分野に関して非常にハイレベルの方とお見受けしております。 実は地震波動解析の際に周波数応答関数を計算し、それを逆変換して時系列(地震波)を計算しています。ただ周波数応答関数の計算に10時間前後かかるため、時間短縮のため計算周波数点を粗くし、それを補間してから逆変換で時系列を求めたいのが目的です。実際に計算してみると、時系列の中央部分がゼロに近い値となり、目的の時系列が得られないようです。 これはご指摘の、 ・周波数軸データの値を内挿する ⇔ 時間軸データの後にゼロをつける の表れと解釈しておりますが、この現象が生じないように、目的の計算結果を得る方法はないものでしょうか。

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.2

ANo.1でうっかり滑りました。 一番最後の「こいつを逆フーリエ変換したものが」の「こいつ」ってのは、矩形窓を掛ける前の「ΣA(ω+2kΩ)」のことで、逆フーリエ変換の結果はb(t)に他なりません。

pipiruru11
質問者

補足

前回の補足説明、訂正のつもりが誤って投稿ボタンを押してしまいましたので、注の部分を以下に訂正します。 注:理論的に詰めた訳ではなく、直感的に次のように考えた。 元のデータではナイキスト周波数成分は1個であるが、ゼロ追加後の データでは共役をとる関係でこの成分は2回表われるので、値を半分にする。

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.1

 FFTとその逆変換は、軸の正負が逆になることと定数倍以外、全く同じ変換です。そして、 ・時間軸データの後にゼロをつける ⇔ 周波数軸データの値を内挿する  ・時間軸データの値を内挿する ⇔ 時間軸データの値を内挿する  内挿をsinc関数の畳み込みによって理想的に行った場合、「⇔」で結んだ一対の操作は同じことです。  数値的に色々試していらっしゃるようですけど、フーリエ変換と離散フーリエ変換(FFT)の関係をある程度把握すると、「連続関数をサンプリングする」「補間する」などの操作が全てフーリエ変換の言葉で表現できるようになり、見通しが良くなると思います。こんな具合です:  ある離散データのサンプルひとつf[k]を、δ関数 f[k]δ(t-kΔt)だと考え、それらの総和  g(t)=Σf[k]δ(t-kΔt) (Σはk=-∞,…,∞) をひとつの「連続データ」だと思うことにします。なんでこんなことするかと言いますと、離散データをこういう形に表すことによって、その(FFTではなく)フーリエ変換を考えることができるからです。  f(t)をフーリエ変換すると、FFTで得られるスペクトルと同じものが周波数軸上に周期的に無限個並んだ形G(ω)が現れます。その周期Ωはサンプリング間隔Δtの逆数に比例します。  そして、G(ω)の波形から周期ひとつ分だけを取り出して、逆フーリエ変換して得られるのは、元の離散データg(t)にsinc関数を畳み込んで作った連続データです。なぜなら、「sinc関数を畳み込む」のは、「フーリエ変換し、矩形窓をかけ算し、逆フーリエ変換を行う」のと同値。そして、「周期のうちのひとつ分だけを取り出す」操作は「矩形窓をかけ算する」ことに他ならないからで、その矩形窓の幅Ωはサンプリング周波数(ナイキスト周波数の2倍)です。  次に、離散データに対して一次補間を使って、サンプリング間隔を半分にした離散データを作る場合を考えましょう。  一次補間とは二等辺三角形をした関数s(t)を畳み込むことに他なりません。この三角形の底辺の長さはサンプリング間隔Δtの丁度2倍で、これは「サンプリング間隔Δtの幅を持つ矩形」二つを畳み込んだ物と同じです。したがって、s(t)のフーリエ変換は「サンプリング周波数Ωのところに最初の零点があるsinc関数」の2乗。これをSとしましょう。  で、先に述べた「同じものが周波数軸上に周期的に無限個並んだ形」GにSをかけ算し(従って周期関数ではなくなります。これをA=SGとしましょう)、さらに逆フーリエ変換したのが一次補間で作った連続データ(折れ線グラフになりますね)a(t)です。  次に、a(t)を元のサンプリング間隔Δtの半分の間隔Δt/2で再度サンプリングし(そして無限個のδ関数の総和で表し)たものをb(t)とします。これをまたフーリエ変換すると、「同じものが周波数軸上に周期的に無限個並んだ形」Bが現れますが、その周期はGやAの周期の2倍(2Ω)になっています。これは、さっき見たAを周波数軸に沿って周期2Ωの整数(k)倍だけずらしたものすべてを総和した波形 ΣA(ω+2kΩ) に他なりません。で、これに幅2Ωの矩形窓をかけ算して周期のひとつだけを取り出してやると、これがAの「エリアス(alias)」です。こいつを逆フーリエ変換したものが、「一次補間でサンプリング間隔を半分にした離散データ(をδ関数で表したもの)」になっています。

pipiruru11
質問者

補足

非常にご丁寧なご回答、ありがとうございます。今のところご回答の中身を完全に理解しきれていませんが、当方の質問の1、2については分かりました。質問の1について(恥ずかしながら数値計算で)確認したところ、元のFFTによるフーリエ変換のナイキスト周波数の値を半分にし、ナイキスト周波数より高い周波数成分にゼロを追加後、共役をとって逆変換すれば、元の時系列を補間できました。例えばデータ個数nの時系列を補間して2n個の時系列を得る場合をfortran風に書けば x(t)⇒X(iω)=X(k), t=1~n X(n/2+1)=X(n/2+1)/2注 X(k)=0, k=n/2+2~2n X(n-k+2)=conjg(X(k)) X(k)⇒x(t), t=1~2n 注:理論的に詰めた直感的に次のように考えた。 元のデータではナイキスト周波数成分は1個であるが、ゼロ追加後の データでは共役をとる関係でこの成分は2回表われる、半分にする。

関連するQ&A

  • FFTでの分解能について

    FFTをするときに、その分解能はサンプリング時間とデータの数で決まってしまうと思うのですが、この二つを変えずに周波数分解能をあげることは可能でしょうか?また、データ数を補間する等して無理やり多くすると問題があるでしょうか?すいません、どなたかお答え下さい。

  • フーリエ変換の分解能

    横軸が時間のデータを扱っています。 フーリエ変換することで周波数を横軸にとるスペクトルが得られるわけですが、このスペクトルの周波数分解能をどうやって求めればよいかわかりません。 教科書を読むと1/(N*Dt) N:データ数,Dt:データ取り込み時の時間幅 で決まると書かれていますが、実際には周波数の大小に応じて分解能が異なるように思います。 周波数に応じた分解能、どうやって求めればよいのでしょうか? ご教示、どうぞよろしくお願いいたします。

  • FFTの見方

    非常に初歩的な質問になります。 高速フーリエ変換について、少し勉強しています。 基本的な本を読んで理解をしているつもりだったのですが、フーリエ変換とは時間軸に対して観測したデータを周波数軸に変換して表現した物と認識しています。 では、時間軸で振幅の差は周波数軸に変換した場合、どこに現れるのでしょうか? 例えば、ある信号で同じ周波数のデータがあるとします片方は高振幅、もう一方は低振幅この違いはFFTにかけるとどうなるのでしょうか? 大変漠然とした質問になってしまっていますが、よろしくお願いします。

  • FFTの特性について

    非常に初歩的な質問になります。 高速フーリエ変換について、少し勉強しています。 基本的な本を読んで理解をしているつもりだったのですが、フーリエ変換とは時間軸に対して観測したデータを周波数軸に変換して表現した物と認識しています。 では、時間軸で振幅の差は周波数軸に変換した場合、どこに現れるのでしょうか? 例えば、ある信号で同じ周波数のデータがあるとします片方は高振幅、もう一方は低振幅この違いはFFTにかけるとどうなるのでしょうか? 大変漠然とした質問になってしまっていますが、よろしくお願いします。

  • FFTの周波数分解能を上げる話

    通常DFT(Discrete Fourier Transform)の周波数分解能(δf)を小さくするには分析対象データの時間長を延ばさなくてはなりません。これは分析対象データの時間長で1波長、2波長、3波長、・・・が入るデータの組み合わせに分解するのだから当然と言えば当然です。これを分析対象データの時間長を延ばさずにΔfを小さくするようなDFTの方法ってありますか? 例えばΔfを1/16にしたければ、初めから分析対象データの時間長で1/16波長、2/16波長、3/16波長、・・・が入るデータの組み合わせに分解すれば済むことだと思いますが、そういう事って数学的に可能ですか? (つまりそれらがFFTのように直交性や重複演算の排除を利用して上手に計算量を減らすことができますか、という質問です)

  • FFT/スペクトルに関して

    エクセルにてFFTを勉強しているのですが、FFT後に出てくる縦軸のスペクトルとは何でしょうか? 時間軸×音圧 ⇒ 周波数×音圧に変換したんですが、この縦軸は音圧ではなくスペクトルというものだと理解しています。このスペクトルが示すものは単にその周波数の成分が強い傾向にあるというのを示しているだけで、その周波数の音圧がいくらというのを示しているのではないのでしょうか? 現在、訳あってその周波数の絶対量を使用したいのですが、その数字に意味はないのか教えてください。

  • 離散フーリエ変換の周波数分解能

    失礼します。 DFT(離散フーリエ変換)について質問させてください。 DFTの周波数分解能は時間領域でのデータが持つ幅の逆数で決まりますが、 この周波数分解能で表現されなかった周波数成分はどこに行くのか教えていただけないでしょうか? DFTでの離散的な周波数の間にある成分はどこへ行くのか? 単純に考えて、DFTは形としては級数和なので、 それらの成分はどこかに畳み込まれているように思うのですが、 表現されない周波数成分の情報は消されたりするのでしょうか? よろしくお願い致します。

  • FFT処理後のデータの変換について

    時間-加速度波形を、例えば、EXCELでのFFT処理でもって、 実数+虚数とし、これをIMABSという関数で実数化して (周波数-)パワースペクトル?に変換することができますが、 これを、(周波数-)加速度にさらに変換するにはどうすればよいのでしょうか。 FFTアナライザなどFFTをリアルタイムでかけられる機器はありますが、 FFT処理後、どのような過程(計算)を得て、Y軸はdBそして加速度等に標記されているのでしょうか。 教えていただけないでしょうか。

  • 周波数解析 FFTと自己回帰モデルについて

    いつもお世話になっています。 周波数解析で質問です。 十分なサンプリングレートで、十分な時間記録したデータを使う場合、自己回帰モデルを使った周波数解析は必要ないでしょうか。 現在、FFTを使ってあるデータの周波数解析をしていますが、ものの本によれば、そのデータを扱う場合は、FFTよりARモデルを使った周波数解析の方がよい、と書いてありました。しかし、サンプリングレートが細かすぎて、モデルの次数を決定するのも、妥当かどうか疑問が残ります。一般的に、MEMなどのARモデルを使った周波数解析は、周波数分解能の悪さを補うのが大きな目的ですか?

  • FFTについて

    FFTについて 得られたデータをハニング窓を用いて、FFTを行ったところ どのデータに関しても 周波数が0付近で他の周波数に比べて非常に大きいパワースペクトルが得られます。 これは窓関数による影響でしょうか? FFtについていくつか参考書を読みましたが、正直まったくつかめず、 よくわからないままツールを振りまわしていますので 得られたデータが本当に正しい結果であるのか信じきれません・・・。 よろしければFFTを初学者が学ぶコツ、オススメの参考書等ありましたら教えて頂きたいのです。 よろしくお願い致します。