ギターのトーン回路のシミュレーション: Simscapeを使う

ギターのトーン回路のシミュレーションは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;

Adsense広告