scipy.signal.

dbode#

scipy.signal.dbode(system, w=None, n=100)[Quelle]#

Berechnet Bode-Betrags- und Phasendaten eines zeitdiskreten Systems.

Parameter:
systemdlti | tuple

Eine Instanz der LTI-Klasse dlti oder ein Tupel, das das System beschreibt. Die Anzahl der Elemente im Tupel bestimmt die Interpretation. D. h.

  • system: Instanz der LTI-Klasse dlti. Beachten Sie, dass auch abgeleitete Instanzen, wie z.B. Instanzen von TransferFunction, ZerosPolesGain oder StateSpace, erlaubt sind.

  • (num, den, dt): Rationale Polynome, wie in TransferFunction beschrieben. Die Koeffizienten der Polynome sollten in absteigender Exponentenreihenfolge angegeben werden, z.B. z² + 3z + 5 würde als [1, 3, 5] dargestellt werden.

  • (zeros, poles, gain, dt): Nullstellen-, Pol-, Verstärkungsform, wie in ZerosPolesGain beschrieben.

  • (A, B, C, D, dt): Zustandsraumform, wie in StateSpace beschrieben.

warray_like, optional

Array von Frequenzen, normiert auf die Nyquist-Frequenz von π, d.h. mit der Einheit Radiant / Sample. Für jeden Wert in diesem Array werden Betrags- und Phaseninformationen berechnet. Wenn nicht angegeben, wird ein sinnvolles Set berechnet.

nint, optional

Anzahl der Frequenzpunkte, die berechnet werden sollen, wenn w nicht angegeben ist. Die n Frequenzen sind logarithmisch in einem Intervall verteilt, das so gewählt wird, dass es den Einfluss der Pole und Nullstellen des Systems erfasst.

Rückgabe:
w1D ndarray

Array von Frequenzen, normiert auf die Nyquist-Frequenz von np.pi/dt, wobei dt das Abtastintervall des system-Parameters ist. Die Einheit ist rad/s, vorausgesetzt dt ist in Sekunden angegeben.

mag1D ndarray

Betragsarray in dB

phase1D ndarray

Phasenarray in Grad

Hinweise

Diese Funktion ist ein praktischer Wrapper um dfreqresp zur Extraktion von Betrag und Phase aus der berechneten komplexwertigen Amplitude des Frequenzgangs.

Hinzugefügt in Version 0.18.0.

Beispiele

Das folgende Beispiel zeigt, wie ein Bode-Diagramm für einen Butterworth-Tiefpassfilter 5. Ordnung mit einer Grenzfrequenz von 100 Hz erstellt wird.

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> from scipy import signal
...
>>> T = 1e-4  # sampling interval in s
>>> f_c, o = 1e2, 5  # corner frequency in Hz (i.e., -3 dB value) and filter order
>>> bb, aa = signal.butter(o, f_c, 'lowpass', fs=1/T)
...
>>> w, mag, phase = signal.dbode((bb, aa, T))
>>> w /= 2*np.pi  # convert unit of frequency into Hertz
...
>>> fg, (ax0, ax1) = plt.subplots(2, 1, sharex='all', figsize=(5, 4),
...                               tight_layout=True)
>>> ax0.set_title("Bode Plot of Butterworth Lowpass Filter " +
...               rf"($f_c={f_c:g}\,$Hz, order={o})")
>>> ax0.set_ylabel(r"Magnitude in dB")
>>> ax1.set(ylabel=r"Phase in Degrees",
...         xlabel="Frequency $f$ in Hertz", xlim=(w[1], w[-1]))
>>> ax0.semilogx(w, mag, 'C0-', label=r"$20\,\log_{10}|G(f)|$")  # Magnitude plot
>>> ax1.semilogx(w, phase, 'C1-', label=r"$\angle G(f)$")  # Phase plot
...
>>> for ax_ in (ax0, ax1):
...     ax_.axvline(f_c, color='m', alpha=0.25, label=rf"${f_c=:g}\,$Hz")
...     ax_.grid(which='both', axis='x')  # plot major & minor vertical grid lines
...     ax_.grid(which='major', axis='y')
...     ax_.legend()
>>> plt.show()
../../_images/scipy-signal-dbode-1.png