再現分です。
前回は 1Hz(評価区間内に 1 周期の信号)のバンドパスフィルタを通したら、その周波数成分以外は出力がほぼゼロなことを確認しましたが、
LTspice:「 N = 1 ?」
画蔵:「手元ではいくつかやっている。その話題はあとで出てくると思う」
今回は複数の周波数成分を含む信号に対して、バンドパスフィルタというよりは重畳周波数を変化させて、それぞれの周波数でどんな振幅が得られるか、やってみることにします。
例として、1Hz の矩形波を使ってみます。
そもそも矩形波とは、ということで Wiki を挙げておきます。
https://ja.wikipedia.org/wiki/%E7%9F%A9%E5%BD%A2%E6%B3%A2
ここには以下の式が書いてあって、無限級数の和で表すことが出来るとされています。
で、式をよく見ると sin の中が奇数になっていることが分かります。同時に分母=振幅も奇数になっています。つまり、基本周期の奇数倍の周波数を含んでいて、それらの振幅はその奇数分の一になっているということです。全体の係数は 4 / πということです。
では前回と同様に今度は 1Hz、2Hz、3Hz...と正弦波の周波数を変化させていって、信号レベルを見てみます。
スクリプトはこれです。
clear
N=2000
t=0:1/N:1-1/N
fig_axis=[0,1,-1.5,1.5]
Rect(1,1:N/2)=1
Rect(1,N/2+1:N)=-1
// 矩形波の発生
scf(1);clf;plot(t,Rect)
mtlb_axis(fig_axis)
fmax=20
// 評価する最大の周波数
for i=1:fmax
x=sin(2*%pi*t*i)
combo_sin=x.*Rect
// 正弦波と矩形波の掛け算
sin_level(1,i)=sum(combo_sin)./N*2
// 総和を取って計算数で割る
end
scf(2);clf;bar(1:fmax,sin_level,0.1)
まず、矩形波の確認です。
区間内で、1 から -1 に変化します。
掛け算する周波数を変化させてそれぞれの周波数での総和です。
ちゃんと奇数のところにレベル=スペクトラムが出ています。基本周期のところでは、4 / π = 1.273 になっています。
あとは計算時間のことも考慮して、必要な周波数まで表示させればいいわけです。(fmax を設定)
完成しました。
LTspice:「ふ~ん、じゃあ入力の位相がずれていたらどうなる?」
画蔵:「え?」
LTspice:「こういうやつとか」
画蔵:「どれ」
Rect(1,1:N/4)=-1
Rect(1,N/4+1:N/2)=1
Rect(1,N/2+1:N*3/4)=1
Rect(1,N*3/4+1:N)=-1
// 矩形波の発生
で、上のスクリプトを書き換えてみたら、
あれ?何も出てきません。
たとえば、1Hz の時にどんな波形になっているかというと、
確かに総和がゼロになってしまっています。
元々の波形だったらこうだったので、総和はゼロにはなりません。
さて、どうしましょうか。
長くなってしまったので次回回しです。
← にほんブログ村「科学」-「技術・工学」へ
↑ クリックをお願いします。