def _tc2tf(zeros, poles, K=1, var=None): """Create a transfer function in time-constant form from lists (or dictionaries) of zeros and poles, and from a constant gain """ K = sympify(K) zeros = sympify(zeros) poles = sympify(poles) zz = [] pp = [] if isinstance(zeros, (tuple, list)): for z in zeros: if z == 0: zz.append(var) else: zz.append((var / -z + 1)) K *= z else: for z, o in zeros.items(): if z == 0: zz.append(var**o) else: zz.append((var / -z + 1)**zeros[z]) K *= z**o if isinstance(zeros, (tuple, list)): for p in poles: if p == 0: pp.append(p) else: pp.append(1 / (var / -p + 1)) K /= p else: for p, o in poles.items(): if p == 0: pp.append(var**o) else: pp.append(1 / (var / -p + 1)**o) K /= p**o K = K.simplify() return uMul(K, *(zz + pp))
def _zp2tf(zeros, poles, K=1, var=None): """Create a transfer function from lists of zeros and poles, and from a constant gain""" K = sym.sympify(K) zeros = sym.sympify(zeros) poles = sym.sympify(poles) if isinstance(zeros, (tuple, list)): zz = [(var - z) for z in zeros] else: zz = [(var - z)**zeros[z] for z in zeros] if isinstance(zeros, (tuple, list)): pp = [1 / (var - p) for p in poles] else: pp = [1 / (var - p)**poles[p] for p in poles] return uMul(K, *(zz + pp))
def _zp2tf(zeros, poles, K=1, var=None): """Create a transfer function from lists of zeros and poles, and from a constant gain""" K = sympify(K) zeros = sympify(zeros) poles = sympify(poles) if isinstance(zeros, (tuple, list)): zz = [(var - z) for z in zeros] else: zz = [(var - z) ** zeros[z] for z in zeros] if isinstance(zeros, (tuple, list)): pp = [1 / (var - p) for p in poles] else: pp = [1 / (var - p) ** poles[p] for p in poles] return uMul(K, *(zz + pp))