From e0126a494746383fdd057ff8c4d7e1f93f85defc Mon Sep 17 00:00:00 2001 From: rlar Date: Tue, 3 Oct 2017 10:51:04 +0200 Subject: [PATCH] tests/regression/misc, check resistor flicker noise --- tests/regression/misc/Makefile.am | 2 +- tests/regression/misc/test-noise-2.cir | 49 ++++++++++++++++++++++++++ tests/regression/misc/test-noise-2.out | 1 + tests/regression/misc/test-noise-3.cir | 38 ++++++++++++++++++++ tests/regression/misc/test-noise-3.out | 1 + 5 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 tests/regression/misc/test-noise-2.cir create mode 100644 tests/regression/misc/test-noise-2.out create mode 100644 tests/regression/misc/test-noise-3.cir create mode 100644 tests/regression/misc/test-noise-3.out diff --git a/tests/regression/misc/Makefile.am b/tests/regression/misc/Makefile.am index 49ecdd8d7..6dd123faf 100644 --- a/tests/regression/misc/Makefile.am +++ b/tests/regression/misc/Makefile.am @@ -1,7 +1,7 @@ ## Process this file with automake to produce Makefile.in -TESTS = bugs-1.cir bugs-2.cir dollar-1.cir empty-1.cir resume-1.cir log-functions-1.cir alter-vec.cir +TESTS = bugs-1.cir bugs-2.cir dollar-1.cir empty-1.cir resume-1.cir log-functions-1.cir alter-vec.cir test-noise-2.cir test-noise-3.cir TESTS_ENVIRONMENT = ngspice_vpath=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh $(top_builddir)/src/ngspice diff --git a/tests/regression/misc/test-noise-2.cir b/tests/regression/misc/test-noise-2.cir new file mode 100644 index 000000000..82ec16ddb --- /dev/null +++ b/tests/regression/misc/test-noise-2.cir @@ -0,0 +1,49 @@ +Paolo's carbon resistor noise (Motchenbacher p. 290) +* (exec-spice "ngspice %s" t) +* +* check whether resistor flicker noise behaves as expected + +.temp 25 + +i1 1 0 dc 1e-3 +r1 1 2 1k rmodel l=1u w=10u +v1 2 0 dc 0 ac 1 + +.model rmodel r tc1=0.01 kf=100e-18 af=1.1 ++ dlr=0.01u dw=0.01u ++ tnom=25 + +.control + +* output noise in v/sqrt(Hz) +compose wanted_onoise values 2.2637m 1.7981m 1.4283m 1.1345m 901.2011u 715.8494u 568.6194u 451.6705u 358.7746u 284.9848u 226.3715u + +* equivalent input noise in v/sqrt(Hz) +* extern_onoise / H +let wanted_inoise = wanted_onoise + +noise v(1) v1 dec 5 1k 100k + +setplot noise2 +*print all + +setplot noise1 +*print onoise_spectrum wanted_onoise +*print inoise_spectrum wanted_inoise + +let inoise_relerr = vecmax(abs(inoise_spectrum / wanted_inoise - 1)) +let onoise_relerr = vecmax(abs(onoise_spectrum / wanted_onoise - 1)) + +echo "Note: relative inoise_relerr = $&inoise_relerr" +echo "Note: relative onoise_relerr = $&onoise_relerr" + +if inoise_relerr > 1e-4 or onoise_relerr > 1e-4 + echo "ERROR: test failed" + quit 1 +else + echo "INFO: success" + quit 0 +end + +.endc +.end diff --git a/tests/regression/misc/test-noise-2.out b/tests/regression/misc/test-noise-2.out new file mode 100644 index 000000000..8e9036969 --- /dev/null +++ b/tests/regression/misc/test-noise-2.out @@ -0,0 +1 @@ +INFO: success diff --git a/tests/regression/misc/test-noise-3.cir b/tests/regression/misc/test-noise-3.cir new file mode 100644 index 000000000..e56aa9460 --- /dev/null +++ b/tests/regression/misc/test-noise-3.cir @@ -0,0 +1,38 @@ +compare a m=2 resistor with two parallel instances +* The expectation is identical inoise and onoise +* (exec-spice "ngspice %s" t) + +.temp 25 + +i1 1 0 dc 10ma ac=1 +r1 1 0 100 rmodel l=1u w=10u m=2 + +i2 2 0 dc 10mA ac=1 +r2a 2 0 100 rmodel l=1u w=10u +r2b 2 0 100 rmodel l=1u w=10u + +.model rmodel r kf=100e-18 af=1.1 ++ dlr=0.01u dw=0.01u + +.control + +noise v(1) i1 dec 5 1k 100k +print all + +noise v(2) i2 dec 5 1k 100k +print all + +let relerr = noise4.onoise_total / noise2.onoise_total - 1 + +echo "Note: relative relerr = $&relerr" + +if abs(relerr) > 1e-6 + echo "ERROR: test failed" + quit 1 +else + echo "INFO: success" + quit 0 +end + +.endc +.end diff --git a/tests/regression/misc/test-noise-3.out b/tests/regression/misc/test-noise-3.out new file mode 100644 index 000000000..8e9036969 --- /dev/null +++ b/tests/regression/misc/test-noise-3.out @@ -0,0 +1 @@ +INFO: success