数字电源软件中经常会用到低通滤波函数,如对ad采样数据或对上传监控数据的滤波等,那么本文首先介绍一阶低通滤波器的软硬件实现,最后给出dspic33c系列mcu 低通滤波器的代码实现给大家作为参考。
1. 模拟滤波器
import numpy as np
c = 220e-12
fc = 1000
r=1/(2np.pic*fc)
print(r =, r)
图 2 - rc低通滤波器bode图
获得上面bode图的python代码如下:
import numpy as npimport matplotlib.pyplot as pltimport control as ctrls = ctrl.tf('s')c = 220e-12r = 750e3fc = 1e3hp = 1/(1+(r*c)*s)f = np.logspace(-1, 6, 1000)w = 2 * np.pi * fmag,phase,omega=ctrl.bode_plot(hp,w,db=true,hz=true,deg=true,plot=true,label='hp')plt.legend()plt.show()pole=ctrl.pole(hp)print(pole =, pole/(2*np.pi), hz)2. 数字滤波器
获得上面bode图的python代码如下:
import numpy as npimport matplotlib.pyplot as pltimport control as ctrl############ continuous s transfer function. ############s = ctrl.tf('s')fc = 1e3 # low pass filter cut-off frequency is 1khzt = 1/(2*np.pi*fc)hp = 1/(1+t*s)f = np.logspace(-1, 6, 1000)w = 2 * np.pi * fmag,phase,omega=ctrl.bode_plot(hp,w,db=true,hz=true,deg=true,plot=true, grid=true, label='hp')pole=ctrl.pole(hp)print(pole =, pole/(2*np.pi), hz)############ discrete z transfer function. ############z = ctrl.tf('z')fs = 100e3 # sample frequency is 100khz, fc is still 1khzts = 1/fshpd = (1+z**(-1))/((ts+2*t)/ts - (2*t-ts)/ts*z**(-1))print(hpd)hpd.dt = tsmag,phase,omega=ctrl.bode_plot(hpd,w,db=true,hz=true,deg=true,plot=true, grid=true, label='hpd')plt.legend()plt.show()公式(2)进一步转化为软件可实现的差分方程见公式(3)。
求得上面系数的python代码如下:
import numpy as npfc = 1e3 # low pass filter cut-off frequency is 1khzfs = 100e3 # sample frequency is 100khzts = 1/fst = 1/(2*np.pi*fc)kxn = ts/(ts+2*t)kyn = (2*t-ts)/(ts+2*t)print(kxn =, kxn, kyn=, kyn)由一阶低通滤波器的离散化差分方程 - 公式(3),可进行软件编码实现该滤波函数,dspic33c系列mcu的低通滤波函数参考代码如下。
#include libq.h typedef struct{ /* parameters */ int16_t kxn; int16_t kyn; int16_t xn; int16_t yn;}lpf_obj;int16_t lpf(int16_t x, lpf_obj *l_obj){ int16_t y; //y = kxn * x + kxn * xn + kyn * yn //yn = y; //xn = x; y = _q15add(_q15add(__builtin_mulss(l_obj- >kxn,x) > >15, __builtin_mulss(l_obj- >kxn,l_obj- >xn) > >15), __builtin_mulss(l_obj- >kyn,l_obj- >yn) > >15); l_obj- >yn = y; l_obj- >xn = x; return y;}为了调用定点q格式数学函数,需要包含头文件libq.h,因此linker需要包含相应的库,生成连接属性-lq或-lq-dsp。操作如下图所示。
图 4 - 链接属性设置
最后若一阶低通滤波函数不能满足要求可以两个该一阶低通滤波器进行级联获得二阶滤波器的效果。
霍尔电流传感器在UPS蓄电池浮充电流远程监测方案的应用
主流的无刷直流电机的控制方法
上海发布工业互联网产业创新工程实施方案,在工业领域率先部署
小天才Z7怎么样?拆解评测儿童电话手表 搭载高通骁龙Wear4100处理器
中国移动:千兆引领.生态赋能
介绍一阶低通滤波器的软硬件实现
特斯拉美国销售额出现下滑 中国市场第三季度销售额提升64%
荣耀9什么时候上市?荣耀9最新消息:华为荣耀9超窄边框真机现身,配色惊艳将搭载人工智能
苹果耳机新专利曝光:耳机降噪技术,或AirPods能用上!
如何用区块链来构建一些特定的虚拟经济
在未来汽车能够远程控制家居系统吗
输入输出接口的类型和功能特点
云栖大会人脸识别闸机【技术亮点篇3】--人脸识别闸机摆闸可达500万次
C51单片机串口的使用方法解析
微软鼠标走向人体工程学 带你赏析微软精准鼠标的ID设计
全球首款最轻的助行器,为行动不便的人士带来帮助
spring boot入门篇
农机蓄电池冬季如何防冻
国产AI芯片如何助力车路协同突破落地瓶颈?
循环队列在网络摄像头项目中处理多则消息的运用