跳至內容

File:Minimum and maximum phase responses.gif

頁面內容不支援其他語言。
這個檔案來自維基共享資源
維基百科,自由的百科全書

Minimum_and_maximum_phase_responses.gif (450 × 450 像素,檔案大小:573 KB,MIME 類型:image/gif、​循環、​55 畫格、​2.8秒)


摘要

描述
English: Shows the phase responses of a minimum and maximum phase responses when is a monomial with . Both filters have the same gain response. Top : Minimum phase filter. Bottom : Maximum phase filter. Left : Nyquist diagram. Right : Phase responses
日期
來源 自己的作品
作者 fdeloche

授權條款

我,本作品的著作權持有者,決定用以下授權條款發佈本作品:
w:zh:創用CC
姓名標示 相同方式分享
您可以自由:
  • 分享 – 複製、發佈和傳播本作品
  • 重新修改 – 創作演繹作品
惟需遵照下列條件:
  • 姓名標示 – 您必須指名出正確的製作者,和提供授權條款的連結,以及表示是否有對內容上做出變更。您可以用任何合理的方式來行動,但不得以任何方式表明授權條款是對您許可或是由您所使用。
  • 相同方式分享 – 若要根據本素材進行再混合、轉換或創作,則必須以與原作相同或相容的授權來發布您的作品。

Generation code

Minimumphase.py

# coding: utf-8
'''Generate an animation showing the phase response for a minimum and maximum phase system'''
__author__      = "fdeloche"

# In[1]:

get_ipython().magic(u'matplotlib inline')
import sys
import numpy as np
import matplotlib.pyplot as pl
from matplotlib.animation import FuncAnimation

# In[2]:

createGif=True
pl.rc('xtick', labelsize=20)
pl.rc('ytick', labelsize=20)
pl.rc('font', weight='bold')

# In[3]:

fig, ((ax1, ax2), (ax3, ax4)) = pl.subplots(2, 2, figsize=(15, 15))
#fig.set_tight_layout(True)
a_x = 0.8
a_y=0.

m=1000

A = a_x + 1j*a_y
a_mod = np.abs(A)
Ainv = 1./A
a_xbis = np.real(Ainv)
a_ybis = -np.imag(Ainv)
# r^2 =  

x_lim_a = -0.3
x_lim_b = 1.9
y_lim = 1.1

t = np.linspace(0, 1, num=m)

ax1.scatter(0, 0, linewidth=6, color='blue')
ax1.scatter(1, 0, linewidth=4, color='blue')
ax1.set_xlim([x_lim_a, x_lim_b])
ax1.set_ylim([-y_lim, y_lim])

ax1.set_title('$1-az^{-1}$', fontsize=35)

ax1.plot(t, np.zeros(m), color='blue', linewidth=4)
ax1.plot(1+a_mod*np.cos(2*np.pi*t), a_mod*np.sin(2*np.pi*t), color='black')
ax1.axis('off')
ax1.text(-0.2, 0.1, "$(0, 0)$", fontsize=30, color='blue')
ax1.text(1-0.1, 0.1, "$(1, 0)$", fontsize=30, color='blue')



ax3.set_title('$\overline{a}(1-\overline{a}^{\ -1}z^{-1})$', fontsize=35)
ax3.scatter(0, 0, linewidth=6, color='blue')
ax3.scatter(np.abs(A), 0, linewidth=4, color='blue')
ax3.set_xlim([x_lim_a, x_lim_b])
ax3.set_ylim([-y_lim, y_lim])

ax3.plot(t*np.abs(A), np.zeros(m), color='blue', linewidth=4)
ax3.plot(np.abs(A)+np.cos(2*np.pi*t), np.sin(2*np.pi*t), color='black')
ax3.axis('off')
ax3.text(-0.1, 0.1, "$(0, 0)$", fontsize=30, color='blue')
ax3.text(-0.1+np.abs(A), 0.1, "$(\overline{a}, 0)$", fontsize=30, color='blue')

Z = np.cos(2*np.pi*t) - 1j*np.sin(2*np.pi*t)
G = np.angle(1-A*Z)

ax2.set_title('Phase response', fontsize=25)
ax2.plot(2*np.pi*t, G, color='blue', linewidth=2)
ax2.plot(2*np.pi*t, 0*t, color='black')

G2 = np.angle(1-np.conj(Ainv)*Z)

#ax4.set_title('Phase response', fontsize=25)
ax4.plot(2*np.pi*t, G2, color='blue', linewidth=2)
ax4.plot(2*np.pi*t, 0*t, color='black')


ax2.set_ylim([-np.pi, np.pi])

ax4.set_ylim([-np.pi, np.pi])

ax2.set_xlim([0, 6.283])

ax4.set_xlim([0, 6.283])

'''
ax2.spines["top"].set_visible(False)
ax2.spines["right"].set_visible(False)

ax4.spines["top"].set_visible(False)
ax4.spines["right"].set_visible(False)
'''

# In[4]:

line1, = ax1.plot(1-np.abs(A)*t*1, t*0, color='blue', linewidth=4)
line2, = ax3.plot(np.abs(A)-t*1, t*0, color='blue', linewidth=4)
line3, = ax1.plot((1-np.abs(A))*t*1, t*0, color='red', linewidth=4)
line4, = ax3.plot((np.abs(A)-1)*t, t*0, color='red', linewidth=4)

point1 = ax1.scatter(1-np.abs(A), 0, linewidth=5, color='red')
point2 = ax3.scatter(np.abs(A)-1, 0, linewidth=5, color='red')

line5, = ax2.plot(0*t, G[0]*t, color='red', linewidth=4)
line6, = ax4.plot(0*t, G2[0]*t, color='red', linewidth=4)

point3 = ax2.scatter(0, G[0], color='red', linewidth=5)
point4 = ax4.scatter(0, G2[0], color='red', linewidth=5)

# In[5]:

n_frames = 55
def update(i):
    t0 = i*1./n_frames
    B = [a_mod*np.cos(2*np.pi*t0), -a_mod*np.sin(2*np.pi*t0)]
    line1.set_xdata(1-t*B[0])
    line1.set_ydata(-t*B[1])
    C = [np.cos(2*np.pi*t0), -np.sin(2*np.pi*t0)]
    line2.set_xdata(np.abs(A)-t*C[0])
    line2.set_ydata(-t*C[1])
    
    line3.set_xdata((1-B[0])*t)
    line3.set_ydata(-t*B[1])
    line4.set_xdata((np.abs(A)-C[0])*t)
    line4.set_ydata(-t*C[1])
    
    point1.set_offsets((1-B[0], -B[1]))
    point2.set_offsets((np.abs(A)-C[0], -C[1]))
    
    line5.set_xdata(2*np.pi*t0+0*t)
    line6.set_xdata(2*np.pi*t0+0*t)

    Z0 = np.cos(2*np.pi*t0) - 1j*np.sin(2*np.pi*t0)
    G0 = np.angle(1-A*Z0)
    G20 = np.angle(1-np.conj(Ainv)*Z0)
    
    line5.set_ydata(G0*t)
    line6.set_ydata(G20*t)
    
    point3.set_offsets((2*np.pi*t0, G0))
    
    point4.set_offsets((2*np.pi*t0, G20))
    return line1, line2, line3, line4, point1, point2, line5, line6, point3, point4

# In[ ]:

anim = FuncAnimation(fig, update, frames=np.arange(0,n_frames), interval=50, blit=True)
if(createGif):
    anim.save('result.gif', dpi=30, writer='imagemagick')
else:
    pl.show()

# In[ ]:

說明

添加單行說明來描述出檔案所代表的內容

在此檔案描寫的項目

描繪內容

檔案歷史

點選日期/時間以檢視該時間的檔案版本。

日期/時間縮⁠圖尺寸使用者備⁠註
目前2016年9月21日 (三) 09:35於 2016年9月21日 (三) 09:35 版本的縮圖450 × 450​(573 KB)IxnayUser created page with UploadWizard

下列頁面有用到此檔案:

全域檔案使用狀況

以下其他 wiki 使用了這個檔案: