• ベストアンサー

FFTの結果からフーリエ係数は求められるものでしょうか?

FFTの結果からフーリエ係数は求められるものでしょうか? 実測値の波形データを関数で表したいのです。 フーリエ展開でなんとかならないかと考えたのですが、 計算の速いFFTを使うと、逆変換で波形データに戻せるものの、 関数として表す事が出来ない事に、 FFT後に気付いてしまいました。 数学は専門外で、入門書と格闘しながらやっているのですが、 行き詰ってしまいました。

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

  • ベストアンサー
  • inara1
  • ベストアンサー率78% (652/834)
回答No.1

データは加速度(振動)データでしょうか。関数で近似できれば、数値でなく式で微分も積分もできるので、積分して速度を出したり、さらに積分して位置を計算したりできますね(そういう目的でしょうか?)。 >FFTの結果からフーリエ係数は求められるものでしょうか? 波形データの組 A(1), A(2), ... , A(N) をFFTにかけて出てきた数値の組 B(1), B(2), ... , B(N) はフーリエ係数(複素数)ですから、これを係数として元の波形を再現することはできます。ただし、係数B はN個(2の倍数)あるので、N=256 だとしても、1点計算するのに 256項のsinの和を計算しなければなりません。 もし元の波形 A(t) が、ある周波数の基本波(sin波)とその高調波からなるものであれば、以下のような有限項の Fourier級数を仮定して、Excelのソルバーを使って最小2乗近似で係数を出したほうが簡単だと思います(充分な精度ででます)。    A(t) = a(0) + Σ[ k=1~N ] { a(k)*sin( 2*π*k*f*t ) } 未知パラメータは 基本波周波数 f [Hz] と Fourier係数 a(0) ~ a(N) です。a(0) は定数項ですので、振動データの場合はゼロとしてもいかもしれません。 例えば、以下のように、Excelシートの A列の A11からA1011 に時間、その右のB列に対応する波形データがあるとします(1001点のデータがあると仮定しています)。まず、B2~B8 に未知パラメータの値を書きます(この値は適当でいいですが、基本周波数はあまりかけ離れていると収束しないので、ある程度正確な値を記入)。次に、C列に近似波形の計算式を書きます。C11に B2~B8 のパラメータを使って    = $B$3 + $B$4*sin( 2*PI()*$B$2*A11 ) + $B$5*sin( 2*2*PI()*$B$2*A11 ) + $B$6*sin(3* 2*PI()*$B$2*A11 ) + $B$7*sin( 4*2*PI()*$B$2*A11 ) + $B$8*sin( 5*2*PI()*$B$2*A11 ) と書いて Enter を押したあと、このセルをコピーして C12~C1011 に貼り付ければ、C12~C1011 には近似波形のデータが作られます(A列の時間と C列の波形でグラフを描けば波形グラフとなります)。次に元の波形と近似波形の誤差の2乗を D11~D1010 に作ります( D11 に = (B11-C11)^2 と書いて、そのセルを、D12~D1010までコピー)。最後に、C2 に = sum(D11:D1010) と書いて、ここに差の2乗の和 を作ります。その後ソルバーを使い、差の2乗和が最小となるような B2~B8の値を求めます(その方法は末尾に書きます)。     A         B         C         D 1  項目       初期値    差の2乗和 2  f [Hz]       100     = sum(D11:D1010) 3  a0          1 4  a1          1 5  a2          1 6  a3          1 7  a4          1 8  a5          1 9 10 時間 [s]    元の波形     近似波形    差の2乗 11 0.00001    0.021173203   = $B$3 + ・・   = (B11-C11)^2 12 0.00002    0.042339618 13 0.00003    0.063492462   ・・・ 1010 0.00999   -0.021173203 1011 0.01     -8.2575E-16 【ソルバーの使いかた】 (1) Excelのメニューバーの [ツール] → [アドイン] で 「ソルバーアドイン」 にチェックを入れ OK (2) Excelのメニューバーの [ツール] → [ソルバー] で        目的セルを $C$2        目標値の「最小値」のラジオボタンをクリック(差の2乗和を最小にするという意味)        変化させるセルを $B$2:$B$8     とする (3) OKをクリックすると近似計算が始まる。収束すれば「解が見つかりました・・」と出るので、OKをクリック (4) B2~B8に近似パラメータが記入される(グラフを描いていれば近似グラフも変わります。元の波形も描いてあれば、ほとんど一致していることが分かるはずです)。

その他の回答 (1)

  • inara1
  • ベストアンサー率78% (652/834)
回答No.2

ANo.1 です。 測定データは t=0 から始まっているわけではないので、遅延時間(位相)もパラメータに加えてください。位相を加えた近似式は   A(t) = a(0) + Σ[ k=1~N ] [ a(k)*sin{ 2*π*k*f*( t - p ) } ] です。C11 の近似式は    =$B$4+$B$5*SIN(2*PI()*$B$2*(A11-$B$3))+$B$6*SIN(2*2*PI()*$B$2*(A11-$B$3))+$B$7*SIN(3*2*PI()*$B$2*(A11-$B$3))+$B$8*SIN(4*2*PI()*$B$2*(A11-$B$3))+$B$9*SIN(5*2*PI()*$B$2*(A11-$B$3)) としてください。Excelシートも以下のように位相を加えてください。位相の初期値は、基本波が-側から+側に行くときのゼロクロス点での時間としてください(高調波が大きくてはっきりしないときはゼロとしてもいいと思います)。     A         B         C         D 1  項目       初期値    差の2乗和 2  f [Hz]       100     = sum(D11:D1010) 3  p [s]       0.001 4  a0          0 5  a1          1 6  a2          1 7  a3          1 8  a4          1 9  a5          1 10 時間 [s]    元の波形     近似波形    差の2乗 11 0.00001    0.021173203   = $B$4 + ・・   = (B11-C11)^2 12 0.00002    0.042339618 13 0.00003    0.063492462   ・・・ 1010 0.00999   -0.021173203 1011 0.01     -8.2575E-16

sillabub03
質問者

お礼

丁寧な解説ありがとうございます。 なるほど、最小2乗法による近似ですか。 やってみます。 >フーリエ係数(複素数)ですから、これを係数として元の波形を再現することはできます。 絶対値を算出するまえの、複素数を係数としてsin和を計算すれば良かったんですね。絶対値で計算してました(汗 ありがとうございました。

関連するQ&A

  • MATLABによるFFT

    MATLABのfft関数を使用して,フーリエ変換してPSDを算出すると,スペクトルの周波数領域での積分値が元データの二乗平均値と一致しないのですが,原因は何が考えられるでしょうか?FFTの出力がフーリエ係数であれば一致するはずなのですが.

  • フーリエ展開を微分すると振動する。

    前回の質問では、回答を頂きありがとうございました。 また、質問があるのですが。 実測値の波形データの処理をしています。 フーリエ展開し関数には出来ました。 しかし、フーリエ展開して得られた式を微分したところ、 両端で細かく振動が起こりました。 原因は何が考えられるでしょうか? よろしくお願いいたします。

  • フーリエ係数

    画像のような波形信号のフーリエ係数を求めるときは [0-π]の範囲ではf(t)=4sin(t)で、[π-2π]の範囲ではf(t)=0として計算すればよいのでしょうか? そうすると計算式は積分範囲は[0-π]で a0=(1/π)*∫4sin(t)dt, an=(1/π)*∫4sin(t)*cos(nt)dt, bn=(1/π)*∫4sin(t)*sin(nt)dt, となるのでしょうか? また、周期2πで、[-π,π]において、f(t)=π-|t|、で表わされる関数f(t)のフーリエ係数は a0=π, an=(2/n)*(cos(nπ)-sin(nπ)), bn=0, になったのですが(計算があってるかはわかりません) フーリエ級数を求めるには、この後どうすればいいのでしょうか? よろしくお願いします。

  • EXCELとMATLABのFFT計算結果の違い

    はじめまして。 EXCELのフーリエ変換機能を使って計算したピーク周波数が、 MATLABのFFT関数から計算させたものとの結果より高くなってしましました。 ※0.0001秒刻み、振幅が4096行あるデータで約2.4Hz違いました。 違いの原因を調べたいのですが、どの様な事が考えられるでしょうか? よろしくお願いします。

  • フーリエ変換のデータ点数を増やしたい

    現在はエクセルでフーリエ変換・逆フーリエ変換を行っていますが、最大で4096点までしか扱えないそうです。 都合上、16384点のデータをフーリエ変換・逆フーリエ変換を行いたいと思っています。そこで、フリーソフトのFFT君を試してみたのですが、逆フーリエ変換の際に1つのデータしか変換できないみたいです。つまり、複素数の実部・虚部の2つのデータを一度に逆フーリエ変換したいということです。 何かよい方法がありましたら教えていただけないでしょうか。よろしくお願いします。

  • デルタ関数のフーリエ変換について

    デルタ関数のフーリエ変換後の波形について質問です よく見かけるδ(t)のフーリエ変換は1になり、実部で周波数軸に平行の波形になるのはわかるのですが t=aの位置にデルタ関数のあるδ(t-a)のフーリエ変換後は波形はどうなるのでしょうか? 私の計算結果だと実部はcos関数、虚部はsin関数になるのですが ある参考書を見たところ定数になっていて、何が正しいのか不明な状況です。 詳しい方がいらっしゃいましたら、是非ご教授お願い致します。

  • フーリエ級数とフーリエ変換

    大学の試験で問題が発表されて、そのうちの一つに 「フーリエ変換とはどういうものか述べよ」というのがありました。 そこで疑問に思ったのですが、フーリエ級数とフーリエ変換の違いって何ですか? 自分なりに調べてみて、 ・フーリエ級数は、任意の関数がある区間で、三角関数の足し合わせで表現したもの。 ・フーリエ変換は、フーリエ級数展開の周期を無限大まで飛ばしたもの。こうすることで、元の関数との誤差が0になる。 これって正しいですか?(数学の試験ではないので、難しい数式とかで証明する必要はありません)

  • 三角パルスのフーリエ変換について

    f(t)=A-(|t|/T)A (t|<=T) で表わされる三角パルス関数のフーリエ変換と フーリエ級数展開係数Ckの求め方を計算過程の省略なしでお願いします。

  • FFT(高速フーリエ変換)について

    直流成分0の正弦波と矩形波形をFFTするとFFTグラフには 正弦波・・・・一本の線のピーク 矩形波形・・・・複数の線のピーク となっているのですが、 FFTグラフの横軸と縦軸はなんでしょうか? FFT結果を複素数の絶対値を計算しグラフ化するのですが 何故、FFT結果が複素数なのですか? 定義式(g(t)=直流成分+Cos成分+Sin成分)をみる限り 複素数にならないと思います。 それか見ている式が違うのでしょうか? あと定義式(ある時間信号g(t)が、ある周期Tを持つ連続関数である時) であるのですが、”ある時間信号g(t)”っていうのはよくわかりません。 このgを求めることが 正弦波・・・・一本線のピーク 矩形波形・・・・複数の線のピーク になる理由がわかるのですか? ご指導の程、よろしくお願い致します。

  • フーリエ級数展開についてです。 急いでます。

    (1)下の図のような周期2の関数がある。これをf(t)=|t| (-1<t<1)とし、そのフーリエ級数展開を求めなさい。なお、フーリエ級数展開はフーリエ係数を求めそれらの係数を用いて与式を展開すること。          |        /\ |   /\ _\/__\|/__\/___      -1       1   (2) 上の結果を用いて、Σ 1/(2n-1)^2=(π^2)/8となることを導きなさい。          (n=1~∞) という問題を教えてください。