noise for behavioural resistor

This commit is contained in:
rlar 2017-07-20 21:18:43 +02:00 committed by Holger Vogt
parent 1426f66967
commit 55b2a0218e
2 changed files with 63 additions and 1 deletions

View File

@ -4221,7 +4221,7 @@ inp_compat(struct card *card)
{
char *str_ptr, *cut_line, *title_tok, *node1, *node2;
char *out_ptr, *exp_ptr, *beg_ptr, *end_ptr, *copy_ptr, *del_ptr;
char *xline;
char *xline, *x2line, *x3line, *x4line;
size_t xlen, i, pai = 0, paui = 0, ii;
char *ckt_array[100];
@ -4714,12 +4714,36 @@ inp_compat(struct card *card)
if ((tc1_ptr == NULL) && (tc2_ptr == NULL)) {
xline = tprintf("b%s %s %s i = v(%s, %s)/(%s)", title_tok, node1, node2,
node1, node2, equation);
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0",
title_tok, title_tok);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
} else if (tc2_ptr == NULL) {
xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) tc1=%15.8e reciproctc=1", title_tok, node1, node2,
node1, node2, equation, tc1);
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0 tc1=%15.8e",
title_tok, title_tok, tc1);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
} else {
xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) tc1=%15.8e tc2=%15.8e reciproctc=1", title_tok, node1, node2,
node1, node2, equation, tc1, tc2);
x2line = tprintf("b%s_1 %s %s i = i(v%s_3)/sqrt(%s)",
title_tok, node1, node2,
title_tok,
equation);
x3line = tprintf("r%s_2 %s_3 0 1.0 tc1=%15.8e tc2=%15.8e",
title_tok, title_tok, tc1, tc2);
x4line = tprintf("v%s_3 %s_3 0 0",
title_tok, title_tok);
}
tc1_ptr = NULL;
tc2_ptr = NULL;
@ -4728,6 +4752,11 @@ inp_compat(struct card *card)
*(card->line) = '*';
// insert new B source line immediately after current line
card = insert_new_line(card, xline, 0, 0);
if (x2line) {
card = insert_new_line(card, x2line, 0, 0);
card = insert_new_line(card, x3line, 0, 0);
card = insert_new_line(card, x4line, 0, 0);
}
tfree(title_tok);
tfree(node1);

33
tmp-noise.cir Normal file
View File

@ -0,0 +1,33 @@
* (exec-spice "ngspice %s" t)
v1 1 0 dc 2 ac 1
v2 200 0 dc=1
R1 1 2 1k
R2 2 0 1k tc1=0.001 $ tc2=1e-5
R10 1 20 1k
R20 20 0 '1k*v(200)' tc1=0.001 $ tc2=1e-5
.temp 127.0
.control
listing e
op
let gold = 2/(1+1000/1100)
print v(2) v(20) gold
noise v(2) v1 dec 1 1kHz 1kHz
let r = 1/(1/1000 + 1/1100)
let gold = sqrt(4*boltz*(273.15+127.0)*r)
print all gold
noise v(20) v1 dec 1 1kHz 1kHz
print all
ac dec 1 1kHz 1kHz
let gold = 1/(1+1000/1100)
print v(2) v(20) gold
.endc