My Project  0.0.16
QUCS Mapping
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
inoise.cpp
Go to the documentation of this file.
1 /*
2  * inoise.cpp - noise current source class implementation
3  *
4  * Copyright (C) 2004, 2005, 2008 Stefan Jahn <stefan@lkcc.org>
5  *
6  * This is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * This software is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this package; see the file COPYING. If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  * $Id: inoise.cpp 1825 2011-03-11 20:42:14Z ela $
22  *
23  */
24 
25 #if HAVE_CONFIG_H
26 # include <config.h>
27 #endif
28 
29 #include "component.h"
30 #include "inoise.h"
31 
32 inoise::inoise () : circuit (2) {
33  type = CIR_INOISE;
34 }
35 
36 void inoise::initSP (void) {
37  allocMatrixS ();
38  setS (NODE_1, NODE_1, 1.0);
39  setS (NODE_1, NODE_2, 0.0);
40  setS (NODE_2, NODE_1, 0.0);
41  setS (NODE_2, NODE_2, 1.0);
42 }
43 
44 void inoise::calcNoiseSP (nr_double_t frequency) {
45  nr_double_t i = getPropertyDouble ("i");
46  nr_double_t e = getPropertyDouble ("e");
47  nr_double_t c = getPropertyDouble ("c");
48  nr_double_t a = getPropertyDouble ("a");
49  nr_double_t ipsd = i / (a + c * pow (frequency, e)) / kB / T0 * z0;
50  setN (NODE_1, NODE_1, +ipsd); setN (NODE_2, NODE_2, +ipsd);
51  setN (NODE_1, NODE_2, -ipsd); setN (NODE_2, NODE_1, -ipsd);
52 }
53 
54 void inoise::calcNoiseAC (nr_double_t frequency) {
55  nr_double_t i = getPropertyDouble ("i");
56  nr_double_t e = getPropertyDouble ("e");
57  nr_double_t c = getPropertyDouble ("c");
58  nr_double_t a = getPropertyDouble ("a");
59  nr_double_t ipsd = i / (a + c * pow (frequency, e)) / kB / T0;
60  setN (NODE_1, NODE_1, +ipsd); setN (NODE_2, NODE_2, +ipsd);
61  setN (NODE_1, NODE_2, -ipsd); setN (NODE_2, NODE_1, -ipsd);
62 }
63 
64 // properties
65 PROP_REQ [] = {
66  { "i", PROP_REAL, { 1e-6, PROP_NO_STR }, PROP_POS_RANGE },
67  PROP_NO_PROP };
68 PROP_OPT [] = {
69  { "a", PROP_REAL, { 0, PROP_NO_STR }, PROP_POS_RANGE },
70  { "c", PROP_REAL, { 1, PROP_NO_STR }, PROP_POS_RANGE },
71  { "e", PROP_REAL, { 0, PROP_NO_STR }, PROP_POS_RANGE },
72  PROP_NO_PROP };
73 struct define_t inoise::cirdef =