Skip to content

Commit bc949cf

Browse files
committed
still problems freq calc.
1 parent ee0bd9c commit bc949cf

1 file changed

Lines changed: 18 additions & 12 deletions

File tree

src/frdata.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
# External function declarations
7676
from numpy import angle, any, array, empty, finfo, insert, ndarray, ones, \
7777
polyadd, polymul, polyval, roots, sort, sqrt, zeros, squeeze, inner, \
78-
real, imag, matrix, absolute
78+
real, imag, matrix, absolute, eye
7979
from scipy.interpolate import splprep, splev
8080
from copy import deepcopy
8181
from lti import Lti
@@ -339,6 +339,8 @@ def evalfr(self, omega):
339339

340340
for i in range(self.outputs):
341341
for j in range(self.inputs):
342+
print array([1, 1j])
343+
print splev(omega, self.ifunc[i,j], der=0)
342344
out[i,j] = inner(array([1, 1j]),
343345
splev(omega, self.ifunc[i,j], der=0))
344346

@@ -363,11 +365,10 @@ def freqresp(self, omega):
363365

364366
omega.sort()
365367

366-
for i in range(self.outputs):
367-
for j in range(self.inputs):
368-
fresp = matrix([[1,1j]])*splev(omega, self.ifunc[i,j])
369-
mag[i, j, :] = abs(fresp)
370-
phase[i, j, :] = angle(fresp)
368+
for k, w in enumerate(omega):
369+
fresp = self.evalfr(omega)
370+
mag[:, :, k] = abs(fresp)
371+
phase[:, :, k] = angle(fresp)
371372

372373
return mag, phase, omega
373374

@@ -385,12 +386,17 @@ def feedback(self, other, sign=-1):
385386
# TODO: vectorize this
386387
# TODO: handle omega re-mapping
387388
for k, w in enumerate(other.omega):
388-
for i in range(self.inputs):
389-
for j in range(self.outputs):
390-
fresp[i, j, k] = \
391-
self.fresp[i, j, k] / \
392-
(1.0-sign*inner(self.fresp[:, j, k],
393-
other.fresp[i, :, k]))
389+
fresp[:, :, k] = (
390+
eye(self.inputs) + other.fresp[:, :, k].view(type=matrix) *
391+
self.fresp[:, :, k].view(type=matrix)).I * \
392+
self.fresp[:, :, k].view(type=matrix)
393+
394+
# for i in range(self.inputs):
395+
# for j in range(self.outputs):
396+
# fresp[i, j, k] = \
397+
# self.fresp[i, j, k] / \
398+
# (1.0-sign*inner(self.fresp[:, j, k],
399+
# other.fresp[i, :, k]))
394400

395401
return FRD(fresp, other.omega)
396402

0 commit comments

Comments
 (0)