Bootstrap

Python实现RC高通滤波器

1、一阶RC高通滤波器
1.1 电路图
在这里插入图片描述
(1)微分公式:
V O = R C ( d V i d t − d V O d t ) V_O=RC(\frac{dV_i}{dt}-\frac{dV_O}{dt}) VO=RC(dtdVidtdVO
(2)微分公式离散化
V o ( n ) = R C / T [ V i ( n ) − V i ( n − 1 ) ] − [ V o ( n ) − V o ( n − 1 ) ] V_o (n)=RC/T {[V_i (n)-V_i (n-1)]-[V_o (n)-V_o (n-1)]} Vo(n)=RC/T[Vi(n)Vi(n1)][Vo(n)Vo(n1)]
V O ( n ) = R C / ( T + R C ) [ V i ( n ) − V i ( n − 1 ) ] + R C / ( T + R C ) V O ( n − 1 ) V_O (n)=RC/(T+RC) [V_i (n)-V_i (n-1)]+RC/(T+RC) V_O (n-1) VO(n)=RC/(T+RC)[Vi(n)Vi(n1)]+RC/(T+RC)VO(n1)

(3)传递函数
V i ( s ) ( V O ( s ) = s s + 1 / R C = R C s 1 + R C s \frac{V_i (s)}{(V_O (s)}=\frac{s}{s+1/RC}=\frac{RCs}{1+RCs} (VO(s)Vi(s)=s+1/RCs=1+RCsRCs
1.2 算法实现

  def highPassFilter_RC_1order(self,Vi):
        #R  = 0.5
        #C  = 0.001
        RC = 1.0/(2.0*math.pi*self.CutFrq) 
        #RC = R*C
        T  = 1/self.sampleFrq 
        Vo = RC/(T+RC)*(Vi-self.Vi_last+self.Vo_last)	
        self.Vi_last = Vi      
        self.Vo_last = Vo

(1)算法仿真结果
在这里插入图片描述
(2)FFT分析
在这里插入图片描述

2、二阶RC高通滤波器
2.1 电路图
在这里插入图片描述

(1)微分公式:
u 0 = R 2 C 2 ( d 2 u I ) / ( d 2 t ) − R 2 C 2 ( d 2 u o ) / ( d 2 t ) − 2 R C ( d u o ) / d t u_0=R^2 C^2 (d^2 u_I)/(d^2 t)-R^2 C^2 (d^2 u_o)/(d^2 t)-2RC (du_o)/dt u0=R2C2(d2uI)/(d2t)R2C2(d2uo)/(d2t)2RC(duo)/dt
(2)微分公式离散化:
u 0 ( n ) = R 2 C 2 T 2 [ u i ( n ) − 2 u i ( n − 1 ) + u i ( n − 2 ) ] − R 2 C 2 T 2 [ u o ( n ) − 2 u o ( n − 1 ) + u o ( n − 2 ) ] − 2 R C T ( u o ( n ) − u o ( n − 1 ) ) u_0 (n)=\frac{R^2 C^2}{T^2} [u_i (n)-2u_i (n-1)+u_i (n-2)]-\frac{R^2 C^2}{T^2 } [u_o (n)-2u_o (n-1)+u_o (n-2)]-\frac{2RC}{T} (u_o (n)-u_o (n-1)) u0(n)=T2R2C2[ui(n)2ui(n1)+ui(n2)]T2R2C2[uo(n)2uo(n1)+uo(n2)]T2RC(uo(n)uo(n1))
u 0 ( n ) = R 2 C 2 T 2 + R 2 C 2 + 2 R C [ u i ( n ) − 2 u i ( n − 1 ) − u o ( n − 2 ) ] + 2 R 2 C 2 + 2 R C T T 2 + R 2 C 2 + 2 R C ( u o ( n − 1 ) u_0 (n) = \frac{R^2C^2}{T^2+R^2C^2+2RC}[u_i(n)-2u_i(n-1)-u_o(n-2)]+\frac{2R^2C^2+2RCT}{T^2+R^2C^2+2RC}(u_o(n-1) u0(n)=T2+R2C2+2RCR2C2[ui(n)2ui(n1)uo(n2)]+T2+R2C2+2RC2R2C2+2RCT(uo(n1)
(3)传递函数
V o ( s ) V i ( s ) = ( R C s ) 2 ( R C s ) 2 + 2 R C s + 1 \frac{V_o (s)}{V_i (s)}=\frac{(RCs)^2}{(RCs)^2+2RCs+1} Vi(s)Vo(s)=(RCs)2+2RCs+1(RCs)2
2.2 算法实现

def highPassFilter_RC_2order(self,Vi):
        #R  = 0.5
        #C  = 0.001
        RC = 1.0/(2.0*math.pi*self.CutFrq) 
        #RC = R*C
        T  = 1/self.sampleFrq 
        Vo = (RC*RC)/(T*T+RC*RC+2*RC)*(Vi-2*self.Vi_last+self.Vi_last_1-self.Vo_last_1)+(2*RC*RC+2*RC*T)/(T*T+RC*RC+2*RC)*self.Vo_last
      
        
        self.Vi_last_1 = self.Vi_last
        self.Vo_last_1 = self.Vo_last
        
        self.Vo_last = Vo
        self.Vi_last = Vi      
        
        return Vo

(1)实验结果
在这里插入图片描述
可见信号衰减较为严重,让输出有75分贝的增益后结果如下:

在这里插入图片描述
可见低频信号被明显滤去
若增益为80dB,仿真结果为:
在这里插入图片描述

;