再現分です。

 

前回は 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 の時にどんな波形になっているかというと、

確かに総和がゼロになってしまっています。

元々の波形だったらこうだったので、総和はゼロにはなりません。

さて、どうしましょうか。
長くなってしまったので次回回しです。

 

にほんブログ村 ← にほんブログ村「科学」-「技術・工学」へ
 ↑ クリックをお願いします。