ちょっと変わったマニアな作品が集結

こんにちは。現在、フーリエ変換について勉強しているのですが、ちょっとわからないことがあったので質問させていただきました。

質問内容は高速フーリエ変換についてで、cooley&tukeyのアルゴリズムを利用すると、データが2の冪乗個のときは計算量をО(NlogN)に減らせる事ができるというものでした。

しかしデータが2の冪乗個でないとき。例えばN=5000くらいのときはデータを切り取って無理やりN=4096(=2^12)みたいな感じにすれば良いんですよね?
やっぱりその時って、N=5000で通常の離散フーリエ変換したときと周波数値に誤差が出ると思うのですが、それはどうやったら計算できるのでしょうか。。。

どなたかご教授していただければ幸いです。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

離散フーリエ変換は、信号が周期的であることを前提としています。


離散フーリエ変換でのデータ数Nは、離散時間信号の周期に当たります。変換の結果は線スペクトルとなります。
N=5000がその信号の1周期なのでしょうか。
もしそうならば、4096にすれば、誤差が大きくなるでしょう。
N=5000で変換すべきです。この場合にも高速アルゴリズムが
存在します。#1の方のとおりです。
FORTRANの時代には、パッケージがありました。
NはN=2^m*3^n*5^k*7^Lだったと思います。

もうひとつの考え方は、有限持続時間信号のフーリエ変換としての
適用です。これは、連続スペクトルとなります。データ数Nは
スペクトルの分解能に関係します。サンプリング周波数をNで割った
ものが周波数分解能となります。
実際のデータよりも2倍程度のNを使うことが多いと思います。
データ数が5000ならば、Nは8192とし足りないデータには、
0を詰めます。これならば、2のべき乗のNを選べます。
この場合、逆変換は周期的な拡張が行われることに注意が必要です。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございますm(_ _)m
N=5000が1周期であるとかは全く考えていませんでした^^;すいません。

>>データ数が5000ならば、Nは8192とし足りないデータには、
>>0を詰めます。

これは仮にデータを配列a[8191]に格納するとしたら、a[0]~a[4999]までは
普通にデータを格納し、a[5000]~a[8191]には0を格納するという事でしょうか?

お礼日時:2009/10/29 17:03

#2です。


>これは仮にデータを配列a[8191]に格納するとしたら、a[0]~a[4999]までは
普通にデータを格納し、a[5000]~a[8191]には0を格納するという事でしょうか?

そうです。
サンプリング周波数をFsとしたとき、Δf=Fs/8192間隔で
スペクトルが計算されます。

なお、データが本来もっと長時間のデータを5000個だけ
切り取ったものである場合には、窓関数を掛け算すると
データの両端での切り取りの影響が小さくなります。
窓関数(Window function)には、Hamming、Hanning,Blackmanなどが
あります。
完全な孤立波(有限持続信号)なら窓を掛ける必要はありません。
    • good
    • 1

実際のところ, N = mn と 2数の積に分解できれば N点のフーリエ変換は m点のフーリエ変換 (のようなもの) と n点のフーリエ変換 (のようなもの) を連続して行うことで求まり, その時の計算量は O(N*(m+n)) となります. これを繰り返すと, 結局 N = p1^e1 p2^e2 ... pk^ek と素因数分解できたときに計算量は O(N(e1 p1 + e2 p2 + ... + ek pk)) と表されることになります.


N = 2^n のときにこの分解が最も効率よくなり, O(N log N) となります. そうでないときには効率が落ちるのですが, それはそれでそれなりに計算できます.
例えば N = 5000 = 2^3 * 5^4 だと 5点に対するフーリエ変換を 4回, 2点に対するフーリエ変換を 3回行うことになり, その時の計算量はおよそ 5000*(5*4+2*3) = 5000*26 に比例します. 一方 N = 4096 に対する高速フーリエ変換は 4096*24 に比例します.
ということで「データ 1個当たりの所要時間」は大して変わらないことが分かると思います. つまり, 普通の高速フーリエ変換とは違うものの, 「5点に対するフーリエ変換」を作ることさえできれば, 点数を 5000 にしたままでもそれほど時間はかからないのではないでしょうか.
    • good
    • 0
この回答へのお礼

データが2^nでなくとも小さめの素因数があれば計算量を減らすことができるということでしょうか。大変参考になりました。有難うございますm(_ _)m

お礼日時:2009/10/29 16:55

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフーリエ変換のデータの補間について

Excelでフーリエ変換をする際、データ数は2のべき乗でなければならないと学校で習いました。
データ数が2のべき乗でない場合は2のべき乗になるようにデータを増やす、または減らす必要があるらしいのですが、どうやったらデータ数を増やす、または減らせるのでしょうか??

例えば、255×255のデータを256×256にするにはどうやったらいいのでしょうか。(MRI画像などは256×256だそうです)
教えてください。

Aベストアンサー

> MRI画像再構成についての課題です。

 なるほど、それなら話は通じます。実務じゃないんですね。

 周波数空間(いわゆるK空間)の中に、直流成分(空間周波数(0,0))を中心として、等間隔の格子点(n,m) (-N<n<N, -N<m<N)における複素数のサンプル値s(m,n) = p(m,n)+iq(m,n)が与えられている(p,qは実数)。これを複素逆フーリエ変換して画像を作るためにFFTを使う。

> コンピュータのサンプリングは奇数個でなければならない

 これはおかしい。奇数個でなければならないなんてことはないし、N-1まででやめる理由もない。例えば(-N≦n<N, -N≦m<N)の範囲を測ったって良いのですから。しかし、文句を言っても始まらない。ま、この課題に限っては、話の前提条件が(-N<n<N, -N<m<N)ということなんだな、と考えるしかありません。

> FFTをする場合は2のべき乗個なければならない。

 既に何度も出ている通り、これは数学的には誤りですが、工学的には「さもありなん」というところです。

 ご参考までに、フーリエ変換の定義を少し調べれば分かる、重要な性質を幾つか挙げておきます。

● FFTと逆FFT(IFFT)は、定数倍の違いを無視すれば全く同じ計算。(FFTを2回繰り返すとどうなるか、式を調べてみると面白いでしょう。)

● 2次元FFTは、格子点のそれぞれの行について1次元FFTして、その結果を今度はそれぞれの列について1次元FFTすれば良い。

● 複素IFFTをやるから、結果も複素画像になります。その実部をf(x,y)、虚部をg(x,y)と書くことにすると、
f(x,y) = (1/2)IFFT[(p[m,n]+p[-m,-n])+ i(q[m,n]-q[-m,-n])]
g(x,y) = (1/2)IFFT[(p[m,n]-p[-m,-n])+ i(q[m,n]+q[-m,-n])]
という関係が成り立つ。(従って、g=0となることが分かっている撮影シーケンスの場合(大抵そうです)には、0≦mの部分だけしか測定しないことによって撮影時間を半減することも可能。)

● 1次元IFFT(周期M)に喰わせる複素データの列をa[0], a[1], ..., a[M-1]とすると、a[0]は直流成分、a[1]とa[M-1]が周期Mのsin波形、a[2]とa[M-2]が周期M/2のsin波形…の振幅と位相を決める係数です。周期の区切りが0~M-1になってる訳です。
 一方、K空間の方は区切りが-N~Nになっている。FFT(IFFT)はデータが周期Mを持つことを前提にしていますから、
s(m,n)=s(m+jM,n+kM) (j,kは任意の整数)
が成り立つものと考えます。従って、
s(M-m,M-n)= s(-m,-n)
s(M-m,n)= s(-m,n)
s(m,M-n)= s(m,-n)
です。言い換えると、添え字はmodulo Mで0~M-1に書き換えてやる、ということです。

 じゃ本題。N=127、M=256の場合を考えると、s(128,n)(n=-N+1~N-1)やs(m,128)(m=-N+1~N-1)のデータが存在しないからナントカする必要がある。さて、これらは一体何かというと、最も高い周波数の空間周波数成分、つまり画像上で言えば周期2のsin波形(いろんな方向の波がありますが)の振幅と位相を表している。でもその成分については(そして、それより高い空間周波数の成分についても)測定しなかった。
 
 ならば、そんな成分は画像にも存在すべきでないだろう、というわけで、ここんとこには0を詰める。と考えるのが普通でしょう。
 ところがですね、被写体がシャープでコントラストの大きい輪郭を持っていたりすると、s(127,n)やs(m,127)やs(129,n)やs(m,129)の絶対値が無視できない大きさになる[ANo.4の「両端点」の話です]。すると、0を詰めたことでK空間のs(128,n)やs(m,128)の箇所に鋭い段差が生じます。このような段差は画像上では周期2のsin波形のさざ波(ringing)として現れる。特に、被写体の輪郭に沿って波紋のようなartifactが生じます。
 いや、実は話は逆で、そういう被写体を撮影する以上、正確な画像を作りたかったらもっと高い周波数までMRIで測定すべきなのに、測ってない訳です。

 で、そのringing現象をどう考るか。
「高い空間周波数成分を持つ被写体を撮影したのに、高い周波数については測ってないんだからringingはしょうがない。単に0を詰めとけ。」という「正論」の他に、
「いや、被写体に実在していないringingが出るのはまずい。元来、高い空間周波数成分を持つ被写体を撮影したのに、高い周波数については測ってないんだから、ぼけた画像しか得られないのが当然だ。だからs(127,n)がほぼ0になるようにK空間のサンプルに平滑化フィルタ(|n|と|m|が小さいときはほぼ1で、|n|や|m|がNに近い時には0になるような滑らかな実数値関数h(m,n))をかけ算しろ。」も実に尤もな話だし、
「確かにringingは困るが、せっかく127の所まで測ったんだからぼかさないでなんとか活かそうよ。少々嘘をつくことになるが、たとえばs(128,n)の値はs(127,n)とs(129,n)の平均値で代用すれば段差は生じない。」という考え方もある。
 ここんとこの判断は、「何を撮影して、結果の画像をどう使うつもりなのか」にも依るでしょう。そういうことまで考えて、いろんな処方について利害得失を検討するのが、ですから、この課題の真髄かと思います。

> MRI画像再構成についての課題です。

 なるほど、それなら話は通じます。実務じゃないんですね。

 周波数空間(いわゆるK空間)の中に、直流成分(空間周波数(0,0))を中心として、等間隔の格子点(n,m) (-N<n<N, -N<m<N)における複素数のサンプル値s(m,n) = p(m,n)+iq(m,n)が与えられている(p,qは実数)。これを複素逆フーリエ変換して画像を作るためにFFTを使う。

> コンピュータのサンプリングは奇数個でなければならない

 これはおかしい。奇数個でなければならないなんてことはないし、N-1まで...続きを読む

QExcelで4096点以上のFFTの方法

Excelでは4096点までのFFTしかできませんが、4096点以上のFFTをかける方法(VB?)をご存知の方いらっしゃいましたらお教えください。

Aベストアンサー

下記などご参考まで。プログラムをそのまま公開されています。
http://tsuyu.cocolog-nifty.com/blog/2007/03/publi.html


#プログラムの始めのn=の行とDimの行の数字を適切に修正して使います。

QFFT・PSDの縦軸は何を意味するのでしょう?

加速度計測の結果について、PSD(パワースペクトラムデンシティ)をかけた場合、その縦軸の意味を教えてください。
また、FFTとPSDはどういう違いが有るのでしょうか?
これまでは、周波数の分布のみに着目していました。
どなたか、わかりやすく教えてください。
よろしくお願いします。

Aベストアンサー

一般に加速度センサー信号の出力は電圧です。

縦軸は係数をかけていない状態では#1さんがおっしゃるように計測した電圧の値を示しています。

よって、縦軸に物理的な意味を持たせるのには、電圧と加速度の間の換算係数をかけてやる必要があります。

フーリエ解析は時刻歴波形は正弦波の組み合わせで構成されるという仮定の下で計算を行っています。FFTの結果は横軸で示される周波数の正弦波の振幅を示しています。
電圧と加速度の換算係数をかけてやると、FFTの縦軸はその周波数成分を持つ加速度振幅を示しています。

ここで1つ問題があります。FFTはサンプリング周波数により分解能が変わります。FFTによる周波数分析は正確にいうと、離散値なので、ジャストの周波数のもをだけを表しているのではなく、ある範囲の周波数範囲にある成分を表しています。
このため分解能が変わると周波数範囲が変わり、同じ波形を分析しても振幅が変わります。
これでは分解能が異なるデータ同士は比較できないなどの問題が生じます。
そのため、周波数幅で振幅を基準化して、1Hzあたりの振幅としたものがPSDです。
PSDならサンプリング周波数が異なるデータ同士の比較ができます。

要はフーリエ振幅(FFT)はサンプリング周波数・分解能により変わる値であり、PSDはそのようなことのないように周波数幅で基準化した値という差があります。

なお、2乗表示したものをパワースペクトルと呼び、それを周波数で基準化したものをPSDと呼びますが、PSDは表示方法によって2乗した状態のあたいを表示(パワー表示)するときと、2乗した値の平方根を計算して表示することがありますので、使用する際には縦軸の表示方法については要注意です。

一般に加速度センサー信号の出力は電圧です。

縦軸は係数をかけていない状態では#1さんがおっしゃるように計測した電圧の値を示しています。

よって、縦軸に物理的な意味を持たせるのには、電圧と加速度の間の換算係数をかけてやる必要があります。

フーリエ解析は時刻歴波形は正弦波の組み合わせで構成されるという仮定の下で計算を行っています。FFTの結果は横軸で示される周波数の正弦波の振幅を示しています。
電圧と加速度の換算係数をかけてやると、FFTの縦軸はその周波数成分を持つ加速...続きを読む

Qフーリエ変換について教えてください

フーリエ変換をすると横軸が時間から周波数になるのはわかったのですが、縦軸が何になるのかわかりません。

一般的に縦軸はなにになるのでしょうか?

また横軸が時間で、縦軸が距離をフーリエ変換したら縦軸は何になるのでしょうか?

よろしくお願いします。

Aベストアンサー

時間関数をフーリエ変換すると結果は、その時間関数の周波数成分が
得られます。スペクトルとも言います。従って、縦軸は、周波数成分です。一般に複素数です。
大きさと偏角による表現もできます。
大きさの方は振幅特性、位相角の方は位相特性と呼ばれます。
画像のように空間座標の上の関数の場合には、フーリエ変換すると
空間周波数成分が得られます。横軸は、空間周波数(2次元)となります。
対象とする関数により結果はそれぞれ意味が異なります。
「一般に何になる」とは言えません。

>横軸が時間で縦軸が距離の場合・・・
フーリエ変換の結果は、距離を表す時間関数の周波数成分です。

フーリエ変換の対象の関数は別に時間関数でなければならないということは
ありません。従って、フーリエ変換の結果は適用する人が解釈(定義)すれば
よいと思います。
たとえば、
時間関数をフーリエ変換し、その結果の絶対値の対数のフーリエ変換を
することもあります。これの結果には、発明者らがケプストラムという名前
をつけています。Cepstrum は Spectrum から作った造語です。

時間関数をフーリエ変換すると結果は、その時間関数の周波数成分が
得られます。スペクトルとも言います。従って、縦軸は、周波数成分です。一般に複素数です。
大きさと偏角による表現もできます。
大きさの方は振幅特性、位相角の方は位相特性と呼ばれます。
画像のように空間座標の上の関数の場合には、フーリエ変換すると
空間周波数成分が得られます。横軸は、空間周波数(2次元)となります。
対象とする関数により結果はそれぞれ意味が異なります。
「一般に何になる」とは言えません。

>横軸が...続きを読む

QFFTとパワースペクトルの違いについて教えてください。

FFTとパワースペクトルの違いについて教えてください。
勉強不足で申し訳ありません。よろしくお願いします。

Aベストアンサー

信号をFFTで出したスペクトルというのは、
単にある信号をフーリエ展開した係数をプロットしたものに過ぎません。
ですので、位相によっては値がプラスにもマイナスにもなることがあります。

これに対してパワースペクトルというのは、信ある信号について
ある周波数における信号強度そのものをプロットしたものです。
ですので、位相にかかわらずかならず値がプラスになります。

確かFFTスペクトルを2乗したものがパワースペクトルになったと思います。
間違ってるかもしれないので、一応教科書も調べてみてください。

Q周波数解析をエクセルツール『フーリエ解析』で実施したいのですが・・

周波数解析をエクセルツール『フーリエ解析』で実施したいのですが・・
時刻歴を持った波形をエクセルのフーリエ解析にかけたところ以下のような結果が出ました。

時刻(s)波形(風速)(フーリエ結果)
0 0 4964.547892
0.01 0.016148 162.934386092482+757.485796541738i
0.02 0.024223 -176.671853947744+679.108499109482i
0.03 0.032297 -38.1198577747876+304.999881074942i
0.04 0.040371 -33.7184553866481+283.069540754i
0.05 0.047921 67.2878230094194+268.189434427773i
0.06 0.055471 -5.3340068659851+181.755877831686i
0.07 0.063021 43.7700366445313+188.325607658826i
0.08 0.070571 95.1628904739282+115.524911946043i
0.09 0.078121 79.1610244918527+286.809861194846i
0.1 0.084849 -20.9326884388047+207.486443103952i
0.11 0.091578 -10.0874722910491+176.517532576085i

この場合の結果をパワースペクトル密度にしたいのですが,
一番上が定常分で,事項以降が ωt,2ωt,・・・nωtということに
なって,それぞれの実部^2+虚部^2の平方がスペクトルになると思いますが
これを横軸周波数のおなじみのグラフにするには横軸の周波数はどのよう
に考えればいいのでしょうか。
(たとえば2ωtの項の場合の周波数はいくらになる?)
また,風速のパワースペクトルの単位はどのようになるでしょう。
基本的な質問だと思います。とても恥ずかしいのですが,ご教授いただけますか。
もしかすると根本的な間違いをしている気もします・・

周波数解析をエクセルツール『フーリエ解析』で実施したいのですが・・
時刻歴を持った波形をエクセルのフーリエ解析にかけたところ以下のような結果が出ました。

時刻(s)波形(風速)(フーリエ結果)
0 0 4964.547892
0.01 0.016148 162.934386092482+757.485796541738i
0.02 0.024223 -176.671853947744+679.108499109482i
0.03 0.032297 -38.1198577747876+304.999881074942i
0.04 0.040371 -33.7184553866481+283.069540754i
0.05 0.047921 67.2878230094194+268.189434427773i
0.06 0.055471 ...続きを読む

Aベストアンサー

> これを横軸周波数のおなじみのグラフにするには横軸の周波数はどのように考えればいいのでしょうか。

例えば、256点のデータをエクセルで「フーリエ解析」したとします。結果も256点(#0~#255とします)出てきます。ただし、パワースペクトル(複素数の実部^2+虚部^2)にすると、#1~#127と#255~#129は対称形になっていますから、実際には129点の結果になります。
さて周波数ですが、この#1は

 元のデータ256点の中に、ちょうど1周期現れる周波数

に相当します。サンプリングの定理から、最大周波数は、256点の中に128周期の波で、周期は2点毎の波になります(#128)。

具体的に、例えばデータ間隔が1秒で全256点の場合、#1の周波数は1/256Hz、#2の周波数は1/128Hzになります。

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

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

Aベストアンサー

「時系列の中央部分がゼロに近い」の「中央部分」とは、「IFFTをしたときに得られる、t=0からt=周期までサンプル値を並べた配列の中央付近」ってことですね。周波数空間で応答関数を表現したものが滑らかであればそうなる。応答関数もそれをIFFTしたものも、持っている情報量は同じなので、こりゃしょうがないです。補間をしないで(半分の点数で)IFFTして得られるのは時系列のエリアス(つまり、時系列を周期の整数倍だけ時間軸上でずらしたものを全部の整数について合計したものの一周期分)であって、それ以上のことは情報がないから分からない。
 もしも何か別の拘束条件があるのなら、一応、手がない訳ではありません。すなわち、拘束条件によって時系列関数としてあり得る関数が絞られるから、その中から解を探すんです。しかしこの手(「超解像」という)は誤差に極めて敏感で不安定であり、だから応答関数の精度が非常に良いと保証できる場合でない限り使えません。(10時間掛けて計算するぐらいだから、そんな保証はタブンできないでしょう。)拘束条件がないのなら、せいぜい例えば「FFTしてサンプルを間引いたときに応答関数に一致するような時系列のうちで、ノルムが最小であるもの」を「一例として」構成してみせるぐらいが関の山です。

 なお、もしもご質問が「時系列のうち、後端ならともかくヨリニヨッテ中央部分が抜けるのが困る(「後端部分はどうせゼロに近い」とアプリオリに分かっていて、だからIFFTでドンナ値が出ようと誤差に過ぎないと考えて利用しない)」という話であるのなら、それは時間軸の原点の位置がまずいだけかも知れません。すなわち、ひょっとすると「応答関数を細かく計算するとギザギザしていて、それを1点おきに間引いてから補間したためにギザギザが失われ、IFFTすると時系列が時間軸上で周期/2だけずれて現れる」という現象なのではないか。
 どういうことかと言いますと、ある滑らかな応答関数をIFFTして得た時系列(中央部分がほとんど0)を考え、その時系列を時間軸上で周期/2だけ平行移動したとします。それをFFTして得られる応答関数はギザギザに振動していてでも1点おきに間引くと元の滑らかな応答関数の格好になる(。で、これを10時間掛けて計算したのだとしましょう)。この、間引いた物(滑らかな応答関数)を普通のヤリカタで補間して得られるものも当然滑らかであり、これをIFFTすると、最初の時系列(中央部分がほとんど0)、つまり時間軸上で周期/2だけずらす前の物に(ほぼ)戻ってしまう。
 もしそういうことが起こっているのだとすると、計算なさった時系列の後端部分はゴミなんかじゃなく、それを前端部分の前にくっつけたものこそが時系列の本来の姿ということになります。

 またしても滑ってるかも知れませんが…

「時系列の中央部分がゼロに近い」の「中央部分」とは、「IFFTをしたときに得られる、t=0からt=周期までサンプル値を並べた配列の中央付近」ってことですね。周波数空間で応答関数を表現したものが滑らかであればそうなる。応答関数もそれをIFFTしたものも、持っている情報量は同じなので、こりゃしょうがないです。補間をしないで(半分の点数で)IFFTして得られるのは時系列のエリアス(つまり、時系列を周期の整数倍だけ時間軸上でずらしたものを全部の整数について合計したものの一周期分)であって、それ以上...続きを読む

Qフーリエスペクトルの振幅について

ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの
振幅値について教えて下さい。

今想定している離散フーリエ変換の式は一般的なもので
Σ(k=0~N-1) f(k)exp(-2πkni/N)
を考えています。
また、離散フーリエ変換して得られるスペクトルは
√(Re^2+Im^2)
で計算します。

離散フーリエ変換を適用する関数を、
振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。
(この2つの信号は別々の信号で合成されていません。)
サンプリング周波数を20[Hz]とした場合、
サンプリングして得られるデータ列はそれぞれ、
直流: 「1, 1, 1, 1」
正弦波: 「0, 1, 0, -1」
となると想定されます。
(正弦波をサンプリングする場合は位相が関わってきますが、
今回は気にしないで下さい。)

このデータ列に対して上記の離散フーリエ変換を適用した場合、
得られるフーリエスペクトルの振幅値はそれぞれ、
直流: 「4」(直流のフーリエスペクトルの振幅値値)
正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値)
となります。
(データ点数は上の通り4点)

ここで質問なのですが、
離散フーリエ変換して得られるスペクトルの振幅値から
元の関数の振幅値を求める場合、
フーリエスペクトルをサンプリングの総データ点数で割ることは
数学的に納得できます。
しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、
直流: 「4 -> 1」
正弦波: 「2 -> 0.5」
となってしまい、直流は正しいのですが、
正弦波の元の振幅値を正確に求めることは出来ません。
フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、
「フーリエスペクトルの振幅値*2/データ点数」
としてやらなければいけません。

上記のことに関して、
なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。

ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの
振幅値について教えて下さい。

今想定している離散フーリエ変換の式は一般的なもので
Σ(k=0~N-1) f(k)exp(-2πkni/N)
を考えています。
また、離散フーリエ変換して得られるスペクトルは
√(Re^2+Im^2)
で計算します。

離散フーリエ変換を適用する関数を、
振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。
(この2つの信号は別々の信号で合成されていません。)
サンプリング周波数を20[Hz]とした場合、
サンプリングし...続きを読む

Aベストアンサー

離散フーリエ変換というのは、実質離散フーリエ級数展開なので、
フーリエ級数展開を考えます。

f(t) = a0/2 + Σ[n=1→∞] { an cos (nωt) + bn sin (nωt) }

f(t)の周期をTとして、ω=2π/Tです。

直流成分の振幅といっているのはこの第1項a0/2のことで、
サイン成分の振幅はbnのことです。

問題文の離散フーリエ変換の式

>Σ(k=0~N-1) f(k)exp(-2πkni/N)

は複素フーリエ級数展開なのでオイラーの公式

cos nωt = [e^{inωt}+e^{-inωt}]/2
sin nωt = [e^{inωt}-e^{-inωt}]/2i = = -i [e^{inωt}-e^{-inωt}]/2

を使って書き直すと、

f(t) = a0/2 + Σ[n=1→∞] { ([an -i bn]/2) e^{nωt} + ([an +i bn]/2) e^{-inωt} }

an = a(-n), bn = -b(-n)の関係があるので、

cn = ([an -i bn]/2), c(-n) = ([an +i bn]/2)

と置くことができ、a0/2をc0と定義し直せば、

f(t) = Σ[n=-∞→∞] cn e^{nωt}

したがって、複素フーリエ係数が求めているのはcn = (an-ibn)/2で、その実数部はan/2、虚数部は-bn/2です。

こうなる理由は、サイン、コサインのときは正の整数だったnを複素数で取り扱うときにマイナス側に拡張したことで、同じ係数が+側と-側にわかれたためです。

離散的な場合は和が-N/2~N/2の範囲の有限項で打ち切られ、
-N/2~0の範囲が一周期ずらされてN/2~Nになっています。

離散フーリエ変換というのは、実質離散フーリエ級数展開なので、
フーリエ級数展開を考えます。

f(t) = a0/2 + Σ[n=1→∞] { an cos (nωt) + bn sin (nωt) }

f(t)の周期をTとして、ω=2π/Tです。

直流成分の振幅といっているのはこの第1項a0/2のことで、
サイン成分の振幅はbnのことです。

問題文の離散フーリエ変換の式

>Σ(k=0~N-1) f(k)exp(-2πkni/N)

は複素フーリエ級数展開なのでオイラーの公式

cos nωt = [e^{inωt}+e^{-inωt}]/2
sin nωt = [e^{inωt}-e^{-inωt}]/2i = = -i [e^{inωt}...続きを読む

Qexcelでのフーリエ変換の意味

EXCELである離散データに分析ツールでフーリエ変換をかけると、データ個数の半分の値を中心とした左右対称のスペクトルが現れます。
右半分のデータは不要とどこかのHPに書いていましたが、何故不要で、何故左右対称で現れるのでしょうか?
また、同じ周期のデータ(T=1000sec)をデータ数を変えてフーリエ変換すると何故ピークの現れる周波数やピーク値が変わるのでしょうか?
ピーク値が表す意味もわかりませんが、どのくらいのピークが現れるとこのデータは周期的な成分を持っていると言えるのでしょうか?
フーリエ変換について理解する前に質問してしまっていますが、全く理解できない為、このような質問になってしまい、申し訳ありません。

Aベストアンサー

>膨大なデータからどのデータが周期的なデータを含んでいるかを判断したいので何か指標とできる値があれば

というのであれば,例えば,すべてのデータのパワーみたいなもの(単純には2乗和)と,ピークが出た周波数のパワーの比(複数ピークがある場合はパワーの和)を取れば,どれが,周期性を強く持っているか議論できるのではないでしょうか.

もう少し,最初の質問内容を工夫すれば,(補足で書かれたような内容にすれば)一度の回答ですむのではないかと思います.

Qパワースペクトルとは?

パワースペクトルについて説明してくださいと先生に言われました。
全くわからない人に説明するので端的にわかりやすく説明したいのですが誰かできる人はいませんか?ちなみにぼくも詳しいことは全然わかりません。
本などを見ても式があったりしてそれをまた理解することが出来ません。
なんかイメージがわくような方法はないですかね?

Aベストアンサー

スペクトルとは、独立な成分それぞれについての強さをグラフにしたものです。
光の場合、光の種類を色で分類する事ができます。光といっても、その中に青はどれくらい、オレンジはどれくらいとそれぞれの色に応じて強さがあります。
光をそれぞれに分ける方法は、たとえばプリズムがあって、光をプリズムに通すといろいろな色にわかれてみえます。

ニュートンはプリズムを使った実験で有名です。一つ目のプリズムで光を分光し、赤と青の光を残して他の光を遮り、赤と青を二つ目のプリズムやレンズで一つにまとめました。その後でもう一度プリズムを通すと、いったんまとめたのにやはり赤と青しかでてこないのです。これから光の色の独立性(赤や青は、混ざらないものとして独立に扱って良い、ということ)がわかります。

このように色にはそれぞれを別々に扱ってもよいので、色ごとに物事を考えると分かりやすくなります。この色ごとについての強度を「光のスペクトル」、といいます。
強度はふつう「時間当たりに光りが運ぶエネルギー」(パワー)で表すので、この時は「パワースペクトル」です。

こんなふうに物事を自然な「成分(光の時は色)」にわけて考えた物がスペクトルです。詳しくは座標とフーリエ成分の関係について(フーリエ変換について)勉強するといいと思います(電磁場の実空間の振動とフーリエ空間上での振動の対応として)。

スペクトルとは、独立な成分それぞれについての強さをグラフにしたものです。
光の場合、光の種類を色で分類する事ができます。光といっても、その中に青はどれくらい、オレンジはどれくらいとそれぞれの色に応じて強さがあります。
光をそれぞれに分ける方法は、たとえばプリズムがあって、光をプリズムに通すといろいろな色にわかれてみえます。

ニュートンはプリズムを使った実験で有名です。一つ目のプリズムで光を分光し、赤と青の光を残して他の光を遮り、赤と青を二つ目のプリズムやレンズで一つにま...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング