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
dltioder ein Tupel, das das System beschreibt. Die Anzahl der Elemente im Tupel bestimmt die Interpretation. D. h.system: Instanz der LTI-Klassedlti. Beachten Sie, dass auch abgeleitete Instanzen, wie z.B. Instanzen vonTransferFunction,ZerosPolesGainoderStateSpace, erlaubt sind.(num, den, dt): Rationale Polynome, wie inTransferFunctionbeschrieben. 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 inZerosPolesGainbeschrieben.(A, B, C, D, dt): Zustandsraumform, wie inStateSpacebeschrieben.
- 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, wobeidtdas Abtastintervall des system-Parameters ist. Die Einheit ist rad/s, vorausgesetztdtist in Sekunden angegeben.- mag1D ndarray
Betragsarray in dB
- phase1D ndarray
Phasenarray in Grad
Siehe auch
Hinweise
Diese Funktion ist ein praktischer Wrapper um
dfreqrespzur 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()