フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2009-9-28 13:49 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3084 |
【64】直流、正弦波、余弦波のFourier変換 次ぎの問題は直流1、正弦波、余弦波のそれぞれのFourier変換を求めよというもの。
直流1のFourier変換は y(t)=1 のFourier変換であるので F(ω)=∫y(t)*exp(-jωt)dt =∫1*exp(-jωt)dt =∫exp(-jωt)dt =∫(cos(ωt)-j*sin(ωt))dt =∫cos(ωt)dt-j*∫sin(ωt)dt どうすんだこれ? 落ち着け落ち着くんだ。 よく眺めればω=0の時 F(0)=∫cos(0)dt-j*∫sin(0)dt =∫dt =∞ (ω=0) ということに気づくべきだった。 一方ω≠0の場合は F(ω)=∫cos(ωt)dt-j*∫sin(ωt)dt =0 (ω≠0) ということになる。 すなわちω=0の時のみ∞でそれ以外のωでは0となる。 しかしこれではFourier逆変換で矛盾をきたす。 どうすんだこれ? Riemann積分でもLebesgue積分でもたった1点で∞をとる関数の積分は0である。 そこで登場するのがDiracのデルタ関数という都合の良い超関数。 δ(t)=∞ (t=0) =0 (t≠0) ∫δ(t)dt=1 という性質をもつ超関数をデルタ関数と定義する。 すると先の直流1のFourier変換を F(ω)=2π*δ(ω) =2π (ω=0) =0 (ω≠0) とするとそのFourier逆変換は y(t)=(1/2π)∫F(ω)*exp(jωt)dω =(1/2π)∫2π*δ(ω)*exp(jωt)dω =∫δ(ω)*exp(jωt)dω =exp(0) =1 ということになり矛盾が解消する。 今度は正弦波sin(ω0t)のFourier変換は F(ω)=∫y(t)*exp(-jωt)dt =∫sin(ω0t)*exp(-jωt)dt =∫sin(ω0t)*(cos(ωt)-j*sin(ωt))dt =∫sin(ω0t)*cos(ωt)dt-j*∫sin(ω0t)*sin(ωt)dt =∫(sin(ω0+ω)/2+sin(ω0-ω)/2)dt-j*∫(cos(ω0-ω)/2-cos(ω0+ω)/2)dt =-j*∫(cos(ω0-ω)/2-cos(ω0+ω)/2)dt ここでω=ω0の場合 F(ω0)=-j*∫(cos(0)/2-cos(2ω0)/2)dt =-j*∫(1/2)dt =-j*∞ (ω=ω0) またω=-ω0の場合 F(-ω0)=-j*∫(cos(2ω0)/2-cos(0)/2)dt =-j*∫(-1/2)dt =j*∞ (ω=-ω0) 上記以外のωでは F(ω)=-j*∫(cos(ω0-ω)/2-cos(ω0+ω)/2)dt =0 (ω≠ω0, ω≠-ω0) ということになる。 同様にFourier逆変換が y(t)=(1/2π)∫F(ω)*exp(jωt)dω =sin(ω0t) とならねばならないので、デルタ関数を使用してF(ω)を以下のように定義する F(ω)=j*π*(δ(ω0+ω)-δ(ω0-ω)) =-j*∞ (ω=ω0) =j*∞ (ω=-ω0) =0 (ω≠ω0, ω≠-ω0) するとFourier逆変換は y(t)=(1/2π)∫F(ω)*exp(jωt)dω =(1/2π)∫(j*π*(δ(ω0+ω)-δ(ω0-ω))*exp(jωt)dω =(1/2)∫j*(δ(ω0+ω)-δ(ω0-ω))*exp(jωt)dω =(1/2)∫j*δ(ω0+ω)*exp(jωt)dω-(1/2)∫j*δ(ω0-ω)*exp(jωt)dω =(1/2)*j*exp(-jω0t)-(1/2)*j*exp(jω0t) =(1/2)*j*(cos(ω0t)-j*sin(ω0t))-(1/2)*j*(cos(ω0t)+j*sin(ω0t)) =sin(ω0t) となり矛盾しない。 同様に余弦波cos(ω0t)のFourier変換も F(ω)=∫y(t)*exp(-jωt)dt =∫cos(ω0t)*exp(-jωt)dt =∫cos(ω0t)*(cos(ωt)-j*sin(ωt))dt =∫(cos(ω0t)*cos(ωt)-j*cos(ω0t)*sin(ωt))dt =∫(cos((ω0-ω)t)/2+cos((ω0+ω)t)/2)dt-j*∫(sin((ω0+ω)t)/2-sin((ω0-ω)t)/2)dt 従ってω=ω0の場合 F(ω0)=∫(cos(0)/2+cos(2ω0t)/2)dt-j*∫(sin(2ω0t)/2-sin(0)/2)dt =∫(1/2)dt =∞ またω=-ω0の場合 F(-ω0)=∫(cos(2ω0t)/2+cos(0)/2)dt-j*∫(sin(0)/2-sin(2ω0t)/2)dt =∫(1/2)dt =∞ ということになる。 Fourier逆変換が y(t)=(1/2π)∫F(ω)*exp(jωt)dω =cos(ω0t) となるようにF(ω)を以下の様に定義すると F(ω)=π(δ(ω0+ω)+δ(ω0-ω)) =∞ (ω=ω0) =∞ (ω=-ω0) =0 (ω≠ω0, ω≠-ω0) Fourier逆変換は y(t)=(1/2π)∫F(ω)*exp(jωt)dω =(1/2π)∫π(δ(ω0+ω)+δ(ω0-ω))*exp(jωt)dω =(1/2)∫δ(ω0+ω)*exp(jωt)dω+(1/2)∫δ(ω0-ω)*exp(jωt)dω =(1/2)*exp(-jω0t)+(1/2)*exp(jω0t) =(1/2)*(cos(ω0t)-j*sin(ω0t))+(1/2)*(cos(ω0t)+j*sin(ω0t)) =cos(ω0t) となり矛盾しない。 著者はいきなりデルタ関数を使ってFourier変換結果を持ち込んでいるが、これは予め答えを知っていないとできない。デルタ関数という特殊な数式上だけ存在する超関数を導入するという数式トリックを使って初めて説明が付く。では誰が最初にこのトリックを思いついたのかというとどうやら量子物理学者のDiracらしい。デルタ関数に代表される超関数を数学的に体系だてたのは数学者のL. Schwartzである。デルタ関数を導出する方法がいくつかあるがそれは以降の問題として出てくる。 P.S 直流や正弦波交流をFourier変換するとどんなに入力信号が小さくてもスペクトルの大きさは無限大になってしまう。実際にスペクトルアナライザとかで測定するとそうはならない。これは二乗平均(RMS)値であるため積分が行われることによる。そうすると元の信号のレベルに応じた値が現れることになるからではないだろうか。デジタル信号処理などの離散Fourier変換では出力が複素スペクトル値となるため、場合によっては表現できる範囲を計算結果が超えてしまう可能性があると思われる。DSPなどではこうした積和演算時のオーバーフロー時には結果が最大値にロックされるような機構が備わっているので、汎用のCPUでの演算時のようにwrap aroundしてしまって小さな値になってしまうとかいうことは無いようになっている。またわざわざ演算後にオーバーフローしたかチェックして正の最大値に置き換えるという処理をしなくても良いようになっている。 |
フラット表示 | 前のトピック | 次のトピック |
投稿するにはまず登録を | |