一阶LC滤波器算法的仿真和FPGA实现
滤波器设计是一个很麻烦的事情,在实际的项目设计时一般都是利用数字滤波来代替模拟滤波,但是数字滤波有时候需要很多资源也很难达到仅仅需要一个电容和电阻实现的模拟滤波电路。在实际的数字滤波器设计时基本的滤波算法都是根据LC模型来进行推导和演变来的。针对LC滤波这里把物理模型进行详细的推导建模,并利用仿真软件进行仿真,这样能有直观的感受。
1、 高频截至的LC电路模型
一阶RC低通滤波器的硬件电路如图:
首先根据基尔霍夫定律写出这个RC无源网络的动态方程。
对上面模型仿真,输入信号源为偏置1V,峰峰值为2V的正弦波信号,电阻为1K,电容为1uF,统时域输入输出关系如下图:
系统的噪声响应如图
系统的频率特性如下图所示
系统的相位特性如下图所示
上面仅仅分析了其中一种情况,其他类型的分析过程和上面是一致的,总结一阶LC低通滤波器如下表格:
C语言代码实现:
void HighPassFilter_RC_1order(float *Vi, float
*Vi_p, float *Vo, float *Vo_p, float sampleFrq )
{
float CutFrq, RC, Coff;
CutFrq = 0.5;
RC = (float)1.0/2.0/PI/CutFrq;
Coff = RC/(RC + 1/sampleFrq);
*Vo = ((*Vi) - (*Vi_p) +(*Vo_p) )*Coff ;
*Vo_p = *Vo;
*Vi_p = *Vi;
}
根据上面分析总结一阶LC高通滤波器特性如下表:
一阶LC高通滤波器系统离散模型函数:
对一阶LC高通滤波器模型仿真,输入信号源为偏置1V,峰峰值为2V的正弦波信号,电阻为1K,电容为1uF,统时域输入输出关系如下图:
系统的频率特性如下图所示
系统的相位特性如下图所示
C语言代码实现:
void
HighPassFilter_RC_1order(float *Vi, float *Vi_p, float *Vo, float *Vo_p, float
sampleFrq )
{
float CutFrq, RC, Coff;
//high pass filter @cutoff frequency =0.5 Hz
CutFrq = 0.5;
RC = (float)1.0/2.0/PI/CutFrq;
Coff = RC/(RC + 1/sampleFrq);
*Vo = ((*Vi) - (*Vi_p) +(*Vo_p) )*Coff ;
*Vo_p = *Vo;
*Vi_p = *Vi;
}