few corrections in noise model

This commit is contained in:
dwarning 2020-07-02 21:05:58 +02:00
parent ad16be59ba
commit 61ee68c782
2 changed files with 27 additions and 24 deletions

View File

@ -24,11 +24,11 @@ enum {
HICUMRBINOIZ, HICUMRBINOIZ,
HICUMRENOIZ, HICUMRENOIZ,
HICUMRSNOIZ, HICUMRSNOIZ,
HICUMICNOIZ, HICUMIAVLNOIZ,
HICUMIBCNOIZ, HICUMIBCINOIZ,
HICUMIBEPNOIZ, HICUMIBEPNOIZ,
HICUMIBCXNOIZ, HICUMIBCXNOIZ,
HICUMITSNOIZ, HICUMIJSCNOIZ,
HICUMFLBENOIZ, HICUMFLBENOIZ,
HICUMFLRENOIZ, HICUMFLRENOIZ,
HICUMTOTNOIZ, HICUMTOTNOIZ,

View File

@ -39,6 +39,7 @@ HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata
double Ibbp_Vbbp; double Ibbp_Vbbp;
double Icic_Vcic; double Icic_Vcic;
double Ibpbi_Vbpbi;
double Ieie_Veie; double Ieie_Veie;
double Isis_Vsis; double Isis_Vsis;
@ -47,17 +48,18 @@ HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata
static char *HICUMnNames[HICUMNSRCS] = { static char *HICUMnNames[HICUMNSRCS] = {
/* Note that we have to keep the order consistent with the /* Note that we have to keep the order consistent with the
strchr definitions in HICUMdefs.h */ strchr definitions in HICUMdefs.h */
"_rc", /* noise due to rc */ "_rcx", /* thermal noise due to rcx */
"_rb", /* noise due to rb */ "_rbx", /* thermal noise due to rbx */
"_rbi", /* noise due to rbi */ "_rbi", /* thermal noise due to rbi */
"_re", /* noise due to re */ "_re", /* thermal noise due to re */
"_rs", /* noise due to rs */ "_rsu", /* thermal noise due to rsu */
"_ic", /* noise due to ic */ "_iavl", /* shot noise due to iavl */
"_ibc", /* noise due to ib */ "_ibci", /* shot noise due to ibci */
"_ibep", /* noise due to ibep */ "_ibep", /* shot noise due to ibep */
"_its", /* noise due to iccp */ "_ijbcx", /* shot noise due to ijbcx */
"_ijsc", /* shot noise due to ijsc */
"_1overfbe", /* flicker (1/f) noise ibe */ "_1overfbe", /* flicker (1/f) noise ibe */
"_1overfbep", /* flicker (1/f) noise re */ "_1overfre", /* flicker (1/f) noise re */
"" /* total transistor noise */ "" /* total transistor noise */
}; };
@ -65,8 +67,9 @@ HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata
for (inst=HICUMinstances(model); inst != NULL; for (inst=HICUMinstances(model); inst != NULL;
inst=HICUMnextInstance(inst)) { inst=HICUMnextInstance(inst)) {
Ibbp_Vbbp = 1/inst->HICUMrbx_t.rpart;
Icic_Vcic = 1/inst->HICUMrcx_t.rpart; Icic_Vcic = 1/inst->HICUMrcx_t.rpart;
Ibbp_Vbbp = 1/inst->HICUMrbx_t.rpart;
Ibpbi_Vbpbi = 1/inst->HICUMrbi;
Ieie_Veie = 1/inst->HICUMre_t.rpart; Ieie_Veie = 1/inst->HICUMre_t.rpart;
Isis_Vsis = 1/model->HICUMrsu; Isis_Vsis = 1/model->HICUMrsu;
@ -105,7 +108,7 @@ HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata
Icic_Vcic); Icic_Vcic);
NevalSrc(&noizDens[HICUMRBNOIZ],&lnNdens[HICUMRBNOIZ], NevalSrc(&noizDens[HICUMRBNOIZ],&lnNdens[HICUMRBNOIZ],
ckt,THERMNOISE,inst->HICUMbaseBPNode,inst->HICUMbaseNode, ckt,THERMNOISE,inst->HICUMbaseNode,inst->HICUMbaseBPNode,
Ibbp_Vbbp); Ibbp_Vbbp);
NevalSrc(&noizDens[HICUMRBINOIZ],&lnNdens[HICUMRBINOIZ], NevalSrc(&noizDens[HICUMRBINOIZ],&lnNdens[HICUMRBINOIZ],
@ -121,11 +124,11 @@ HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata
Isis_Vsis); Isis_Vsis);
NevalSrc(&noizDens[HICUMICNOIZ],&lnNdens[HICUMICNOIZ], NevalSrc(&noizDens[HICUMIAVLNOIZ],&lnNdens[HICUMIAVLNOIZ],
ckt,SHOTNOISE,inst->HICUMcollCINode,inst->HICUMemitEINode, ckt,SHOTNOISE,inst->HICUMcollCINode,inst->HICUMbaseBINode,
*(ckt->CKTstate0 + inst->HICUMiciei)); inst->HICUMiavl);
NevalSrc(&noizDens[HICUMIBCNOIZ],&lnNdens[HICUMIBCNOIZ], NevalSrc(&noizDens[HICUMIBCINOIZ],&lnNdens[HICUMIBCINOIZ],
ckt,SHOTNOISE,inst->HICUMbaseBINode,inst->HICUMcollCINode, ckt,SHOTNOISE,inst->HICUMbaseBINode,inst->HICUMcollCINode,
*(ckt->CKTstate0 + inst->HICUMibici)); *(ckt->CKTstate0 + inst->HICUMibici));
@ -137,7 +140,7 @@ HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata
ckt,SHOTNOISE,inst->HICUMbaseBPNode,inst->HICUMcollCINode, ckt,SHOTNOISE,inst->HICUMbaseBPNode,inst->HICUMcollCINode,
*(ckt->CKTstate0 + inst->HICUMibpci)); *(ckt->CKTstate0 + inst->HICUMibpci));
NevalSrc(&noizDens[HICUMITSNOIZ],&lnNdens[HICUMITSNOIZ], NevalSrc(&noizDens[HICUMIJSCNOIZ],&lnNdens[HICUMIJSCNOIZ],
ckt,SHOTNOISE,inst->HICUMsubsSINode,inst->HICUMcollCINode, ckt,SHOTNOISE,inst->HICUMsubsSINode,inst->HICUMcollCINode,
*(ckt->CKTstate0 + inst->HICUMisici)); *(ckt->CKTstate0 + inst->HICUMisici));
@ -153,7 +156,7 @@ HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata
log(MAX(noizDens[HICUMFLBENOIZ],N_MINLOG)); log(MAX(noizDens[HICUMFLBENOIZ],N_MINLOG));
NevalSrc(&noizDens[HICUMFLRENOIZ], NULL, ckt, NevalSrc(&noizDens[HICUMFLRENOIZ], NULL, ckt,
N_GAIN,inst->HICUMemitNode, inst->HICUMemitEINode, N_GAIN,inst->HICUMemitEINode, inst->HICUMemitNode,
(double)0.0); (double)0.0);
noizDens[HICUMFLRENOIZ] *= inst->HICUMm * model->HICUMkfre * noizDens[HICUMFLRENOIZ] *= inst->HICUMm * model->HICUMkfre *
exp(model->HICUMafre * exp(model->HICUMafre *
@ -168,11 +171,11 @@ HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata
noizDens[HICUMRBINOIZ] + noizDens[HICUMRBINOIZ] +
noizDens[HICUMRENOIZ] + noizDens[HICUMRENOIZ] +
noizDens[HICUMRSNOIZ] + noizDens[HICUMRSNOIZ] +
noizDens[HICUMICNOIZ] + noizDens[HICUMIAVLNOIZ] +
noizDens[HICUMIBCNOIZ] + noizDens[HICUMIBCINOIZ] +
noizDens[HICUMIBEPNOIZ] + noizDens[HICUMIBEPNOIZ] +
noizDens[HICUMIBCXNOIZ] + noizDens[HICUMIBCXNOIZ] +
noizDens[HICUMITSNOIZ] + noizDens[HICUMIJSCNOIZ] +
noizDens[HICUMFLBENOIZ] + noizDens[HICUMFLBENOIZ] +
noizDens[HICUMFLRENOIZ]; noizDens[HICUMFLRENOIZ];