mcpField
M
matlab-integrate-pcb-circuit

matlab-integrate-pcb-circuit

github.com/matlabその他1.2k78 回インストール1 日前に更新
リポジトリ

matlab-integrate-pcb-circuit について

RF PCB コンポーネントを MATLAB の回路に組み込み、相互接続を解析するためのスキルです。ポートのカスケード、集中定数素子の接続、S パラメーターの出力に加え、アンテナアレイやシグナルインテグリティ解析との連携も扱います。

主な機能

  1. 01`pcbcascade` による PCB コンポーネントのカスケード
  2. 02`pcbElement` による RF 回路への統合
  3. 03内部ポートへの集中定数素子の接続
  4. 04Touchstone S パラメーターの計算と出力
  5. 05アンテナアレイおよびシグナルインテグリティ解析との連携

活用シーン

  1. 01複数のフィルターや伝送線路段を接続
  2. 02PCB 構造のポートにコンデンサーや抵抗を接続
  3. 03計算した S パラメーターを別のシミュレーションで利用
  4. 04PCB 給電ネットワークとアンテナアレイを統合

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-integrate-pcb-circuit

インストール後、Claude Code で/matlab-integrate-pcb-circuitを入力して読み込まれたか確認します。

同梱ファイルmanifest.yaml

詳細

RF PCB コンポーネントのカスケード接続と統合

使用する場面

  • pcbcascade を使って、2つ以上の PCB コンポーネントを端から端へカスケード接続する
  • pcbElement を使って PCB コンポーネントを RF Toolbox の回路素子としてラップする
  • 集中定数素子(バラクター、終端器)で内部ポートを負荷する
  • rfwrite を使って S パラメーターを Touchstone ファイルにエクスポートする
  • RF PCB の給電ネットワークをアンテナアレイと統合する
  • アイダイアグラム解析のために Signal Integrity Toolbox と連携する

使用しない場面

  • 個別のフィルター、カプラー、伝送線路を設計する場合 — 各設計スキルを使用してください
  • PCB ジオメトリをゼロから構築する場合 — matlab-assemble-pcb-layout を使用してください
  • 単一コンポーネントの EM 解析を実行する場合 — matlab-analyze-em を使用してください
  • 材料を設定する場合 — matlab-manage-pcb-material を使用してください

標準的なワークフロー

  1. 事前: 設計スキル(matlab-design-pcb-filter、matlab-design-pcb-coupler など)または matlab-analyze-em — 個別コンポーネントを作成して検証します
  2. このスキル: コンポーネントをカスケード接続し、集中定数素子を追加し、Touchstone にエクスポートして、アイダイアグラム解析と連携します
  3. 事後: matlab-write-pcb-layout — 最終設計を Gerber にエクスポートします。または、S パラメーターを Signal Integrity Toolbox のワークフローに渡します

クイックリファレンス

タスクコード
2つのコンポーネントをカスケード接続out = pcbcascade(comp1, comp2)
長方形基板でカスケード接続out = pcbcascade(comp1, comp2, 'RectangularBoard', true)
対話形式でカスケード接続pcbcascade(comp1, comp2, 'Interactive', true)
回路素子を作成elem = pcbElement(comp)
解析ポートを設定elem.AnalysisPorts = {1, 2}
集中定数素子を接続elem.PortNumber = {3, 4}; elem.PortValue = {capacitor(2.2e-12), resistor(50)}
RF 回路に追加add(ckt, [1 2 0 0], elem)
Touchstone にエクスポートrfwrite(sp, 'comp.s2p')
オプションを指定してエクスポートrfwrite(sp, 'comp.s2p', FrequencyUnit='GHz', Format='DB')

pcbcascade — コンポーネントを端から端へ接続

pcbcascade 関数は、2つの RF PCB コンポーネントをポート間で接続し、全波解析用の単一の pcbComponent を生成します。

基本的なカスケード接続
HPF = filterStub;
HPF.StubShort = [1 1 1 1 1];
HPF.Height = 0.508e-3;
% ... set HPF properties ...

LPF = filterStepImpedanceLowPass;
LPF.Height = 0.508e-3;
LPF = design(LPF, 7e9);

BPF = pcbcascade(LPF, HPF, "RectangularBoard", true);
show(BPF);
カスケード接続の解析
freq = linspace(1e6, 12e9, 51);
sp = sparameters(BPF, freq, 'SweepOption', 'interp');
rfplot(sp);
RectangularBoard オプション
値動作
trueカスケード接続したレイアウトの周囲に長方形の誘電体基板を作成します
false(デフォルト)コンポーネントのジオメトリから得られる自然な基板形状を使用します
対話形式のカスケード接続モード

ポートを視覚的に位置合わせする場合:

pcbcascade(comp1, comp2, 'Interactive', true);

ポートを視覚的に接続し、間隔を調整できる GUI が起動します。

多段カスケード接続

順番にカスケード接続することで、2つを超えるコンポーネントを連結できます:

stage1 = design(filterStepImpedanceLowPass, 5e9);
stage2 = design(microstripLine, 5e9);
stage3 = design(filterStepImpedanceLowPass, 5e9);

% Match substrates — design() defaults differ across object types
stage2.Substrate = stage1.Substrate;
stage2.Height = stage1.Height;
stage2.Conductor = stage1.Conductor;
stage3.Substrate = stage1.Substrate;
stage3.Height = stage1.Height;
stage3.Conductor = stage1.Conductor;

% Cascade stage1 + stage2, then result + stage3
intermediate = pcbcascade(stage1, stage2, 'RectangularBoard', true);
final = pcbcascade(intermediate, stage3, 'RectangularBoard', true);
show(final);
カスケード接続の要件
  • 両方のコンポーネントが同じ基板(Height、Substrate)を共有している必要があります
  • 接続部分ではポートの線幅を一致させてください
  • コンポーネントはポートの端で接続されます(comp1 のポート 2 と comp2 のポート 1)

pcbElement — RF Toolbox 回路との統合

pcbElement は RF PCB コンポーネントを、RF Toolbox の circuit フレームワークで使用できる回路素子としてラップします。これにより、分布定数と集中定数を組み合わせたハイブリッドモデリングが可能になります。

基本的な使い方
comp = design(couplerBranchline, 5e9);
elem = pcbElement(pcbComponent(comp));
S = sparameters(elem, linspace(3e9, 7e9, 51), 'SweepOption', 'interp');
rfplot(S);
ビヘイビアモードと全波モード
% Behavioral model (fast, uses analytic approximation)
elem = pcbElement(comp, 'Behavioral', true);

% Full-wave solve (accurate, uses MoM)
elem = pcbElement(comp, 'Behavioral', false);

すべてのコンポーネントがビヘイビアモードをサポートしているわけではありません。サポートされていない場合は警告が出され、全波モードが自動的に使用されます。

pcbElement を回路に追加
ckt = circuit;
c1 = interdigitalCapacitor;
c2 = interdigitalCapacitor('NumFingers', 3);
p = pcbElement(c2, 'Behavioral', false);
add(ckt, [1 2 0 0], c1);    % Default pcbElement created automatically
add(ckt, [2 3 0 0], p);
setports(ckt, [1 0], [3 0]);
S = sparameters(ckt, 8e9);

内部ポートを使った分布定数と集中定数のハイブリッドモデリング

pcbElement の最も強力な用途は、集中定数コンポーネント(コンデンサー、抵抗器、インダクター)を EM 構造の内部ポートに接続することです。これにより、バラクターを使った可変フィルター、負荷付き共振器、バイアス T ネットワークをモデリングできます。

概念
  1. PCB 上に追加の FeedLocations を内部ポートのペアとして定義します
  2. pcbElement でラップします
  3. AnalysisPorts(S パラメーター抽出用の外部 I/O ポート)を割り当てます
  4. PortNumber(負荷を接続する内部ポートのインデックス)を割り当てます
  5. PortValue(各ポートに接続する集中定数素子)を割り当てます
パターン:終端器付き負荷カプラー
% Start with a 4-port coupler
comp = design(couplerRatrace, 5e9);
pcb = pcbComponent(comp);

% Create pcbElement
elem = pcbElement(pcb);

% Ports 1,2 are external I/O (for S-parameter extraction)
elem.AnalysisPorts = {1, 2};

% Ports 3,4 are loaded with lumped elements
elem.PortNumber = {3, 4};
elem.PortValue = {resistor(50), resistor(50)};

% Analyze the 2-port network with internal loads
S = sparameters(elem, linspace(3e9, 7e9, 51), 'SweepOption', 'interp');
rfplot(S);
パターン:バラクターを使った可変フィルター
% Design a filter with extra internal feed points for varactors
pcb = pcbComponent;
% ... build custom filter geometry with internal feed pads ...
% FeedLocations rows 1,2 = external I/O
% FeedLocations rows 3,4 and 5,6 = varactor pads (internal port pairs)

pcb.FeedLocations = [x1 y1 1 3;    % Port 1: input
                     x2 y2 1 3;    % Port 2: output
                     x3 y3 1 3;    % Port 3: varactor pad A+
                     x4 y4 1 3;    % Port 4: varactor pad A-
                     x5 y5 1 3;    % Port 5: varactor pad B+
                     x6 y6 1 3];   % Port 6: varactor pad B-

elem = pcbElement(pcb);
elem.AnalysisPorts = {1, 2};
elem.PortNumber = {{3,4}, {5,6}};
elem.PortValue = {capacitor(2.2e-12), capacitor(2.2e-12)};

S = sparameters(elem, linspace(1e9, 10e9, 51), 'SweepOption', 'interp');
rfplot(S);
サポートされている PortValue の型
型例
resistorresistor(50)
capacitorcapacitor(2.2e-12)
inductorinductor(1e-9)
S パラメータファイル'component.s2p'
PortNumber の形式
% Single-port loads (each port terminated individually)
elem.PortNumber = {3, 4};
elem.PortValue = {resistor(50), resistor(50)};

% Port-pair loads (2-port element connected across a pair)
elem.PortNumber = {{3,4}, {5,6}};
elem.PortValue = {capacitor(2.2e-12), nport('varactor.s2p')};

アンテナの統合

RF PCB フィードネットワークを Antenna Toolbox のアレイと統合します。

コーポレート分配器+パッチアレイ
% Design corporate power divider
pdc = powerDividerCorporate;
pdc = design(pdc, 5e9);
pdc.NumOutputPorts = 4;
pdc.PortSpacing = physconst('lightspeed') / 5e9;

% Design patch antenna
ant = patchMicrostripInsetfed;
ant.Substrate = dielectric('Teflon');
ant = design(ant, 5e9);

% Convert to pcbStack for shape extraction
pcbant = pcbStack(ant);
TopLayer = pcbant.Layers{1};

% Create linear array of patches
for i = 2:4
    a = copy(TopLayer);
    a = translate(a, [0, pdc.PortSpacing*(i-1), 0]);
    TopLayer = TopLayer + a;
end

% Merge divider and antenna array into single pcbStack
pcbcomp = pcbComponent(pdc);
pcbant1 = pcbStack;
pcbant1.BoardShape = pcbcomp.BoardShape;
pcbant1.BoardThickness = pcbcomp.BoardThickness;
pcbant1.Layers = pcbcomp.Layers;
pcbant1.FeedDiameter = pcbcomp.FeedDiameter;
pcbant1.FeedLocations = pcbcomp.FeedLocations(1,:);  % Keep only input port

% Combine top layers
pcbant1.Layers{1} = pcbant1.Layers{1} + TopLayer;
show(pcbant1);

pcb2D の断面とクロストーク

pcb2D の断面解析、trace2D のセットアップ、RLGC の抽出、slice()、および結合トレース間のクロストークについては、matlab-design-pcb-transmission-line を参照してください。

S パラメータの Touchstone ファイルへのエクスポート

rfwrite を使用すると、計算した S パラメータを Touchstone ファイルとして保存し、他のツールやシミュレーションで再利用できます。

基本的なエクスポート
sp = sparameters(pcbComponent, freq, 'SweepOption', 'interp');
rfwrite(sp, 'component.s2p');
rfwrite のオプション
オプション値説明
FrequencyUnit'Hz'、'kHz'、'MHz'、'GHz'周波数列の単位
Parameter'S'、'Y'、'Z'ネットワークパラメータの型
Format'MA'、'DB'、'RI'振幅-角度、dB-角度、実数-虚数
ReferenceResistanceスカラー(既定値 50)オーム単位の基準インピーダンス
rfwrite(sp, 'filter_2p4GHz.s2p', FrequencyUnit='GHz', Format='DB');
Touchstone を nport として読み込む
n = nport('component.s2p');
% Use in any RF Toolbox circuit
add(ckt, [1 2], n);

ファイル拡張子(.s2p、.s4p など)は、ポート数に基づいて rfwrite が自動的に選択します。

高度な統合パターン

Nolen マトリックスによるビームフォーミング

Nolen マトリックスは、ブランチラインカプラーと移相器をカスケード接続して、N×N のビームフォーミングネットワークを構成します。個々の RF PCB コンポーネントをカスケード接続して構築します。

coupler = design(couplerBranchline, fc);
ps = design(phaseShifter, fc, PhaseShift=90);
% Extract S-parameters for each, then cascade via circuit()
ckt = circuit;
add(ckt, [1 2 3 4], nport(sparameters(coupler, freq, 'SweepOption', 'interp')));
add(ckt, [3 5], nport(sparameters(ps, freq, 'SweepOption', 'interp')));
% ... build full N×N matrix
モノパルスコンパレーター

X バンドのモノパルスコンパレーターは、4 つのラットレースカプラーを使用して和ビームと差ビームを生成します。

rr = design(couplerRatrace, fc);
S_rr = sparameters(rr, freq, 'SweepOption', 'interp');
% Build 4-coupler comparator network using circuit()
アンプの整合ネットワーク

マイクロストリップのティー分岐とスタブを使用して入力/出力整合ネットワークを作成し、アンプの S パラメータとカスケード接続します。

% Build matching network as pcbComponent
tee = traceTee(Length=[L1, L2], Width=[W1, W2]);
pcb = pcbComponent(tee);
pcb.Substrate = dielectric("FR4");
S_match = sparameters(pcb, freq, 'SweepOption', 'interp');

% Load amplifier S-parameters and cascade
amp = nport('amplifier.s2p');
ckt = circuit;
add(ckt, [1 2 0 0], nport(S_match));     % Input match
add(ckt, [2 3 0 0], amp);                 % Amplifier
add(ckt, [3 4 0 0], nport(S_match));     % Output match
setports(ckt, [1 0], [4 0]);
S_total = sparameters(ckt, freq);
Parallel Link Designer による FEXT/NEXT

pcb2D の全波 EM 結果を Signal Integrity Toolbox にエクスポートすると、システムレベルの解析に利用できます。

cs = pcb2D;
% ... configure traces, substrate
[r, l, g, c] = rlgc(cs, freq);
% Export to Parallel Link Designer for eye diagram analysis

S パラメータ接続公式による最適化

ギャップを埋めたり内部ポートに負荷を接続したりする最適な集中定数素子を探す場合、候補値ごとに EM を再計算するのは非常に時間がかかります。代わりに、N ポートの S 行列を一度抽出し、S パラメータネットワークの計算を使って素子値を解析的にスイープします。

パターン:一度抽出して解析的にスイープ
% 1. Build 4-port structure (2 external + 2 internal ports at the gap)
pcb = pcbComponent;
% ... set up geometry with 4 feeds ...
freq = linspace(9e9, 11e9, 101);
S4 = sparameters(pcb, freq, 50, 'SweepOption', 'interp');  % Solve once

% 2. Partition the 4-port S-matrix into external (1,2) and internal (3,4)
S = S4.Parameters;
S11 = S(1:2, 1:2, :);  S12 = S(1:2, 3:4, :);
S21 = S(3:4, 1:2, :);  S22 = S(3:4, 3:4, :);

% 3. Sweep element impedance analytically (no EM re-solve)
Z0 = 50;
Zvals = linspace(1, 500, 1000);  % Candidate impedances
bestS11 = 0;  bestZ = NaN;

for k = 1:numel(Zvals)
    Gamma_L = (Zvals(k) - Z0) / (Zvals(k) + Z0);
    GammaM = Gamma_L * eye(2);
    % S-parameter connection: S_ext = S11 + S12*GammaM*inv(I - S22*GammaM)*S21
    for fi = 1:size(S,3)
        Sext = S11(:,:,fi) + S12(:,:,fi) * GammaM / ...
            (eye(2) - S22(:,:,fi) * GammaM) * S21(:,:,fi);
        s11_dB = 20*log10(abs(Sext(1,1)));
        if s11_dB < bestS11
            bestS11 = s11_dB;  bestZ = Zvals(k);
        end
    end
end
使用する場面
シナリオアプローチ
R/L/C 値をスイープして探索N ポートを一度抽出し、解析的にスイープ
少数の離散的な素子候補pcbElement と PortValue を使用(その都度再計算)
最適値の最終検証選択した値を指定して pcbElement を使用し、全波解析で確認

この手法は、反復ごとに EM を再計算する場合より桁違いに高速です。Task 8 では、1000 個のインピーダンス値を数秒でスイープしました。EM の再計算では数時間かかります。

注意点

  1. pcbcascadeの基板の一致:両方のコンポーネントで、Substrate、Height、Conductorを同一にする必要があります。design()では、オブジェクトの種類によって異なる既定値が使われます(例:filterStepImpedanceLowPassの既定値はカスタム誘電体ですが、microstripLineの既定値はテフロンです)。pcbcascadeを呼び出す前に、必ず一方のコンポーネントの基板プロパティをもう一方にコピーしてください。

  2. ポート幅の一致:カスケード接続する場合、comp1の出力ポートのポート線幅をcomp2の入力ポートのポート線幅に一致させてください。幅が一致しないと、実際には存在しないインピーダンスの不連続が生じます。

  3. pcbElementのポート順序:AnalysisPortsのインデックスは、FeedLocationsで定義されたフィードのインデックスのサブセットである必要があります。AnalysisPortsのポート1は、FeedLocationsの最初の行に対応します。

  4. PortNumberとAnalysisPorts:PortNumberに指定されたポートには集中定数素子が接続されるため、外部解析ポートとしては使用できません。同じポートインデックスをAnalysisPortsとPortNumberの両方に含めないでください。

  5. 動作モードの利用可否:すべてのカタログオブジェクトがBehavioral=trueに対応しているわけではありません。動作モデルは高速な近似モデルです。最終的な設計検証にはBehavioral=falseを使用してください。

  6. コーポレート分配器とアンテナの組み立て:+で形状を結合する場合は、物理的に重なるか、接触していることを確認してください。形状が離れていると、接続されていない形状になり、正しくシミュレーションできません。

  7. filterStubではdesign()を使用しない:filterStubはdesign()に対応していません。スタブの寸法は手動で設定してください。

  8. pcbElementのBehavioralの既定値はtrue:カタログオブジェクトをラップする場合、Behavioralの既定値はtrue(高速な解析モデル)です。全波解析の精度を得るには、Behavioral=falseを明示的に設定してください。

  9. カスケード接続後のポート番号の振り直し:pcbcascade(comp1, comp2, portA, portB)は、comp1:portAをcomp2:portBに接続します。この2つのポートは消失します。残りのポートには番号が振り直されます。まずcomp1の残りのポート(元の順序で、portAを除く)、次にcomp2の残りのポート(portBを除く)の順になります。例:comp1のポートが[1,2]、comp2のポートが[1,2,3]の場合、pcbcascade(comp1, comp2, 2, 1)で得られる結合後のポートは[comp1:1, comp2:2, comp2:3]です。必ずshow(combined)で確認してください。

  10. アンテナのカスケード接続におけるグランドプレーンの連続性:既定では、pcbcascadeはグランドプレーンを統合しません。連続したグランドプレーンを得るには'GroundFloodFill', trueを使用してください。これはマイクロストリップ給電アンテナに不可欠です:pcbcascade(feed, ant, 2, 1, 'GroundFloodFill', true)。

  11. SIの周波数サンプリング:広帯域SIチャネルでは、少なくとも400個の周波数点を使用してください。周波数点が少なすぎると、時間領域変換(アイダイアグラム)でアーティファクトが発生します。

  12. pcbcascadeは集中定数素子を受け付けない:pcbcascadeが接続できるのはpcbComponentオブジェクトのみです。PCBコンポーネントと集中定数のresistor/capacitor/inductor素子を組み合わせるには、circuit()オブジェクトを使用してください。PCBコンポーネントをpcbElementでラップし、ノード接続を指定してpcbElementと集中定数素子の両方をcircuitにadd()し、setports()を設定します。例:

pe = pcbElement(comp); pe.Name = 'txline';
C = capacitor(100e-12); C.Name = 'Cblock';
R = resistor(50); R.Name = 'Rterm';
ckt = circuit('modified');
add(ckt, [1 2], C);        % Series DC block
add(ckt, [2 3], pe);       % PCB element
add(ckt, [3 0], R);        % Shunt termination
setports(ckt, [1 0], [3 0]);
S = sparameters(ckt, freq);

関連スキル

  • matlab-design-pcb-filter — カスケード接続用のフィルターオブジェクト
  • matlab-design-pcb-coupler — カスケード接続用のカプラー/スプリッターオブジェクト
  • matlab-assemble-pcb-layout — pcbComponentを使用したカスタム形状
  • matlab-analyze-em — Sパラメーターの抽出と電界解析

著作権 2026 The MathWorks, Inc.

コメント