正弦波をEuler法で近似積分した結果の周波数スペクトラム

はじめに

物理系をディジタル計算機で制御するにあたり、積分をEuler法で近似することがある。本記事では正弦波をEuler法で近似的に積分した際の出力の窓関数付きFourier変換を導出し、高周波領域での位相変化、エイリアシングについて考察する。

arg maxarg min\providecommandrecterf\providecommand\providecommand\providecommandPr

導出

f0>0とし、連続時間の複素正弦波信号u:tRexp(i2πf0t)を考える。これを時刻0からt0まで積分した信号はv(t)=(exp(i2πf0t)1)/(i2πf0)である。「0次ホールド機構の周波数特性」と同様に、矩形窓を通した、周波数表示されたvのFourier変換を考える(窓の幅をサンプリング周期の整数倍に限っても影響が少ないことの説明は「0次ホールド機構の周波数特性」で述べられている)。NNとし、窓の幅をT=NTsとする。vの窓付きFourier変換を窓の幅で規格化したものは次式である。但し計算は容易なので過程は省略した。

=V(f)=1T0Tv(t)exp(i2πft)dt=1i2πf0T{1i2π(ff0)[1exp(i2π(ff0)T)]+1i2πf(exp(i2πfT)1)}

次に、uの積分をサンプリング周期Ts>0のEuler法で近似したものを考える。Euler法で積分した結果の離散時間信号をxdd:ZCとすると、これは漸化式xdd(n)=xdd(n1)+Tsu((n1)Ts)に従う。但し初期条件としてxdd(0)=0とする。この漸化式を解き、次式を得る。

xdd(n)=Ts1exp(i2πf0nTs)1exp(i2πf0Ts)

これを0次ホールドして得られる連続時間信号をxd(t):=xdd(t/TsTs)とする。先ほどvに対して行ったのと同様に窓付きFourier変換Xdを計算すると、次式を得る。但し計算は容易なので過程の多くを省略した。

=Xd(f)=1T0Txd(t)exp(i2πft)dt=k=0N11TkTs(k+1)Tsxd(t)exp(i2πft)dt=1i2πfN×1exp(i2πfTs)1exp(i2πf0Ts){1exp(i2πfTsN)1exp(i2πfTs)1exp(i2π(ff0)TsN)1exp(i2π(ff0)Ts)}

v中の、周波数がf0である成分の振幅と位相を調べる。ff0の極限に関して次式が成り立つ。

limff0V(f)=1i2πf0[1+exp(i2πf0T)1i2πf0T]

次にxd中の、周波数がf0である成分の振幅と位相を調べる。但し、f0Ts<1と仮定する。次式が成り立つ。

limff0Xd(f)=1i2πf0N×1exp(i2πf0Ts)1exp(i2πf0Ts){1exp(i2πf0TsN)1exp(i2πf0Ts)N}

サンプリング周波数が十分高い、すなわちf0Ts1であるとき、次の近似式が成り立つ。

limff0Xd(f)1i2πf0N×(1)[1exp(i2πf0TsN)i2πf0TsN]=1i2πf0[1+exp(i2πf0TsN)1i2πf0TsN]=1i2πf0[1+exp(i2πf0T)1i2πf0T]=limff0V(f)

数値例

今、f0=10,Ts=102,N=200とする。f=f0に於けるvの振幅と位相の組は(1/(20π),π/2)(1.59×102,1.57)である。一方、xdの振幅と位相の組はおよそ(1.59×102,2.20)である。

次の図はf0近傍でのエネルギー・スペクトラム密度V,Xdを示したものである。

元の周波数近傍のエネルギー・スペクトラム密度

低周波領域では絶対値が良く一致していることがわかる。

次に高調波を見る。次の図はサンプリング周波数の3倍の範囲までV,Xdを示したものである。

高調波を含むエネルギー・スペクトラム密度

低周波の領域ではV,Xdが重なって判別できない。また、サンプリング周波数の整数倍の位置に高調波が生じていることが判る。

以上の数値例を計算したMathematicaノートブックをここで公開している。

投稿者: motchy

DSP and FPGA engineer working on measuring instrument.

コメントを残す