# filters **Repository Path**: cyt-curry/filters ## Basic Information - **Project Name**: filters - **Description**: 使用面向对象思想,编写了一个一阶高通滤波器和一阶低通滤波,以及均值滤波。其中,滑动平均值滤波还在开发中。前面两个算法是根据无源RC滤波电路,通过离散化推导出来的公式。在笔记中有详细推导过程。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-02 - **Last Updated**: 2022-08-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # filters #### 介绍 使用面向对象思想,编写了一个一阶高通滤波器和一阶低通滤波,以及均值滤波。其中,滑动平均值滤波还在开发中。前面两个算法是根据无源RC滤波电路,通过离散化推导出来的公式。在笔记中有详细推导过程。 # 滤波器 ###### 使用面向对象思想,实现了低通滤波器,高通滤波器以及均值滤波。目前正在编写滑动平均值滤波 ## 低通滤波器(一阶) 过滤掉一些高频的信号。高于截止频率部分会被滤掉,保留低于截止频率的部分 #### 定义 对于一阶低通滤波而言,从控制模型上分析就是一个一阶惯性环节,其描述形式如式所示。 $$ H(s)=\frac{1}{1+\frac{s}{w_c}},w_c=2\pi*f_C,\text{其中f_c为低通滤波器的截止频率} $$ ### 数学原理分析 #### 电路构成(一阶RC低通滤波) ![img](filters.assets/v2-e61e3dfe67b6bd32d272d4b05c107e5b_1440w.jpg) 对于这个电路输入输出关系的传递函数 $$ H(jw)=\frac{V_{out}}{V_{in}}=\frac{\frac{1}{jwC}}{R+\frac{1}{jwC}}=\frac{1}{1+jwRC} $$ 令s=jw,得到 $$ H(s)=\frac{1}{1+sRc} $$ 由定义中的模型公式可以知道此时 $$ RC=\frac{1}{2\pi*f_C} $$ 所以,低通滤波器的截止频率为 $$ f_c=\frac{1}{2\pi*RC} $$ 为了设计一个数字化的低通滤波器,需要对上面的连续系统做离散化处理(z变换)。对于LPF,主要采用一阶后向差分法,数学表达式为 $$ s=\frac{1-z^{-1}}{T_s},其中T_s表示采样周期 $$ 所以,LPF的数字表达式为 $$ H(z)=\frac{V_{out}(z)}{V_{in}(z)}=\frac{1}{1+\frac{1-z^{-1}}{T_s}RC}=\frac{T_s}{T_s+(1-z^{-1})RC} $$ 可以变换成 $$ V_{in}(z)=(1+\frac{RC}{T_s})V_{out}(z)-\frac{RC}{T}V_{out}(z)z^{-1} $$ 利用z变换的一阶前向差分,滞后性质可转化为差分方程 性质为 $$ Z[y(kT-nT)]=z^{-1}Y(z) $$ $$ V_{in}(n)=(1+\frac{RC}{T_s})V_{out}(n)-\frac{RC}{T_s}V_{out}(n-1) $$ 最终可以得到LPF的差分表达式为 $$ V_{out}(n)=V_{out}(n-1)+\frac{T_s}{T_s+RC}(V_{in}(n)-V_{out}(n-1)) $$ 令滤波系数 $$ \alpha=\frac{T_s}{T_S+RC},且\alpha\in[0,1],那么LPF的差分表达式可以改写为\\ V_{out}(n)=V_{out}(n-1)+\alpha(V_{in}-V_{out}(n-1))\\ 这个公式可以改写为 V_{out}(n)=(1-\alpha)V_{out}(n-1)+\alpha V_{in}(n) $$ ##### 所以,算法实现中使用的公式为 $$ Y(n)=\alpha X(n) + (1-\alpha) Y(n-1) \\ \text{X(n):本次采样值}\quad \text{Y(n-1):上一次的滤波值}\quad \alpha:滤波系数 $$ ## 高通滤波器(一阶) 过滤掉一些低频的信号。与低通滤波对偶 ### 数学原理分析 ![img](filters.assets/20200208052846504.png) $$ H(jw)=\frac{1}{1+\frac{1}{jwRC}}\\ 令s=jw \\ H(s)=\frac{V_{out}(s)}{V_{in}(s)}=\frac{sRC}{sRC+1}\\ 令s=\frac{1-z^{-1}}{T_s},其中T_s表示采样周期\\ H(z)=\frac{V_{out}(z)}{V_{in}(z)}=\frac{\frac{1-z^{-1}}{T_s}RC}{\frac{1-z^{1}}{T_s}RC+1}\\ V_{out}(z)-z^{-1}V_{out}(z)+\frac{T_s}{RC}V_{out}(z)=V_{in}(z)-z^{-1}V_{in}(z)\\ V_{out}(n)-V_{out}(n-1)+\frac{T_s}{RC}V_{out}(n)=V_{in}(n)-V_{in}(n-1)\\ V_{out}(n)=\frac{RC}{RC+T_s}(V_{in}(n)-V_{in}(n-1))+\frac{T_s}{RC+T_s}V_{out}(n-1)\\ 令滤波系数\alpha=\frac{T_s}{T_s+RC},那么HPL的差分表达式为\\ V_{out}(n)=\alpha V_{out}(n-1)+(1-\alpha)(V_{in}(n)-V_{in}(n-1)) $$ ##### 程序一般使用的公式是 $$ Y(n)=\alpha Y(n-1) + (1-\alpha)(X(n)-X(n-1)) \\ \text{X(n):本次采样值}\quad \text{Y(n-1):上一次的滤波值}\quad \alpha:滤波系数 $$