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 はクリアですか?」
画蔵:「そういうことにしておこう」