[SciPy-user] C2D answer
Clovis Goldemberg
clovisgo at gmail.com
Mon Jan 22 05:20:45 EST 2007
To Travis/Kern,
I am attaching the "quick and dirty" cd2 function below.
It can be surely improved but I hope it helps...
ClovisGo
################################################################################################
#Convert a frequency domain transfer-function into two discrete-domain
polynomial functions
def c2d(num_array, den_array, TS, w1=None):
'''This function converts a frequency-domain transfer function,
given by its numerator and denominator arrays into a discrete-domain
transfer function, considering TS sampling time [s]. Outputs are
polynomials! Tustin method is used for this conversion using an
optional pre-warping frequency w1 [rd/s].
Examples:
num_array = [1.0]
den_array = [1.0,1.0]
TS = 1.0
num_z, den_z = c2d(num_array, den_array, TS)
Produces:
num_z = poly1d([ 0.33333333 , 0.33333333])
den_z = poly1d([ 1.0 , -0.33333333])
'''
num_z = make_z_poly(num_array, TS, w1=w1)
den_z = make_z_poly(den_array, TS, w1=w1)
M = numpy.poly1d(num_array).order
N = numpy.poly1d(den_array).order
poly1 = numpy.poly1d.__pow__(numpy.poly1d([1.0, 1.0]), (N-M))
num_z = numpy.polymul(poly1, num_z)
K = den_z.coeffs[0]
poly1 = numpy.poly1d(1.0/K)
num_z = numpy.polymul(poly1, num_z)
den_z = numpy.polymul(poly1, den_z)
return num_z, den_z
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20070122/c47b3b56/attachment.html>
More information about the SciPy-User
mailing list