Ich hatte die Möglichkeit, den Frequenzgang des Digitalfilters zu visualisieren. Notieren Sie sich dies.
import
import numpy as np
import matplotlib.pyplot as plt
Ich möchte eine komplexe Funktion auf einer komplexen Ebene zeichnen, wie ein Mathematiklehrbuch der High School!
def plot_cp(func,theta): #Zeichnen Sie auf einer komplexen Ebene
#Zeichne Figur und Achsen
fig, ax = plt.subplots(figsize = (5, 5))
ax.grid()
#Stellen Sie den Anzeigebereich ein und spielen Sie entsprechend damit
lim = [-2.5, 2.5]
ax.set_xlim(lim)
ax.set_ylim(lim)
#Reale Achse
plt.quiver(lim[0],0,lim[1]-lim[0],0,angles='xy',scale_units='xy',width=0.005,headwidth=10,headlength=10,headaxislength=5,scale=1)
plt.text(1.05*lim[1],0.02*lim[0], 'Re')
#Imaginäre Achse
plt.quiver(0,lim[0],0,lim[1]-lim[0],angles='xy',scale_units='xy',width=0.005,headwidth=10,headlength=10,headaxislength=5,scale=1)
plt.text(0.03*lim[0],1.05*lim[1], 'Im')
#Ursprung
plt.text(0.1*lim[0],0.1*lim[0], '$O$')
#Entfernen Sie die zusätzliche Skala
xt=list(ax.get_xticks())
for i in [0,np.floor(lim[0]),np.ceil(lim[1])]:
xt.remove(i)
ax.set_xticks(xt)
ax.set_yticks(xt)
#Die Skala der imaginären Achse"n j"ändern
imlabel=[]
for ticks in ax.get_yticks():
imlabel.append(str(ticks)+" j")
ax.set_yticklabels(imlabel)
#Achse in die Mitte bewegen
ax.spines['bottom'].set_position('center')
ax.spines['left'].set_position('center')
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.plot(np.real(func),np.imag(func))
#Ausgabe
plt.show()
theta=np.linspace(-np.pi,np.pi,1000) # theta=omega*T
func=1+np.exp(-2j*theta)
plot_cp(func,theta) #Zeichnen Sie auf einer komplexen Ebene
Es fühlt sich gut an.
def plot_ap(func,theta): #Zeichnen Sie Amplituden- und Phaseneigenschaften
# Figure
fig=plt.figure(figsize = (10, 5))
#Amplitudenkennlinie ax1
ax1=fig.add_subplot(121)
ax1.grid()
gain=abs(func)
#Anzeigebereich einstellen
lim=[-np.pi, np.pi]
ax1.set_xlim(lim)
ax1.set_ylim(0,1.05*np.max(gain))
#Stellen Sie die Beschriftung der x-Achse ein
ax1.set_xlabel("$\omega$")
#Titel einstellen
ax1.set_title("amplitude characteristic")
#x-Achsenskala[-pi/T,pi/T]Nach Spezifikationen
xt=[-np.pi,-np.pi/2,0,np.pi/2,np.pi]
ax1.set_xticks(xt)
xl=["$-\pi/T$","$-\pi/2T$",0,"$\pi/2T$","$\pi/T$"]
ax1.set_xticklabels(xl)
ax1.plot(theta,gain)
#ax2 Phaseneigenschaften
ax2=fig.add_subplot(122)
ax2.grid()
#Anzeigebereich einstellen
ax2.set_xlim(lim)
ax2.set_ylim(lim)
#Stellen Sie die Beschriftung der x-Achse ein
ax2.set_xlabel("$\omega$")
#Titel einstellen
ax2.set_title("phase characteristic")
#x-Achsenskala[-pi/T,pi/T]Nach Spezifikationen
ax2.set_xticks(xt)
ax2.set_xticklabels(xl)
#y-Achsenskala[-pi,pi]Nach Spezifikationen
ax2.set_yticks(xt)
yl=["$-\pi$","$-\pi/2$",0,"$\pi/2$","$\pi$"]
ax2.set_yticklabels(yl)
ax2.plot(theta,np.arctan2(np.imag(func),np.real(func)))
#Ausgabe
plt.show()
theta=np.linspace(-np.pi,np.pi,1000) # theta=omega*T
func=1+np.exp(-2j*theta)
plot_ap(func,theta) #Zeichnen Sie die Amplitudenkennlinie und die Phasenkennlinie nebeneinander
Es sieht so aus.
Recommended Posts