一阶高通滤波器设计

需先阅读文档信号的频域分析

适用场合

除去长期变化,保留短暂变化。高通滤波器加于陀螺仪,可以滤掉温漂;

抽取模型

由RC高通电路
【滤波器】一阶高通滤波器设计 - 图1
得到Vout与Vin的关系
【滤波器】一阶高通滤波器设计 - 图2
_
其中 【滤波器】一阶高通滤波器设计 - 图3 【滤波器】一阶高通滤波器设计 - 图4

即为电路一阶高通滤波器的数学模型

公式推导

【滤波器】一阶高通滤波器设计 - 图5可得s域的表达式
【滤波器】一阶高通滤波器设计 - 图6
用一阶后向差分法进行s域到z域的变换
【滤波器】一阶高通滤波器设计 - 图7
带入并整理可得
【滤波器】一阶高通滤波器设计 - 图8
【滤波器】一阶高通滤波器设计 - 图9

Z域到时域变换得到序列关系

【滤波器】一阶高通滤波器设计 - 图10

【滤波器】一阶高通滤波器设计 - 图11

【滤波器】一阶高通滤波器设计 - 图12

【滤波器】一阶高通滤波器设计 - 图13

即为数字一阶高通滤波器的计算公式
Ts为采样周期,Wc为截止角频率
【滤波器】一阶高通滤波器设计 - 图14
fc为滤波器的截止频率
即可根据所需滤波器的截止频率和采样周期得到公式中的系数α,再依据公式中的序列得到处理后的输出序列

编程实现

  1. %三种频率的实验信号
  2. f1 = 50;%Hz
  3. f2 = 100;%Hz
  4. f3 = 400;%Hz
  5. Input_1 = 0.3*sin(2*pi*f1*Time);
  6. Input_2 = 0.2*sin(2*pi*f2*Time);
  7. Input_3 = sin(2*pi*f3*Time);
  8. Input_All = Input_1+Input_2+Input_3;

设想信号3为所需高频信号,信号1,2为低频干扰信号,需要设计滤波器将其过滤
信号时域和频域特征如图
1.jpg
2.jpg
此时多种信号叠加后为
3.jpg
其中图形中波形的包络也具有一定的波形特征,即为信号中低频信号的存在
从频域上选取滤波器的截止频率为350Hz,由公式计算滤波器系数a

  1. fc =350;%(Hz)截止频率
  2. %----------滤波器-------------------------------------------------
  3. global a;
  4. a = 1/(1+2*pi*fc*Ts);

滤波器用一函数来实现,将当前采样值,上一历史采样值和上一历史输出值作为参数,得到当前输出值

  1. function Output_filter = Filter_HPF(sample,sample_Last,Output_filter_Last)
  2. global a;
  3. Output_filter = (sample-sample_Last+Output_filter_Last) * a;
  4. end

模仿C语言的循环来调用函数以便向单片机移植

  1. Output = zeros(1,N);
  2. for N = 1:length(Input_All)
  3. if(N == 1)
  4. Output(N) = Filter_HPF(Input_All(N),0,0);
  5. else
  6. Output(N) = Filter_HPF(Input_All(N),Input_All(N-1),Output(N-1));
  7. end
  8. end

下图在时域和频域上显示滤波效果
4.jpg
5.jpg
如图,红色线条即为滤波后的波形和频域,滤波后的信号与原来相比包络信号变得不明显,低频信号得到了抑制

频域响应

我们将频率低于fs/2(奈奎斯特采样定理)的各种频率的信号通过该滤波器观察它的频域相应得到
1.jpg
在正频域[0~500]Hz,即满足低通特性,截止频率为350Hz

程序源码

HPF_1.m
HPF_1N_Response.m