一阶高通滤波器设计
需先阅读文档信号的频域分析
适用场合
除去长期变化,保留短暂变化。高通滤波器加于陀螺仪,可以滤掉温漂;
抽取模型
由RC高通电路
得到Vout与Vin的关系
_
其中
公式推导
令可得s域的表达式
用一阶后向差分法进行s域到z域的变换
带入并整理可得
Z域到时域变换得到序列关系
令
即为数字一阶高通滤波器的计算公式
Ts为采样周期,Wc为截止角频率
fc为滤波器的截止频率
即可根据所需滤波器的截止频率和采样周期得到公式中的系数α,再依据公式中的序列得到处理后的输出序列
编程实现
%三种频率的实验信号
f1 = 50;%Hz
f2 = 100;%Hz
f3 = 400;%Hz
Input_1 = 0.3*sin(2*pi*f1*Time);
Input_2 = 0.2*sin(2*pi*f2*Time);
Input_3 = sin(2*pi*f3*Time);
Input_All = Input_1+Input_2+Input_3;
设想信号3为所需高频信号,信号1,2为低频干扰信号,需要设计滤波器将其过滤
信号时域和频域特征如图
此时多种信号叠加后为
其中图形中波形的包络也具有一定的波形特征,即为信号中低频信号的存在
从频域上选取滤波器的截止频率为350Hz,由公式计算滤波器系数a
fc =350;%(Hz)截止频率
%----------滤波器-------------------------------------------------
global a;
a = 1/(1+2*pi*fc*Ts);
滤波器用一函数来实现,将当前采样值,上一历史采样值和上一历史输出值作为参数,得到当前输出值
function Output_filter = Filter_HPF(sample,sample_Last,Output_filter_Last)
global a;
Output_filter = (sample-sample_Last+Output_filter_Last) * a;
end
模仿C语言的循环来调用函数以便向单片机移植
Output = zeros(1,N);
for N = 1:length(Input_All)
if(N == 1)
Output(N) = Filter_HPF(Input_All(N),0,0);
else
Output(N) = Filter_HPF(Input_All(N),Input_All(N-1),Output(N-1));
end
end
下图在时域和频域上显示滤波效果
如图,红色线条即为滤波后的波形和频域,滤波后的信号与原来相比包络信号变得不明显,低频信号得到了抑制
频域响应
我们将频率低于fs/2(奈奎斯特采样定理)的各种频率的信号通过该滤波器观察它的频域相应得到
在正频域[0~500]Hz,即满足低通特性,截止频率为350Hz