LTspice:「今度はなかなかレベルが上がらないな」
画蔵:「ミスったし、色々試すのは良いことだ」

今度はのこぎり波を見てみます。
フーリエ級数は以下のように表されます。

ということでスクリプトは以下のようになって、信号のところだけが変わっています。

clear

N=2000
t=0:1/N:1-1/N
p_shift=int(0/100*N) // 位相をずらす量をパーセントで記入
fig_axis=[0,1,-1.5,1.5]

Saw(1:N)=[-N/2+0.5:1:N/2-0.5]/N*2

if p_shift<>0 then

    Signal(1:p_shift)=Saw(N-p_shift+1:N)
    Signal(p_shift+1:N)=Saw(1:N-p_shift)

else
    Signal=Saw
end
scf(10);clf;plot(t,Signal)
mtlb_axis(fig_axis)

fmax=20

for f1=1:fmax
    x=sin(2*%pi*t*f1) // 正弦波
    y=cos(2*%pi*t*f1) // 余弦波
    
    combo_sin=x.*Signal
    combo_cos=y.*Signal
    
    sin_level(1,f1)=sum(combo_sin)./N*2
    cos_level(1,f1)=sum(combo_cos)./N*2
    level(1,f1)=((sin_level(f1))^2+(cos_level(f1))^2)^0.5

end


ft_axis=[0,fmax,-1.5,1.5]
scf(20);clf;plot(1:fmax,level,1:fmax,sin_level,1:fmax,cos_level)
mtlb_axis(ft_axis)

前回位相=ゼロはサポートしていない、と書きましたがサポートしていました。

波形はこうで、

スペクトラムはこうなります。

これで一周期分なの?と思うかも知れませんがこれが繰り返されます。
で、元の数式を見ても分かるように、整数倍の周波数の合成であることが分かります。
周期成分の振幅は 2 /π なので、0.637 でだいたい合っています。

位相をちょっとずらしてみましょう。前と同じ 20% = 72 deg です。

波形はこうで、

スペクトラムはこうなりました。

正弦波成分と余弦波成分はバラバラになりますが、絶対値を取ると結果は同じです。

他にも色々な波形を試してみるといいと思います。
ただし、このプロセスが正しいという保証はありませんのでご注意下さい。

LTspice:「自信がない?」
画蔵:「大丈夫だとは思うが、オイラーの公式に対して正弦波と余弦波が逆になる理由が分からない」
scilab:「でも一応 Level 3 はクリアですか?」
画蔵:「そういうことにしておこう」

 

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