MCPcopy Index your code
hub / github.com/SLiCAP/SLiCAP_python / _doPyNoise

Function _doPyNoise

SLiCAP/SLiCAPexecute.py:1602–1670  ·  view source on GitHub ↗
(instr)

Source from the content-addressed store, hash-verified

1600 return instr
1601
1602def _doPyNoise(instr):
1603 s2f = 2*sp.pi*sp.I*sp.Symbol('f', positive=True)
1604 if instr.numeric == True:
1605 s2f = float2rational(sp.N(s2f))
1606 for name in instr.circuit.indepVars:
1607 if 'noise' in list(instr.circuit.elements[name].params.keys()):
1608 value = instr.circuit.elements[name].params['noise']
1609 if instr.substitute == True:
1610 value = fullSubs(value, instr.parDefs)
1611 if instr.numeric == True:
1612 value = float2rational(sp.N(value))
1613 instr.snoiseTerms[name] = value
1614 instr.gainType = 'gain'
1615 instr = _makeAllMatrices(instr, reduce=True, inductors=False)
1616 den = _doPyDenom(instr)
1617 den = assumeRealParams(den.denom[0].xreplace({ini.laplace: s2f}))
1618 den_sq = sp.Abs(den * sp.conjugate(den))
1619 if instr.source != [None, None] and instr.source != None:
1620 instr = _doPyNumer(instr)
1621 num = assumeRealParams(instr.numer[-1].xreplace({ini.laplace: s2f}))
1622 if num != None:
1623 sl_num_sq = sp.Abs(num * sp.conjugate(num))
1624 instr.gainType = 'vi'
1625 instr.dataType = 'noise'
1626 instr = _makeAllMatrices(instr, reduce=False, inductors=False)
1627 # Save full matrices
1628 M_noise = instr.M
1629 Iv_noise = instr.Iv
1630 Dv_noise = instr.Dv
1631 onoise = 0
1632 inoise = 0
1633 for src in instr.snoiseTerms.keys():
1634 if src not in instr.onoiseTerms.keys():
1635 instr.onoiseTerms[src] = []
1636 instr.inoiseTerms[src] = []
1637 Iv = Iv_noise
1638 for el in instr.snoiseTerms.keys():
1639 name = sp.Symbol(el)
1640 if el == src:
1641 Iv = Iv.xreplace({name: 1})
1642 else:
1643 Iv = Iv.xreplace({name: 0})
1644 # Modify source and source vector (reduce to single input)
1645 instr.Iv = Iv
1646 instr = _doPyNumer(instr)
1647 num = assumeRealParams(instr.numer[-1].xreplace({ini.laplace: s2f}))
1648 if num != None:
1649 num_sq = sp.Abs(num * sp.conjugate(num))
1650 gain_sq = num_sq/den_sq
1651 onoiseTerm = instr.snoiseTerms[src]*gain_sq
1652 if ini.factor:
1653 onoiseTerm = sp.factor(onoiseTerm)
1654 instr.onoiseTerms[src].append(clearAssumptions(onoiseTerm))
1655 onoise += instr.onoiseTerms[src][-1]
1656 if instr.source != [None, None] and instr.source != None:
1657 inoiseTerm = clearAssumptions(instr.snoiseTerms[src]*num_sq/sl_num_sq)
1658 if ini.factor:
1659 inoiseTerm = sp.factor(inoiseTerm)

Callers 1

_doNoiseFunction · 0.85

Calls 7

float2rationalFunction · 0.90
fullSubsFunction · 0.90
assumeRealParamsFunction · 0.90
clearAssumptionsFunction · 0.90
_makeAllMatricesFunction · 0.85
_doPyDenomFunction · 0.85
_doPyNumerFunction · 0.85

Tested by

no test coverage detected