ギターのトーン回路のシミュレーションはLTspiceを使っていますが、もちろんSimscape Electricalを使ってもできます。
シミュレーション結果は同じなので結果についての記述はしません。
やっている内容はSimulinkモデルの周波数応答を取得するで行っていることと同様です。
トーンの抵抗値をスイープするのにMATLABスクリプトを使っています。
ボード線図を描画させるのはlinmodコマンドを使っています。
%% ギタートーン回路シミュレーション
%
%% モデルの読み込み
modelName = "GtToneCircuit";
if ~bdIsLoaded(modelName)
open(modelName);
end
%% ピックアップ周辺の等価回路定数
R_PU = 6.5e3; % pick up resistance
L_PU = 2.5; % pick up inductance
C_PU = 100e-12; % pick up capacitance
%% トーン・ボリュームの抵抗値
R_T0 = 250e3; % [ohm] トーンの抵抗値
R_V = 250e3; % [ohm] ボリュームの抵抗値
C_T = 0.047e-6; % [ohm] トーンのキャパシター値
%% ボリュームの大きさ(0~10の範囲)
Volume = 10;
%% 周波数解析の準備
toneGrid0 = 0:1:10; % トーンの抵抗値の刻み ここでは0~10をステップ1で11分割
toneGrid = flip(toneGrid0); % 10→0の順に解析 (単なる好み)
numGrid = numel(toneGrid);
a = cell(2, numGrid); % linmodは4つの値を返すので、それぞれのセル配列を確保しておく
b = cell(2, numGrid);
c = cell(2, numGrid);
d = cell(2, numGrid);
%% 実際に周波数解析を実行する
for ii = 1:numGrid
Tone = toneGrid(ii);
R_T = Tone / 10 * R_T0;
[a{1,ii}, b{1, ii}, c{1, ii}, d{1, ii}] = linmod(modelName);
[a{2,ii}, b{2, ii}, c{2, ii}, d{2, ii}] = minreal(a{1,ii}, b{1, ii}, c{1, ii}, d{1, ii});
end
%% まずはボード線図を描画する
fig_h = figure(1);
for ii = 1:numGrid
bode(a{2,ii}, b{2, ii}, c{2, ii}, d{2, ii})
if ii == 1
hold on
end
end
hold off
%xlim([20 20e3] * (2 * pi))
%% 横軸をrad/sec→Hzに変換するためにグラフからデータを抽出する
ax = fig_h.Children(3);
h = findobj(ax, 'Type', 'line');
f_data = cell(1, numGrid);
for ii = 1:numGrid
f_data{ii}.x = h(ii+1).XData / (2 * pi);
f_data{ii}.y = h(ii+1).YData;
end
%% 横軸を周波数にしてプロットしなおす
figure
for ii = 1:numGrid
semilogx(f_data{ii}.x, f_data{ii}.y)
if ii == 1
hold on
end
end
hold off
xlim([10 20e3])
ylim([-20 10])
xlabel("Frequency [Hz]")
ylabel("Gain [dB]")
ax = gca;
ax.FontName = "Arial";
ax.FontSize = 14;