LTspice:「いつの間にかレベルが上がっているようだが?」
画蔵:「注目されるにはレベルをインフレにした方がいいかと」
scilab:「まだやっていることが地味ですだからね...」
画蔵:「そのうち面白そうなことになると思っているのだが」

ところで、もはや手元にないので確認は出来ませんが MATLAB もサンプリング数が 2 べき乗でない場合も受け付けてくれるようです。ヘルプを見た範囲ですが、他の場合だと遅くなると云うだけのようです。

Excel:「ということはその制限があるのは私だけ?」
画蔵:「そういうことになるな」
Excel:「・・・」

それらはさておき、今回も scilab の関数 fft を使って今までのことを確認していきます。
ランプ関数が中ボスだったということで正弦波との組み合わせを見てみます。

xdel(winsid()) //ウィンドをクリア
clear // Data をクリア

t_range=1 // 測定時間幅
N=2048 // サンプリング周波数

t=0:1/N:t_range-1/N // 時間内のサンプル数

fig_axis=[0,1,-2.0,2.0]
fs=10 // 正弦波の周波数

amp_sin=0.1 // 正弦波の振幅

Ramp(1:N*t_range)=[-(N*t_range)/2+0.5:1:(N*t_range)/2-0.5]/N*2 // ランプ関数

phi=100/N // 正弦波の位相
S_sin(1,1:N*t_range)=sin(2*%pi*(t+phi)*fs)*amp_sin // 本来の正弦波

    Signal=Ramp+S_sin

scf(10);clf;plot(t,Signal)
mtlb_axis(fig_axis)
title('Ramp and 10Hz signal','fontsize',4)
xlabel('Time(sec)','fontsize',3)
ylabel('Level','fontsize',3)

// ここまでで波形を発生

tic();
f_mix=fft(Signal) // 関数 fft を呼び出す。
M_mix=abs(f_mix)*2/N // 振幅を計算
disp(toc());

fmax=20
scf(11);clf;plot(0:N/2-1,M_mix(1:N/2))
ft_axis=[0,fmax,0,1.5]
mtlb_axis(ft_axis)
title('Frequency signal level','fontsize',4)
xlabel('Frequency(Hz)','fontsize',3)
ylabel('Level','fontsize',3)

結果はこうです。
イメージ 1
イメージ 2
正弦波の位相をずらしていますので、10Hz のところにスペクトラムは見えていますが、これは位相の運次第と前回片付けてしまっていたのでそれも確認しておきます。

スクリプトは省略しますが、

phi=100/N // 正弦波の位相

の 100 をいくつか振って計算してみます。0 = 0deg, 64 = 11.25deg, 128 = 22.5deg, 196 = 33.75deg, 256 = 45deg の要領です。
イメージ 3
イメージ 4

ということで、ランプ関数と正弦波が加算された状態でスペクトラム分析を行うと、正弦波の位相によって検出レベルが変わってしまうと云うことです。
ちなみに、振った範囲内では、0 deg の時がもっとも小さく(凹んでいて) 0.036422.5deg の時がもっとも大きくて 0.1523 ですからもともと振幅が 0.1 だったのに対して結構影響が大きいと云うことが分かります。

このランプ関数の悪行をどこまで抑えられるか前にもやりましたが、次回試してみようと思います。