@@ -107,7 +107,7 @@ class FRD(Lti):
107107 def __init__ (self , * args , ** kwargs ):
108108 """Construct a transfer function.
109109
110- The default constructor is FRD(w, d ), where w is an iterable of
110+ The default constructor is FRD(d, w ), where w is an iterable of
111111 frequency points, and d is the matching frequency data.
112112
113113 If d is a single list, 1d array, or tuple, a SISO system description
@@ -142,8 +142,8 @@ def __init__(self, *args, **kwargs):
142142 # The user provided a response and a freq vector
143143 self .fresp = array (args [0 ], dtype = complex )
144144 if len (self .fresp .shape ) == 1 :
145- self .fresp .reshape (1 , 1 , len (args [0 ]))
146- self .omega = array (args [1 ])
145+ self .fresp = self . fresp .reshape (1 , 1 , len (args [0 ]))
146+ self .omega = array (args [1 ], dtype = float )
147147 if len (self .fresp .shape ) != 3 or \
148148 self .fresp .shape [- 1 ] != self .omega .shape [- 1 ] or \
149149 len (self .omega .shape ) != 1 :
@@ -189,9 +189,9 @@ def __str__(self):
189189 if mimo :
190190 outstr .append ("Input %i to output %i:" % (i + 1 , j + 1 ))
191191 outstr .append ('Freq [rad/s] Response ' )
192- outstr .append ('------------ ------------------------ ' )
192+ outstr .append ('------------ ---------------------' )
193193 outstr .extend (
194- [ '%12.3f %10.4g + % 10.4g ' % (w , m , p )
194+ [ '%12.3f %10.4g%+ 10.4gj ' % (w , m , p )
195195 for m , p , w in zip (real (self .fresp [j ,i ,:]), imag (self .fresp [j ,i ,:]), wt ) ])
196196
197197
@@ -340,7 +340,10 @@ def evalfr(self, omega):
340340 """
341341
342342 # Preallocate the output.
343- out = empty ((self .outputs , self .inputs ), dtype = complex )
343+ if getattr (omega , '__iter__' , False ):
344+ out = empty ((self .outputs , self .inputs , len (omega )), dtype = complex )
345+ else :
346+ out = empty ((self .outputs , self .inputs ), dtype = complex )
344347
345348 if self .ifunc is None :
346349 try :
@@ -350,11 +353,18 @@ def evalfr(self, omega):
350353 "Frequency %f not in frequency list, try an interpolating"
351354 " FRD if you want additional points" )
352355 else :
353- for i in range (self .outputs ):
354- for j in range (self .inputs ):
355- frraw = splev (omega , self .ifunc [i ,j ], der = 0 )
356- out [i ,j ] = frraw [0 ] + 1.0j * frraw [1 ]
357-
356+ if getattr (omega , '__iter__' , False ):
357+ for i in range (self .outputs ):
358+ for j in range (self .inputs ):
359+ for k ,w in enumerate (omega ):
360+ frraw = splev (w , self .ifunc [i ,j ], der = 0 )
361+ out [i ,j ,k ] = frraw [0 ] + 1.0j * frraw [1 ]
362+ else :
363+ for i in range (self .outputs ):
364+ for j in range (self .inputs ):
365+ frraw = splev (omega , self .ifunc [i ,j ], der = 0 )
366+ out [i ,j ] = frraw [0 ] + 1.0j * frraw [1 ]
367+
358368 return out
359369
360370 # Method for generating the frequency response of the system
0 commit comments