Exemple #1
0
 def test_initialization(self):
     # Check that all initializations work
     dt = 0.05
     s = ZerosPolesGain(1, 1, 1, dt=dt)
     s = ZerosPolesGain([1], [2], 1, dt=dt)
     s = ZerosPolesGain(np.array([1]), np.array([2]), 1, dt=dt)
     s = ZerosPolesGain(1, 1, 1, dt=True)
Exemple #2
0
    def test_conversion(self):
        #Check the conversion functions
        s = ZerosPolesGain(1, 2, 3)
        assert_(isinstance(s.to_ss(), StateSpace))
        assert_(isinstance(s.to_tf(), TransferFunction))
        assert_(isinstance(s.to_zpk(), ZerosPolesGain))

        # Make sure copies work
        assert_(ZerosPolesGain(s) is not s)
        assert_(s.to_zpk() is not s)
Exemple #3
0
    def test_properties(self):
        # Test setters/getters for cross class properties.
        # This implicitly tests to_ss() and to_tf()

        # Getters
        s = ZerosPolesGain(0, 1, 1, dt=0.05)
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", DeprecationWarning)
            assert_equal(s.num, [1, 0])
            assert_equal(s.den, [1, -1])
            assert_equal(s.A, 1)
            assert_equal(s.B, 1)
            assert_equal(s.C, 1)
            assert_equal(s.D, 1)

        # state space setters
        s2 = ZerosPolesGain([2], [6], 3, dt=0.05)
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", DeprecationWarning)
            s2.A = 1
            s2.B = 1
            s2.C = 1
            s2.D = 1
            self._compare_systems(s, s2)

        # tf setters
        s2 = ZerosPolesGain([2], [5], 3, dt=0.05)
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", DeprecationWarning)
            s2.num = [1, 0]
            s2.den = [1, -1]
            self._compare_systems(s, s2)
Exemple #4
0
    def test_conversion(self):
        # Check the conversion functions
        s = ZerosPolesGain(1, 2, 3, dt=0.05)
        assert_(isinstance(s.to_ss(), StateSpace))
        assert_(isinstance(s.to_tf(), TransferFunction))
        assert_(isinstance(s.to_zpk(), ZerosPolesGain))

        # Make sure copies work
        assert_(ZerosPolesGain(s) is not s)
        assert_(s.to_zpk() is not s)
Exemple #5
0
def convert_forward_euler(pa, Tsampling=0.01):
    # if isintance(pa, TransferFunction):
    if isinstance(pa, lti):

        #reviso primero el valor final
        s = Symbol('s')
        pa_sympy = lti_to_sympy(pa)
        final_value_analog = pa_sympy.subs(s, 0).evalf()
        # print (' Final value: ' + str(final_value_analog))

        #convierto backward euler
        num_d, den_d, td = cont2discrete((pa.num, pa.den),
                                         Tsampling,
                                         method='euler')

        zd, pd, kd = tf2zpk(num_d, den_d)
        #agrego zeros infinitos
        while (np.shape(zd) < np.shape(pd)):
            zd = np.append(zd, [-1])

        #normalizo los zeros
        planta_d = ZerosPolesGain(zd, pd, kd)
        planta_d = planta_d.to_tf()
        zd, pd, kd = tf2zpk(planta_d.num, planta_d.den)

        #convierto a sympy para evaluar el valor final y ajustarlo
        planta_d_sympy = lti_to_sympy(planta_d)
        z = Symbol('z')
        planta_d_sympy = planta_d_sympy.subs(s, z)
        final_value_d = planta_d_sympy.subs(z, 1).evalf()

        #ahora ajusto la ganancia para que me coincidan los dos valores finales
        kd = kd * final_value / final_value_d
        # print ('Ceros digital: ' + str(zd))
        # print ('Polos digital: ' + str(pd))
        # print ('K digital: ' + str(kd))

        #normalizo por ultima vez planta_d, ya agregue los zeros
        #y ajuste la ganancia con los valores finales
        planta_d = ZerosPolesGain(zd, pd, kd)
        planta_d = planta_d.to_tf()
        # print ('planta_d ' + str(planta_d))

        #muestro el valor final
        planta_d_sympy = lti_to_sympy(planta_d)
        z = Symbol('z')
        planta_d_sympy = planta_d_sympy.subs(s, z)
        final_value_d = planta_d_sympy.subs(z, 1).evalf()
        # print ('planta_d final value: ' + str(final_value_d))

        #reconvierto planta_d a dlti
        planta_d = dlti(planta_d.num, planta_d.den, dt=td)
        return planta_d

    else:
        raise ValueError('planta_analog is not instance of TransferFunction!')
Exemple #6
0
 def test_initialization(self):
     # Check that all initializations work
     s = ZerosPolesGain(1, 1, 1)
     s = ZerosPolesGain([1], [2], 1)
     s = ZerosPolesGain(np.array([1]), np.array([2]), 1)
    def test_properties(self):
        # Test setters/getters for cross class properties.
        # This implicitly tests to_ss() and to_tf()

        # Getters
        s = ZerosPolesGain(0, 1, 1, dt=0.05)
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", DeprecationWarning)
            assert_equal(s.num, [1, 0])
            assert_equal(s.den, [1, -1])
            assert_equal(s.A, 1)
            assert_equal(s.B, 1)
            assert_equal(s.C, 1)
            assert_equal(s.D, 1)

        # state space setters
        s2 = ZerosPolesGain([2], [6], 3, dt=0.05)
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", DeprecationWarning)
            s2.A = 1
            s2.B = 1
            s2.C = 1
            s2.D = 1
            self._compare_systems(s, s2)

        # tf setters
        s2 = ZerosPolesGain([2], [5], 3, dt=0.05)
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", DeprecationWarning)
            s2.num = [1, 0]
            s2.den = [1, -1]
            self._compare_systems(s, s2)
Exemple #8
0
print('Denominador Digital planta out 1 ' + str(den_d1))

planta_d1 = lti(num_d1, den_d1)
planta_d1_zpk = planta_d1.to_zpk()
print('Ceros Digitales ' + str(planta_d1_zpk.zeros))
print('Polos Digitales ' + str(planta_d1_zpk.poles))
print('Gain Digital ' + str(planta_d1_zpk.gain))

# convierto a planta_d2 ajusto al sistema digital 2 zeros en infinito y corrijo la ganancia
zd2, pd2, kd2 = tf2zpk(num_d1, den_d1)

while (np.shape(zd2) < np.shape(pd2)):
    zd2 = np.append(zd2, [-1])

#normalizo
planta_d2 = ZerosPolesGain(zd2, pd2, kd2)
planta_d2 = planta_d2.to_tf()
zd2, pd2, kd2 = tf2zpk(planta_d2.num, planta_d2.den)

#convierto a sympy para evaluar el valor final y ajustarlo
planta_d2_sympy = lti_to_sympy(planta_d2)
z = Symbol('z')
planta_d2_sympy = planta_d2_sympy.subs(s, z)
final_value_d2 = planta_d2_sympy.subs(z, 1).evalf()

#ahora ajusto la ganancia para que me coincidan los dos valores finales
kd2 = kd2 * final_value / final_value_d2
print('Ceros digital: ' + str(zd2))
print('Polos digital: ' + str(pd2))
print('K digital: ' + str(kd2))
Exemple #9
0
# num_d1, den_d1, td = cont2discrete((planta.num, planta.den), Tsampling, method='zoh')
# num_d1, den_d1, td = cont2discrete((planta.num, planta.den), Tsampling, method='backward_diff')
# num_d1, den_d1, td = cont2discrete((planta.num, planta.den), Tsampling, method='bilinear')

print('Numerador Digital planta: ' + str(num_d1))
print('Denominador Digital planta: ' + str(den_d1))

#busco zeros polos y ganancia
# despues ajusto zeros y ganancia, por ultimo normalizo e imprimo
zd, pd, kd = tf2zpk(num_d1, den_d1)

while (np.shape(zd) < np.shape(pd)):
    zd = np.append(zd, [-1])

#normalizo
planta_d = ZerosPolesGain(zd, pd, kd)
planta_d = planta_d.to_tf()
zd, pd, kd = tf2zpk(planta_d.num, planta_d.den)

#convierto a sympy para evaluar el valor final
planta_d_sympy = lti_to_sympy(planta_d)
z = Symbol('z')
planta_d_sympy = planta_d_sympy.subs(s, z)
print(planta_d_sympy)
final_value_d = planta_d_sympy.subs(z, 1).evalf()
print('final value digital: ' + str(final_value_d))

#ahora ajusto la ganancia para que me coincidan los dos valores finales
kd = kd * final_value / final_value_d
print('Ceros digital: ' + str(zd))
print('Polos digital: ' + str(pd))