Source code for PySpice.Plot.BodeDiagram

####################################################################################################
#
# PySpice - A Spice Package for Python
# Copyright (C) 2014 Fabrice Salvaire
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
####################################################################################################

"""This module provides helpers to plot Bode diagrams using Matplolib.

Frequency is in Hz, gain in dB, phase in radians between -π and π.
"""

####################################################################################################

import math

from matplotlib import pyplot

####################################################################################################

[docs]def bode_diagram_gain(axe, frequency, gain, **kwargs): axe.semilogx(frequency, gain, basex=10, **kwargs) axe.grid(True) axe.grid(True, which='minor') axe.set_xlabel("Frequency [Hz]") axe.set_ylabel("Gain [dB]")
####################################################################################################
[docs]def bode_diagram_phase(axe, frequency, phase, **kwargs): axe.semilogx(frequency, phase, base=10, **kwargs) axe.set_ylim(-math.pi, math.pi) axe.grid(True) axe.grid(True, which='minor') axe.set_xlabel("Frequency [Hz]") axe.set_ylabel("Phase [rads]") # axe.set_yticks # Fixme: pyplot.yticks((-math.pi, -math.pi/2,0, math.pi/2, math.pi), (r"$-\pi$", r"$-\frac{\pi}{2}$", "0", r"$\frac{\pi}{2}$", r"$\pi$"))
####################################################################################################
[docs]def bode_diagram(axes, frequency, gain, phase, **kwargs): bode_diagram_gain(axes[0], frequency, gain, **kwargs) bode_diagram_phase(axes[1], frequency, phase, **kwargs)