From fd80fc8e40af4dbabc7e61ae674d39def1f7ae97 Mon Sep 17 00:00:00 2001
From: Ben Greiner <code@bnavigator.de>
Date: Fri, 12 Mar 2021 22:26:33 +0100
Subject: [PATCH] support discrete system as input for FRD

---
 control/frdata.py | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/control/frdata.py b/control/frdata.py
index 3398bfbee..c620984f6 100644
--- a/control/frdata.py
+++ b/control/frdata.py
@@ -110,9 +110,14 @@ def __init__(self, *args, **kwargs):
                 # the frequency range
                 otherlti = args[0]
                 self.omega = sort(np.asarray(args[1], dtype=float))
-                numfreq = len(self.omega)
                 # calculate frequency response at my points
-                self.fresp = otherlti(1j * self.omega, squeeze=False)
+                if otherlti.isctime():
+                    s = 1j * self.omega
+                    self.fresp = otherlti(s, squeeze=False)
+                else:
+                    z = np.exp(1j * self.omega * otherlti.dt)
+                    self.fresp = otherlti(z, squeeze=False)
+
             else:
                 # The user provided a response and a freq vector
                 self.fresp = array(args[0], dtype=complex)
@@ -538,7 +543,10 @@ def _convert_to_FRD(sys, omega, inputs=1, outputs=1):
 
     elif isinstance(sys, LTI):
         omega = np.sort(omega)
-        fresp = sys(1j * omega)
+        if sys.isctime():
+            fresp = sys(1j * omega)
+        else:
+            fresp = sys(np.exp(1j * omega * sys.dt))
         if len(fresp.shape) == 1:
             fresp = fresp[np.newaxis, np.newaxis, :]
         return FRD(fresp, omega, smooth=True)