コード例 #1
0
 def test_reset_defaults(self):
     ct.use_matlab_defaults()
     ct.reset_defaults()
     assert not ct.config.defaults['bode.dB']
     assert ct.config.defaults['bode.deg']
     assert not ct.config.defaults['bode.Hz']
     assert ct.config.defaults['freqplot.number_of_samples'] == 1000
     assert ct.config.defaults['freqplot.feature_periphery_decades'] == 1.0
コード例 #2
0
 def test_reset_defaults(self):
     ct.use_matlab_defaults()
     ct.reset_defaults()
     self.assertEquals(ct.config.bode_dB, False)
     self.assertEquals(ct.config.bode_deg, True)
     self.assertEquals(ct.config.bode_Hz, False)
     self.assertEquals(ct.config.bode_number_of_samples, None)
     self.assertEquals(ct.config.bode_feature_periphery_decade, 1.0)
コード例 #3
0
 def test_reset_defaults(self):
     ct.use_matlab_defaults()
     ct.reset_defaults()
     self.assertEqual(ct.config.defaults['bode.dB'], False)
     self.assertEqual(ct.config.defaults['bode.deg'], True)
     self.assertEqual(ct.config.defaults['bode.Hz'], False)
     self.assertEqual(ct.config.defaults['freqplot.number_of_samples'],
                      None)
     self.assertEqual(
         ct.config.defaults['freqplot.feature_periphery_decades'], 1.0)
コード例 #4
0
    def test_matlab_bode(self):
        ct.use_matlab_defaults()

        # Generate a Bode plot
        plt.figure()
        omega = np.logspace(-3, 3, 100)
        ct.bode_plot(self.sys, omega)

        # Get the magnitude line
        mag_axis = plt.gcf().axes[0]
        mag_line = mag_axis.get_lines()
        mag_data = mag_line[0].get_data()
        mag_x, mag_y = mag_data

        # Make sure the x-axis is in rad/sec and y-axis is in dB
        np.testing.assert_almost_equal(mag_x[0], 0.001, decimal=6)
        np.testing.assert_almost_equal(mag_y[0], 20 * log10(10), decimal=3)

        # Get the phase line
        phase_axis = plt.gcf().axes[1]
        phase_line = phase_axis.get_lines()
        phase_data = phase_line[0].get_data()
        phase_x, phase_y = phase_data

        # Make sure the x-axis is in rad/sec and y-axis is in degrees
        np.testing.assert_almost_equal(phase_x[-1], 1000, decimal=1)
        np.testing.assert_almost_equal(phase_y[-1], -180, decimal=0)

        # Override the defaults and make sure that works as well
        plt.figure()
        ct.bode_plot(self.sys, omega, dB=True)
        mag_x, mag_y = (((plt.gcf().axes[0]).get_lines())[0]).get_data()
        np.testing.assert_almost_equal(mag_y[0], 20 * log10(10), decimal=3)

        plt.figure()
        ct.bode_plot(self.sys, omega, Hz=True)
        mag_x, mag_y = (((plt.gcf().axes[0]).get_lines())[0]).get_data()
        np.testing.assert_almost_equal(mag_x[0], 0.001 / (2 * pi), decimal=6)

        plt.figure()
        ct.bode_plot(self.sys, omega, deg=False)
        phase_x, phase_y = (((plt.gcf().axes[1]).get_lines())[0]).get_data()
        np.testing.assert_almost_equal(phase_y[-1], -pi, decimal=2)

        ct.reset_defaults()
コード例 #5
0
    def test_matlab_bode(self):
        ct.use_matlab_defaults();

        # Generate a Bode plot
        plt.figure()
        omega = np.logspace(-3, 3, 100)
        ct.bode_plot(self.sys, omega)

        # Get the magnitude line
        mag_axis = plt.gcf().axes[0]
        mag_line = mag_axis.get_lines()
        mag_data = mag_line[0].get_data()
        mag_x, mag_y = mag_data

        # Make sure the x-axis is in Hertz and y-axis is in dB
        np.testing.assert_almost_equal(mag_x[0], 0.001 / (2*pi), decimal=6)
        np.testing.assert_almost_equal(mag_y[0], 20*log10(10), decimal=3)

        # Get the phase line
        phase_axis = plt.gcf().axes[1]
        phase_line = phase_axis.get_lines()
        phase_data = phase_line[0].get_data()
        phase_x, phase_y = phase_data

        # Make sure the x-axis is in Hertz and y-axis is in degrees
        np.testing.assert_almost_equal(phase_x[-1], 1000 / (2*pi), decimal=1)
        np.testing.assert_almost_equal(phase_y[-1], -180, decimal=0)
        
        # Override the defaults and make sure that works as well
        plt.figure()
        ct.bode_plot(self.sys, omega, dB=True)
        mag_x, mag_y = (((plt.gcf().axes[0]).get_lines())[0]).get_data()
        np.testing.assert_almost_equal(mag_y[0], 20*log10(10), decimal=3)

        plt.figure()
        ct.bode_plot(self.sys, omega, Hz=True)
        mag_x, mag_y = (((plt.gcf().axes[0]).get_lines())[0]).get_data()
        np.testing.assert_almost_equal(mag_x[0], 0.001 / (2*pi), decimal=6)

        plt.figure()
        ct.bode_plot(self.sys, omega, deg=False)
        phase_x, phase_y = (((plt.gcf().axes[1]).get_lines())[0]).get_data()
        np.testing.assert_almost_equal(phase_y[-1], -pi, decimal=2)

        ct.reset_defaults()
コード例 #6
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 28 17:30:38 2019
Todos estos códigos requieren comentarios y una limpieza
Limpio=NO
Comentarios=NO
@author: carlos
"""
import control as ct
import sympy as sym
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
from matplotlib.ticker import (MultipleLocator)
ct.use_matlab_defaults()

K = 2  #Valor inicial
a = 2  #Valor inicial
'''
primero pasamos las funciones de transferencia usando matematicas simbolicas
para asi obtener el vector del numerador y denominador
'''

s = sym.symbols('s')

Q = sym.expand(K * (s + a)**2) / s
G = 1.2 / sym.expand((0.3 * s + 1) * (s + 1) * (1.2 * s + 1))

sym.pprint(Q)
sym.pprint(G)