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

17 次查看(过去 30 天)
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.

采纳的回答

Star Strider
Star Strider 2016-11-22
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

更多回答(1 个)

Walter Roberson
Walter Roberson 2016-11-21
solVin = solve(eq3, Vin);
Vin_over_Vout = simplify( expand( SolVin/Vout ) );

类别

Help CenterFile Exchange 中查找有关 Optimization 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by