电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
RC带通滤波器和高通滤波器数字化公式推理
分 享
扫描二维码分享
RC带通滤波器和高通滤波器数字化公式推理
滤波器,C语言
跨世纪大傻瓜
关注
发布时间: 2020-04-20
丨
阅读: 2423
本节主要讲解RC带通滤波器和RC高通滤波器的硬件拓扑、幅频特性,以及将幅频特性进行数字化,以便利用C语言代码进行实验验证。 (一)带通滤波器 首先我们进行幅频特性的推导 (1)幅频特性 ![](https://cf03.ickimg.com/bbsimages/202004/bedbd92ac7f91136cbc3dad7919d4de9.png) 传递函数为: ![](https://cf03.ickimg.com/bbsimages/202004/bf92651fa307da0c18ed7e81bd9cbfa3.png) 传递函数的幅值和相位为: ![](https://cf03.ickimg.com/bbsimages/202004/40c6b473911f0da0c1302be5d43d1d72.png) ![](https://cf03.ickimg.com/bbsimages/202004/cd36b64ebb06e9b149e792fe4d3c5d97.png) ![](https://cf03.ickimg.com/bbsimages/202004/a7ba068fa327b24cebabd6a2424aaeb3.png) 通带带宽![](https://cf03.ickimg.com/bbsimages/202004/5b68b7af52b58eb3f90f33e1835d45c0.png) (2)传递函数的数字化 通过Z变换(方法很多,如一阶前向差分、冲激响应不变法、双线性变换等,这里用一阶后向差分法)(Tc为采样周期) 变换为z表达式为 ![](https://cf03.ickimg.com/bbsimages/202004/dca530fa1f5a960835039df9badcf804.png) C程序: void bpf2_calc(BPF2 *v)//yn+1=kb*(xn-xn_1)+a0yn_1-a1yn_2; { v->yn = _IQmpy(v->kb,v->xn-v->xn_1)+_IQmpy(v->a0,v->yn_1)-_IQmpy(v->a1,v->yn_2); //v->xn_2 = v->xn_1; v->xn_1 = v->xn; v->yn_2=v->yn_1; v->yn_1 = v->yn; } (二)高通滤波器 (1)幅频特性 ![](https://cf03.ickimg.com/bbsimages/202004/60f740cfc54e8cc230fbb132b370aa16.png) (2)传递函数的数字化 令![](https://cf03.ickimg.com/bbsimages/202004/5e635a96cfb2198da70f0dd5b2ac3db8.png),通过Z变换(方法很多,如一阶前向差分、冲激响应不变法、双线性变换等,这里用一阶后向差分法)![](https://cf03.ickimg.com/bbsimages/202004/c62ab5b218a61fc7e2bca0fb1abb053d.png)(Tc为采样周期) 变换为z表达式为 ![](https://cf03.ickimg.com/bbsimages/202004/9dcaed7424da4252e0175c82466f088f.png) ![](https://cf03.ickimg.com/bbsimages/202004/6d195938b154626d6fe467f5b2b7683f.png) C程序: void hpf_calc( HPF *v) { v->k = _IQdiv(_IQ(1),_IQmpy(v->Tc,v->wc)+_IQ(1)); v->y = _IQmpy(v->k, v->y_old + v->x - v->x_old); v->x_old = v->x; v->y_old = v->y; } (三)低通滤波器 一阶RC低通滤波器 (1)幅频特性 ![](https://cf03.ickimg.com/bbsimages/202004/7ecb4ea6d3a1f0495351198e20a8f90e.png) 传递函数为 ![](https://cf03.ickimg.com/bbsimages/202004/1486ee909b6eba4de0be9a235fb2fd3f.png) (2)传递函数的数字化 将传递函数数字化 令![](https://cf03.ickimg.com/bbsimages/202004/5ecc476c311a2befff727527ecc45499.png),通过Z变换(方法很多,如一阶前向差分、冲激响应不变法、双线性变换等,这里用一阶后向差分法)![](https://cf03.ickimg.com/bbsimages/202004/0324d3856c628c7e0e5ca56ca4e2d666.png)(Tc为采样周期) 变换为z表达式为 ![](https://cf03.ickimg.com/bbsimages/202004/f9066e25c6535cc4a501033b11ed2549.png) ![](https://cf03.ickimg.com/bbsimages/202004/1b847936148ee36c43f441ec94ce7662.png) 当采样周期足够小,![](https://cf03.ickimg.com/bbsimages/202004/aabe86fb526517533038be8359127bf2.png) 截止频率![](https://cf03.ickimg.com/bbsimages/202004/df26efe09b68ee76033b8b3a103a6bc2.png),![](https://cf03.ickimg.com/bbsimages/202004/43494ab8258181d81f1bef45cfa14e6e.png) 数字化的一阶低通滤波器为:![](https://cf03.ickimg.com/bbsimages/202004/04bfb77c6a16640052beef4f2f9de06a.png) C程序: void lpf_calc( LPF *v) { v->y += _IQmpy(v->Tc,_IQmpy(v->wc,(v->x - v->y_old))); v->y_old = v->y; } 下面通过实际代码利用DSP28335开发板进行低通滤波器的实验验证 ![](https://cf03.ickimg.com/bbsimages/202004/5564ed1a022d11d0a50c1d9509a1bc76.png) 首先在电机控制信号中注入500Hz的高频正弦信号,然后利用数字化的RC低通滤波器对目前可以注入的500Hz高频信号进行滤波实验。 通过示波器实时抓取滤波前后的高频信号,如下图所示 ![](https://cf03.ickimg.com/bbsimages/202004/43f5c09b741b6699cd43f2b385fedb74.png) 上图中橙色的为滤波前的高频信号,绿色的是经过低通滤波后的波形,波形有明显的改善,但是我们注意到低通滤波器带来的相位偏移,如下图 ![](https://cf03.ickimg.com/bbsimages/202004/1a6e7f3f65da4dddd0d9ca741bc231ea.png) 该相位偏移对于电机控制具有较大的影响,需要在算法中对相位信息进行相应的相位补偿策略来弥补低通滤波算法的缺点。关于带通滤波器和高通滤波器,和低通滤波器在算法实现上是相同的道理,只是在选取截止频率时需要根据自己的信号特点确定,相应的相位偏移也需要根据实测值进行相应的补偿。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
跨世纪大傻瓜
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交