clear; load('nmos_ac.ldev'); switchtolayout; setnamed('CHARGE','log start frequency',1e9); setnamed('CHARGE','log stop frequency',6e9); setnamed('CHARGE','num frequency points per dec',80); select("CHARGE::boundary conditions::gate"); set('bc mode','steady state'); set('sweep type','range'); set('range start',0); set('range stop',2.5); set('range interval',0.25); set('apply ac small signal','all'); select("CHARGE::boundary conditions::drain"); set('bc mode','steady state'); set('sweep type','single'); set('voltage',5); set('apply ac small signal','last'); run; dc_gate_data = getresult('CHARGE','gate'); Vg = dc_gate_data.V_gate; NV = length(Vg); ac_gate_data = getresult('CHARGE','ac_gate'); f = ac_gate_data.f; Nf = length(f); Ig = pinch(ac_gate_data.dI); Ig = pinch(Ig(1:NV,2,1:Nf)); f = ac_gate_data.f; ac_drain_data = getresult('CHARGE','ac_drain'); Id = pinch(ac_drain_data.dI); Id = pinch(Id(1:NV,2,1:Nf)); I_gain = Id/Ig; fT = matrix(NV,1); for (i = 1:NV) { kern = find(abs(I_gain(i,1:Nf))<=1); fT(i) = f(kern(1)); } plot(Vg,fT*1e-9,'Vg (V)','fT (GHz)'); matlabsave('nmos_fT',Vg,fT);