• 締切済み
  • すぐに回答を!

離散フーリエ変換のスペクトルについて

関数f(x)=2sin(πx)をx=0~2まで等間隔1000点でサンプリングし、 離散フーリエ変換 Σ(k=0~N-1) f(k)exp(-2πkni/N) の式から、言語プログラムで計算する式をつくり、1000個の実数Reと虚数Imを得ました。 ピークはもちろん周波数πのときで、スペクトルの値が1000でした。 √(Re^2+Im^2)をスペクトル値、√なしをパワースペクトル値をいうそうですが、元の関数の振幅2とこのスペクトル値とはどのような関係があるのでしょうか? 異なる正弦波を混ぜれば、スペクトル値を見ることによって振幅の比は分かりますが、スペクトル値と振幅には式的になんらかの関係は存在するのでしょうか?  波のエネルギーは振幅の2乗になると思い、2^2=4がスペクトル値としてでる事を期待していましたが途方もなく異なる値が出てしまいました。 どうぞよろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数1265
  • ありがとう数4

みんなの回答

  • 回答No.3
  • Tacosan
  • ベストアンサー率23% (3656/15482)

#2 です. はい, 1000 はスペクトルの大きさで, N は点数です. DFT の基本をきちんとおさえておけばいいんだけど, 自分でも思い出しながら書いてみる: ω = exp (2πi/N) とおきます. ω は 1 の原始 N 乗根です. 今考えている関数だと f(k) = 2 sin(2πk/N) = 2(ω^k - ω^(-k)) / (2i) = -i (ω^k - ω^(-k)) です... あ, 離散フーリエ変換の式中の f(k) は 2 sin (2πk/N) ですよね? f(x) = 2 sin πx をそのまま使っていないですよね? すると, exp (-2πink/N) = ω^(-nk) ですから Σ (k=0~N-1) f(k) exp (-2πink/N) = Σ (k=0~N-1) -i (ω^k - ω^(-k)) ω^(-nk) = Σ (k=0~N-1) -i ω^(1-n)k + Σ (k=0~N-1) i ω^(-(1+n)k)) となりますが, 第1項は 1 - n ≡ 0 mod N のときにのみ 0 でない値となり, 一方第2項は -(1+n) ≡ 0 mod N のときにのみ 0 でない値となります. 順に考えると 1.1 - n ≡ 0 mod N のとき. このとき (0 ≦ n < N より) n = 1 です. そして和の値は 1 + ω^N + ω^(2N) + ... + ω^((N-1)N) = N となります. 1+n = 2 ですから第2項は 0. つまり n = 1 に対して -iN という値になります. 2.-(1+n) ≡ 0 mod N のとき. このとき n = N-1 で, 和の値は1と同じく N になります. 第1項は 0 になりますから, フーリエ変換の値として iN が得られます. 3.その他のとき. 第1項, 第2項ともに 0 なので 0. ということで, プログラムで得られた結果と一致します. 振幅の 2 は sin を複素表示したときに分母にある 2 と相殺されていることに注意してください.

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 お忙しい中、丁寧な解説ありがとうございます。 完璧とまではいきませんが、良く理解することができました。

  • 回答No.2
  • Tacosan
  • ベストアンサー率23% (3656/15482)

え~, ちょっといろいろ書いてみたんですが, 逆変換を考えてみてください というアドバイスが最も簡単かつ適切かなぁ. ちなみに原信号の振幅を A とすると 1000 / N = A / 2 が成り立っています.

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 逆変換するとやはり元の実空間の数値に戻るようです。 考えてみましたら、実空間において関数の振幅の値は、場所によって異なりますから、スペクトル値は振幅の2乗となるからA(最大振幅のみ)^2がスペクトルとなるというのはおかしいかもしれませんね。すべての点における振幅の2乗がスペクトルとなるのかもしれません。 教えていただいた式の1000の部分はスペクトルの大きさ、Nがサンプリング数という理解でよろしいでしょうか??

  • 回答No.1
  • Meowth
  • ベストアンサー率35% (130/362)

離散フーリエ変換に関数f(x)=2sin(πx)をかければ、きれいに1つだけ ピークがでると思います。それにCOSの成分はほとんど0になっているはずです。 指数表示からSIN、COS表示に直して、それぞれの成分をみてください。 スペクトルの値が合わないということですので、ソフトが違っている可能性が 高いです。(データ入力ミスか、ソフト自体のバグか) 直接結果をみることができないので あくまで想像ですが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。おっしゃるようにピークがでているのは虚数部分の値で、実数部分(Re)はほとんどゼロです。プログラム自体は下記のサイトから転用したので、間違っている可能性は少ないかもしれません。 http://www.geocities.jp/supermisosan/spectrum.html サイトでも大きな値がスペクトル値として出ています。 振幅とスペクトルの関係をもう少し考えてみます。

関連するQ&A

  • ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値に

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(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]とした場合、 サンプリングして得られるデータ列はそれぞれ、 直流: 「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) という式から求められるとあります。 離散フーリエ変換は本来、ある周期関数が、どのくらいの振幅でどのくらいの周波数の波からできているかを調べるために行うものだと思います。 しかし上記の公式から得られるスペクトル(sqrt(Re^2+Im^2))では振幅の値は得られません。振幅を得るには刻み幅Δ(関数をサンプリングした際の幅)を乗じて Σ(k=0~N-1) f(k)exp(-2πkni/N)*Δ とすれば得られることが分かりました。 最初の公式から得られるスペクトルはなにを表しているのでしょうか?またなぜ刻み幅Δを乗じることで、振幅が求まるのでしょうか? よろしくお願いします。m(__)m

  • MATLABによるFFTと位相スペクトルについて

    純粋な正弦波信号 y=sin2πft ただし周波数f=500MHz をサンプリング周波数2.5GHz,サンプリング数128,256,512,1024の四パターンMATLABでFFTし、パワースペクトルと位相スペクトルを求めました。 結果、パワースペクトルは予想通り500MHzでピーク値をとったのですが、位相スペクトルは各サンプリング数ごとに全く違う値を取りました。 というわけで、 (1)理論上、正弦波の位相スペクトルはどのような値になるのか (2)なぜサンプリング数ごとに位相スペクトルの結果が大きく変わったのか この二点をご教授ください。よろしくおねがいします。

  • 離散フーリエ変換

    今、離散フーリエ変換の値が求まっています。 これから、振幅の値を出すのは、どうしたらいいのでしょうか? 自分で調べたところ、離散フーリエ変換の値に標本化関数のフーリエ変換をかけて、サンプリングの間隔で割ればいいのでは、と考えているのですが、標本化関数というものがよくわかりません。このやり方で良いのかもわかりません。 アドバイスお願いします。

  • 離散フーリエ変換(DFT)の公式について

    離散フーリエ変換の公式は、参考書等によりますと色々な記述があります。 今回は2例の違いを教えていただきたいのです。 1)F(u)=1/NΣf(x)・・・・ 2)F(u)=Σf(x)・・・・ との式があります(両式とも詳細は省いて記述しました)。この規格化定数(1/N)がある公式1)と、ない公式2)があります。 本来の周波数スペクトル(振幅)を表しているのは1)式であると考えていますが いかがでしょうか? 公式2)を使用して算出した場合には、その値をサンプリング数で除すれば公式1)同じ結果となるのですが、なぜ公式2)が記述してあるのでしょうか?

  • 離散フーリエ変換の対称定理について

    離散フーリエ変換において、 Re[X(k)]=Re[X(N-k)] Im[X(k)]=-Im[X(N-k)] |X(k)|=|X(N-k)| といった対称定理が成り立ちます。 数学的にこれらが成り立つということは、大体理解できたのですが、直感的な意味が分かりません。 僕の理解が正しいとしたら、N=128だとしたら、 N=1の極めて周期の大きな波と、N=127の極めて周期の短い波の、 振幅スペクトル(≒振幅?)が等しいということになると思うのですが、どうしても納得が行きません。 N>64の周波数をフィルターでカットした場合も、対称定理は成り立ち、N>64の周波数の波は出てくる(というか、カットしないと、エイリアシングが生じる)と思うのですが、どういうことなのでしょうか? N>64の周波数の波は、計算上は出てくるが、実際にはそのような波は存在しないのですか? あるいは、N>64の周波数同士の波で、上手く相殺されて、逆離散フーリエ変換をしたときには、影響が出ないということなのですか? また、通常のフーリエ変換では、対称定理は成り立たないと思うのですが、そのことも併せて教えて頂けたらと思います。 よろしくお願いします。

  • 離散フーリエ変換によるパワースペクトルについて

    研究で、閉ループ内の自然循環について調べています。 各箇所での温度変動の特徴を調べるために、ある一定時間の温度のデータをパソコンのフリーソフトで周波数解析(=DFT(離散フーリエ変換)計算)を行いパワースペクトルを得ました。 その評価の仕方は一応わかっているのですが、離散フーリエ変換についてまったく知識がないので、どのような計算でパワースペクトルが得られるのかわかりません…。 たとえば、計算は、サンプリング周期2sで1000sの温度変動のデータ(データ点500個)を用いて行い、横軸に周波数[Hz]、縦軸にパワースペクトル[℃の2乗/Hz]でグラフを出したって感じです。ちなみに作動流体は水です。 ウィキペディアなどで調べても、あれらがこの解析にどう利用されているのかがわかりません…上記の場合なら式はどうなるのかや、このような解析が行える理由等をわかりやすく示していただけないでしょうか? お願いします!

  • 正弦波のべき乗は,どんな物理現象を指すのか?

    正弦波のべき乗は,どんな物理現象を指すのか? こんにちは。 正弦波のべき乗の波形を人工的に作成し,パワースペクトルを求めると,基本周波数とその倍音成分のようなものが出てきました。 単なる数値実験に過ぎませんが,何かこのような振動を生み出すような物理現象が実際にありそうな気がします。 もし,このような波形を実際に観測したという方がいたら,教えてください。 参考までに,正弦波を5乗した波形とその振幅スペクトルを添付します。

  • フーリエ級数展開とスペクトルの問題

    こんにちは。 わからない問題があるので質問させてください。 問 次式のフーリエ級数展開係数を求め、 位相のずれの振幅スペクトル、位相スペクトル、パワースペクトルを求めよ。 1.f(t)=Acos(ω0t) 2.f(t)=cos(ω0t-φ) 自分で考えてみた結果は以下のとおりです。 [1について] フーリエ級数展開の式から、A1=A その他0なので、 振幅スペクトル|C1|=A/2 パワースペクトル|C1|^2=A^2/4 位相スペクトル∠C1=0 [2について] 加法定理より f(t)=cos(ω0t-φ)=cos(ω0t)cos(φ)+sin(ω0t)sin(φ) フーリエ級数展開の式から、A1=cos(φ) B1=sin(φ) その他0なので、 振幅スペクトル|C1|=1/2 パワースペクトル|C1|^2=1/4 位相スペクトル∠C1=arctan tan(φ) しかし、題意「位相のずれの~スペクトル」の意味がよくわかりません。 また、考え方もこれで良いのか自信がありません。 どなたかご指導よろしくおねがいします。