(%i1) | load("/home/vcaeken/Desktop/rfMaxima.mac")$ |
Equivalent Input Noise Generators
See "Analysis and Design of Analog Integrated Circuits", 4th Ed.,
by P. R. Gray, P. J. Hurst, S. H. Lewis, R. G. Meyer, Wiley, 2001, p. 768-773
(%i2) |
declare([r_b,r_pi,C_pi,g_m,r_o],[constant,real,scalar])$ assume(r_b>0)$ assume(r_pi>0)$ assume(C_pi>0)$ assume(g_m>0)$ assume(r_o>0)$ |
1 ABCD Matrix
(%i8) |
Solution:linsolve([v_in-v_1=r_b*i_in,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_in=i_1+i_2,i_out=i_3+g_m*v_1,v_out=r_o*i_3],[i_in,i_out,i_1,i_2,i_3,v_1]); define(ABCD(s),Y2ABCD(Solution2Y(Solution))); |
2 r_b Contribution (|v_noise|^2=|v_b|^2=4*k*T*r_b*B)
(%i10) | NoiseSolutionInputShorted1:linsolve([v_noise-v_1=r_b*i_in,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_in=i_1+i_2,-i_out=i_3+g_m*v_1,v_out=r_o*i_3],[i_out,i_1,i_2,i_3,v_1,i_in]); |
(%i11) | NoiseSolutionInputOpened1:linsolve([v_in-v_1=r_b*i_noise,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_noise=i_1+i_2,-i_out=i_3+g_m*v_1,v_out=r_o*i_3],[i_out,i_1,i_2,i_3,v_1,v_in]); |
(%i12) | NoiseSolutionInputShorted2:linsolve([v_noise-v_1=r_b*i_in,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_in=i_1+i_2,-i_out=i_3+g_m*v_1,v_out=r_o*i_3],[v_out,i_1,i_2,i_3,v_1,i_in]); |
(%i13) | NoiseSolutionInputOpened2:linsolve([v_in-v_1=r_b*i_noise,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_noise=i_1+i_2,-i_out=i_3+g_m*v_1,v_out=r_o*i_3],[v_out,i_1,i_2,i_3,v_1,v_in]); |
(%i14) | NoiseVoltage2EquivalentInputNoiseVoltage(ABCD(s),NoiseSolutionInputShorted1); |
(%i15) | NoiseVoltage2EquivalentInputNoiseCurrent(ABCD(s),NoiseSolutionInputOpened1); |
(%i16) | NoiseVoltage2EquivalentInputNoiseVoltage(ABCD(s),NoiseSolutionInputShorted2); |
(%i17) | NoiseVoltage2EquivalentInputNoiseCurrent(ABCD(s),NoiseSolutionInputOpened2); |
3 i_b Contribution (|i_noise|^2=|i_b|^2=2*q*I_B*B+K_1*I_Ba/f*B)
(%i18) | NoiseSolutionInputShorted1:linsolve([-v_1=r_b*i_in,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_in=i_1+i_2+i_noise,-i_out=i_3+g_m*v_1,v_out=r_o*i_3],[i_out,i_1,i_2,i_3,v_1,i_in]); |
(%i19) | NoiseSolutionInputShorted2:linsolve([-v_1=r_b*i_in,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_in=i_1+i_2+i_noise,-i_out=i_3+g_m*v_1,v_out=r_o*i_3],[v_out,i_1,i_2,i_3,v_1,i_in]); |
(%i20) | NoiseSolutionInputOpened1:linsolve([v_in=v_1,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),0=i_1+i_2+i_noise,-i_out=i_3+g_m*v_1,v_out=r_o*i_3],[i_out,i_1,i_2,i_3,v_1,v_in]); |
(%i21) | NoiseSolutionInputOpened2:linsolve([v_in=v_1,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),0=i_1+i_2+i_noise,-i_out=i_3+g_m*v_1,v_out=r_o*i_3],[v_out,i_1,i_2,i_3,v_1,v_in]); |
(%i22) | NoiseCurrent2EquivalentInputNoiseVoltage(ABCD(s),NoiseSolutionInputShorted1); |
(%i23) | NoiseCurrent2EquivalentInputNoiseCurrent(ABCD(s),NoiseSolutionInputOpened1); |
(%i24) | NoiseCurrent2EquivalentInputNoiseVoltage(ABCD(s),NoiseSolutionInputShorted2); |
(%i25) | NoiseCurrent2EquivalentInputNoiseCurrent(ABCD(s),NoiseSolutionInputOpened2); |
4 i_c Contribution (|i_noise|^2=|i_c|^2=2*q*I_C*B)
(%i26) | NoiseSolutionInputShorted1:linsolve([-v_1=r_b*i_in,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_in=i_1+i_2,-i_out=i_noise+i_3+g_m*v_1,v_out=r_o*i_3],[i_out,i_1,i_2,i_3,v_1,i_in]); |
(%i27) | NoiseSolutionInputShorted2:linsolve([-v_1=r_b*i_in,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),i_in=i_1+i_2,-i_out=i_noise+i_3+g_m*v_1,v_out=r_o*i_3],[v_out,i_1,i_2,i_3,v_1,i_in]); |
(%i28) | NoiseSolutionInputOpened1:linsolve([v_in=v_1,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),0=i_1+i_2,-i_out=i_noise+i_3+g_m*v_1,v_out=r_o*i_3],[i_out,i_1,i_2,i_3,v_1,v_in]); |
(%i29) | NoiseSolutionInputOpened2:linsolve([v_in=v_1,v_1=r_pi*i_1,v_1=i_2/(s*C_pi),0=i_1+i_2,-i_out=i_noise+i_3+g_m*v_1,v_out=r_o*i_3],[v_out,i_1,i_2,i_3,v_1,v_in]); |
(%i30) | NoiseCurrent2EquivalentInputNoiseVoltage(ABCD(s),NoiseSolutionInputShorted1); |
(%i31) | NoiseCurrent2EquivalentInputNoiseCurrent(ABCD(s),NoiseSolutionInputOpened1); |
(%i32) | NoiseCurrent2EquivalentInputNoiseVoltage(ABCD(s),NoiseSolutionInputShorted2); |
(%i33) | NoiseCurrent2EquivalentInputNoiseCurrent(ABCD(s),NoiseSolutionInputOpened2); |