列式子使用SFG/DPI方法,化简用到matlab。
%清除命令行和工作区的内容
clc;
clear;
%定义符号变量 (根据电路节点和电路里面的元器件设置)
syms R0 R1 R2 R3 vin vx vy vs vo gm2 gm3
%电路节点的输出阻抗
zx=1/(1/R1+1/R2+1/R3);
zy=1/(1/R1+gm2);
zs=1/(gm3+1/R0);
zo=R2;
%流入各个节点的电流x电路节点的输出阻抗得到下列式子,将需要化简的式子赋值给eqns
eqns=[
vx==(vin/R3+vy/R1+vo/R2)*zx,
vy==(vx/R1)*(zy),
vs==vy*gm3*zs,
vo==(vx/R2-(vy-vs)*gm3)*zo,
];
%将需要消除的变量赋值给vars
vars_1=[vx vy vs];
vars_2=[vx vo vs];
%使用eliminate函数将eqns中的vars包含的变量消除
solvo=eliminate(eqns,vars_1);
solvy=eliminate(eqns,vars_2);
% solvo的值是一个1x2的sym包含了两个式子, solvo(1)代表其中第一个式子。这一步将
% solvo(1)化成vy=...的形式, 方便后续实时脚本的使用。
vo_1=solve(solvo(1),vo)
vy_1=solve(solvy(1),vy)
%使用subs将数值代入符号
%vo_sub_1=subs(vo_1,[R0 R1 R2 R3 gm2 gm3],[800 2.4E3 7.2E3 3.28E3 300E-6 100E-6]);
%vy_sub_1=subs(vy_1,[R0 R1 R2 R3 gm2 gm3],[800 2.4E3 7.2E3 3.28E3 300E-6 100E-6]);
%转换成小数
%vo=vpa(vo_sub_1,4)
%vy=vpa(vy_sub_1,4)