J'ai eu l'occasion de visualiser la réponse en fréquence du filtre numérique, alors prenez-en note.
import
import numpy as np
import matplotlib.pyplot as plt
Je veux dessiner une fonction complexe sur un plan complexe comme un manuel de mathématiques au lycée!
def plot_cp(func,theta): #Dessiner sur un plan complexe
#Dessiner une figure et des axes
fig, ax = plt.subplots(figsize = (5, 5))
ax.grid()
#Réglez la plage d'affichage et jouez avec elle si nécessaire
lim = [-2.5, 2.5]
ax.set_xlim(lim)
ax.set_ylim(lim)
#Axe réel
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')
#Axe imaginaire
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')
#origine
plt.text(0.1*lim[0],0.1*lim[0], '$O$')
#Supprimer le tartre supplémentaire
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)
#L'échelle de l'axe imaginaire"n j"changer en
imlabel=[]
for ticks in ax.get_yticks():
imlabel.append(str(ticks)+" j")
ax.set_yticklabels(imlabel)
#Déplacer l'axe au centre
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))
#production
plt.show()
theta=np.linspace(-np.pi,np.pi,1000) # theta=omega*T
func=1+np.exp(-2j*theta)
plot_cp(func,theta) #Dessiner sur un plan complexe
Ça fait du bien.
def plot_ap(func,theta): #Dessinez les caractéristiques d'amplitude et de phase
# Figure
fig=plt.figure(figsize = (10, 5))
#caractéristique d'amplitude ax1
ax1=fig.add_subplot(121)
ax1.grid()
gain=abs(func)
#Définir la plage d'affichage
lim=[-np.pi, np.pi]
ax1.set_xlim(lim)
ax1.set_ylim(0,1.05*np.max(gain))
#Définir l'étiquette de l'axe x
ax1.set_xlabel("$\omega$")
#Définir le titre
ax1.set_title("amplitude characteristic")
#échelle de l'axe des x[-pi/T,pi/T]Aux spécifications
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)
#caractéristiques de phase ax2
ax2=fig.add_subplot(122)
ax2.grid()
#Définir la plage d'affichage
ax2.set_xlim(lim)
ax2.set_ylim(lim)
#Définir l'étiquette de l'axe x
ax2.set_xlabel("$\omega$")
#Définir le titre
ax2.set_title("phase characteristic")
#échelle de l'axe des x[-pi/T,pi/T]Aux spécifications
ax2.set_xticks(xt)
ax2.set_xticklabels(xl)
#échelle de l'axe y[-pi,pi]Aux spécifications
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)))
#production
plt.show()
theta=np.linspace(-np.pi,np.pi,1000) # theta=omega*T
func=1+np.exp(-2j*theta)
plot_ap(func,theta) #Dessinez côte à côte la caractéristique d'amplitude et la caractéristique de phase
Ça ressemble à ça.
Recommended Posts