[SciPy-user] signal.lti __mul__ and feedback

Ryan Krauss ryanlists at gmail.com
Sat Oct 21 13:11:03 CDT 2006

As I continue to try to make scipy.signal a replacment for the Matlab
controls toolbox, I need to be able to multiply signal.lti instances
by other instances and by constants (to model a controller transfer
function times a plant transfer function) and I need to create a
feedback command (i.e. closed-loop tf= Gc*Gp/(1+Gc*Gp) if Gc is the
controller transfer function and Gp is the plant transfer function -
assuming unity feedback).  I wanted to make sure these things haven't
already been done and ask for any input before I get started.  I was
basically planning to define __mul__ and __rmul__ for multiplication
by integers, floats, or other lti instances.  When multpliying by
other instances, I was going to just multiply the numerators and
denominators seperately and let poly1d handle that.  The only problem
with that is what to do when there should be a cancelation (i.e.
(s+1)/(s+2)*(s+3)/(s+1)= [(s+3)*(s+1)]/[(s+2)*(s+1)]).  Once an
__add__ method is defined as well, feedback is easy (I guess I would
need a __div__ and probably an __rdiv_ as well).

I had started a seperate controls module before I knew about the
signal.lti stuff.  It is attached.  It would have to be seperated from
some of my other modules to make it more portable, but most of what I
am talking about could be done by making my TransferFunction class
derive from signal.lti (or incorporate all of its methods into
signal.lti).  Any thoughts on this?


-------------- next part --------------
A non-text attachment was scrubbed...
Name: controls.py
Type: text/x-python
Size: 9441 bytes
Desc: not available
Url : http://projects.scipy.org/pipermail/scipy-user/attachments/20061021/c27f70ef/attachment.py 

More information about the SciPy-user mailing list