低通滤波器
1.硬件设计
2.公式
离散后得到:(具体的推导可看一阶RC低通滤波器的数学模型及算法实现_rc低通滤波器传递函数-CSDN博客)
3.软件绘制
在Matlab线上(官方的账户注册可免费线上使用20小时,具体路径可看图1)按照以下代码绘制。
图1 可线上使用matlab
RC=0.984375;
y1 = tf(1,[RC,1]);
bode(y1);
其中y1是低通滤波器的传递函数,bode(y1)是绘制波特图。
结果如图所示:
然后输入以下代码
f_rad=2*π*f=314;
[mag,phase] = bode(y1,f_rad);
结果mag可以得到当前频率50Hz的增益值。 phase指当前频率50Hz的相位。
4.C语言设计
void LowPass(int32_t Xn,int32_t* Yn_1,int32_t* Yn)
{
cof1=T/(RC+T);
cof2=1-cof1;
*Yn = *Yn_1*cof2+Xn*cof1;
*Yn_1 = *Yn;
}
高通滤波器
1.硬件设计
2.公式
离散后可得:
一阶RC滤波器的算法实现(低通和高通)_rc滤波算法-CSDN博客
3.软件绘制
matlab最终输入代码为:
RC=0.984375;
s = tf([RC, 0],[RC, 1]);
bode(s);
具体的波特图如下所示。
freq_radpersec=2*π*f=314;
[mag,phase] = bode(s,freq_radpersec); -----mag为当前freq_radpersec对应的增益值(输出电压比输入电压),phase为当前freq_radpersec对应的相位值。
4.语言设计
void HighpassFilter(int32_t Xn,int32_t *Xn_1,int32_t *Yn_1,int32_t *Yn)
{
cof3=RC/(RC+T);
*Yn = cof3*( *Yn_1 +Xn- *Xn_1);
*Xn_1 = Xn;
*Yn_1 = *Yn;
}
注意:
1.截止频率为
语言设计内T为采样频率。它要大于截止频率的2倍以上。
2.算法处理时有一定的响应时间()。
3.若处理直流成分响应时间跟不上,可以初始时扔掉部分采样值(语言设计的Xn)或者算法从几个数值以后才处理。