How to isolate two variables, Vout and Vin to obtain transfer function

Hi this is my following code:
syms Vg Vin Vout Rs ro Rd CGS CGD CDB CL s gm;
eq1 = ((Vg-Vin)/Rs) + Vg*s*CGS + (Vg-Vout)*s*CGD == 0;
eq2 = gm*Vg + Vout/Rd + Vout/ro + Vout*s*CDB + Vout*s*CL + s*CGD*(Vout-Vg) == 0;
solVg = solve(eq2,Vg);
eq3 = ((solVg-Vin)/Rs) + solVg*s*CGS + (solVg-Vout)*s*CGD == 0;
So at this point, I have Vg in terms of, Vout and Vin. I'm having difficulty isolating the two variables, Vout and Vin to have the following transfer function: Vout/Vin.

 Accepted Answer

You need to solve for ‘Vout’ first, then divide that expression by ‘Vin’:
Vout = solve(eq3, Vout);
H = Vout/Vin
[Hn, Hd] = numden(H);
Hn = collect(Hn, s)
Hd = collect(Hd, s)
with ‘H’ being your transfer function, ‘Hn’ is the numerator, ‘Hd’ the denominator:
H =
-1/(Rs*(CGD*s*((CDB*s + CGD*s + CL*s + 1/Rd + 1/ro)/(gm - CGD*s) + 1) + (CDB*s + CGD*s + CL*s + 1/Rd + 1/ro)/(Rs*(gm - CGD*s)) + (CGS*s*(CDB*s + CGD*s + CL*s + 1/Rd + 1/ro))/(gm - CGD*s)))
Hn =
(CGD*Rd*ro)*s - Rd*gm*ro
Hd =
(CDB*CGD*Rd*Rs*ro + CDB*CGS*Rd*Rs*ro + CGD*CGS*Rd*Rs*ro + CGD*CL*Rd*Rs*ro + CGS*CL*Rd*Rs*ro)*s^2 + (CGD*Rd*Rs + CGS*Rd*Rs + CDB*Rd*ro + CGD*Rd*ro + CL*Rd*ro + CGD*Rs*ro + CGS*Rs*ro + CGD*Rd*Rs*gm*ro)*s + Rd + ro

2 Comments

My pleasure!
I use the Symbolic Math Toolbox extensively in circuit design and analysis.

Sign in to comment.

More Answers (1)

solVin = solve(eq3, Vin);
Vin_over_Vout = simplify( expand( SolVin/Vout ) );

2 Comments

Opps, yes, I did Vin/Vout instead of Vout/Vin, but you can use
Vout_over_Vin = simplify( expand( Vout/SolVin ) );

Sign in to comment.

Categories

Find more on MATLAB in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!