Negative C Net for fast settling

Considering RL and CL, 

Normalized output Zunit = [ Zout || RL || 1/(sCL)  ] / RL=

 \frac{1+s/(gm/2Cs)}{1+(R_{L}C_{L}+2C/gm-2R_{L}C)s+2R_{L}C_{L}Cs^{2}/gm}

[ Assume C (node effective Cap) = 2×C, A=gmRL, Ck=C/CL ], use python to calculate step response vs. couples of A-Ck:

#!/usr/bin/env python3
from scipy.signal import lti,step2
import matplotlib.pyplot as plt
import pyplot_color

def cross(sig_in, Vthresh, edge_num, edge_kind):
    # sig_in is sig after interpolation w/i min resolution step
    # to mimic cross function in ADE/Ocean
    i = 0
    time = []
    for i in range(0,len(sig_in['x'])):
        if i < len(sig_in['x'])-1:
            if sig_in['y'][i] <= Vthresh and sig_in['y'][i+1] > Vthresh:
                if edge_kind == 'either':
                    time.append(sig_in['x'][i])
                    if len(time) == edge_num:
                        break
                if edge_kind == 'rising':
                    time.append(sig_in['x'][i])
                    if len(time) == edge_num:
                        break

            if sig_in['y'][i] > Vthresh and sig_in['y'][i+1] <= Vthresh:
                if edge_kind == 'either':
                    time.append(sig_in['x'][i])
                    if len(time) == edge_num:
                        break
                if edge_kind == 'falling':
                    time.append(sig_in['x'][i])
                    if len(time) == edge_num:
                        break
        else:
            print('[-] cross failed...')
            sys.exit()
        i += 1
    return time[edge_num-1]

color_list = pyplot_color.color_for_pyplot
color_index = 0

A_list = [0]
t_list = [1]
plt.figure()
plt.subplot(1,2,1)

for i in range(1,200,10):
    A = i / 100
    A_list.append(A)
    Ck = ((2*A)**0.5-A)/(2-A)
    k = Ck/A
    damp = (A/Ck+Ck/A+2+A*Ck-2*(A+Ck))**0.5/2
    # if RLCL=1/3 -> tSettle = 1
    wz = 3/k
    wn = (3*wz)**0.5
    Hs = lti([1/wz,1],[1/wn**2,2*damp/wn,1]) # transfer expression
    time, volt = step2(Hs)
    sig_step = {'x':time,'y':volt}
    t_95per = cross(sig_step,0.95,1,'rising')
    t_list.append(t_95per)
    print('A=%3.3f,Ck=%3.3f,Damp=%3.3f,tSet=%3.3f'%(A,Ck,damp,t_95per))
    plt.plot(time,volt,color=color_list[color_index],label='A=%3.3f,Ck=%3.3f'%(A,Ck))
    color_index += 1

plt.plot([0,2],[1.05,1.05],'r--')
plt.plot([0,2],[0.95,0.95],'g--')
plt.xlabel('normalized t')
plt.ylabel('normalized volt')
plt.xlim(0,2)
plt.legend(loc='best',fontsize=10)
plt.grid(True)
plt.subplot(1,2,2)
plt.plot(A_list,t_list)
plt.scatter(A_list,t_list)
plt.xlabel('gmRL')
plt.ylabel('95% tSettling time normalized t')
plt.grid(True)
plt.show()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值