How to isolate two variables, Vout and Vin to obtain transfer function
11 views (last 30 days)
Show older comments
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.
0 Comments
Accepted Answer
Star Strider
on 22 Nov 2016
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
Star Strider
on 22 Nov 2016
My pleasure!
I use the Symbolic Math Toolbox extensively in circuit design and analysis.
More Answers (1)
Walter Roberson
on 21 Nov 2016
solVin = solve(eq3, Vin);
Vin_over_Vout = simplify( expand( SolVin/Vout ) );
2 Comments
Walter Roberson
on 22 Nov 2016
Opps, yes, I did Vin/Vout instead of Vout/Vin, but you can use
Vout_over_Vin = simplify( expand( Vout/SolVin ) );
See Also
Categories
Find more on Optimization 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!