当前位置: 首页 > 编程日记 > 正文

iir数字滤波器_手把手教系列之一阶数字滤波器设计实现(附代码)

b542e08e86b69683b731d5c19c975be3.png

[导读] 前面分享了 IIR/FIR/mean/梳状数字滤波器的具体设计实现,这几种使用起来或许觉得计算量大,相对复杂。实际工程应用中通常有必要过滤来自传感器或音频流的数据,以抑制不必要的噪声。有的应用场景,可能只需要一个最简单的一阶滤波器即可。所以今天来分享一下怎么设计实现一阶数字滤波器。

一阶 RC 滤波?

小伙伴们一定都用过下面这个无源 RC 低通滤波电路:d9cd90a93fb184f57d2c9e771bec4c15.png其拉普拉斯模型如下:205bc09dbab40371683ec21966eadd9c.png由于

cddb13fefd46e5991d3d543713498bc2.png

所以:

caefe52eccf62847cc9855f64125f314.png

其幅频响应为:

a7998c23a7d8b8b4cfa0cca707a6f2eb.png

由其传递函数可知,这是一个单极点系统,其阻带满足-20dB/10 倍频程斜率下降。其截止频率为:

如把 C/R 交换位置则变成了高通滤波器,其截止频率依然按上式进行计算。这里也分享一个可在线计算的网址给大家:

http://www.elecfans.com/tools/rclvboqijiezhipinlv.html

其通带增益为 0dB。为什么要先谈谈硬件的一阶滤波器呢? 因为这个是大家最为熟悉的东西,而且也一定学过对其进行幅频响应分析。

既然硬件很容易实现一阶低通或者高通滤波器,那么为什么还要讨论一阶数字滤波器呢?

  • 硬件滤波器需要 RC 器件,R/C 的规格并不能随意选取,受厂家规格限制,其数值并不连续,特殊规格需要定制
  • 数字滤波器非常灵活,一阶数字滤波器计算代价极低。随便一个单片机都可以玩的转。
  • 在满足香农采样定理的前提下可灵活实现截止频率。

数字滤波器

这里直接把差分方程列出来,具体推导就不罗嗦了,有兴趣可以找书看看,比较容易:

其中

表示滤波时间常数,T 表示采样周期。

MATLAB 代码

clc; format compact
s = tf('s');
w = 50; % rad/s
H = w/(s+w)
T = 1/500;
Hd = c2d(H,T,'zoh')
opts = bodeoptions;
opts.FreqUnits = 'rad/s';
opts.XLim = [0.01, 10000];
opts.Grid = 'on';
bode(H,Hd, opts)

6d72b64941867eb2f694f30d0aa9eab4.png

从其响应曲线看为一低通滤波器,相频响应不线性,从其差分方程也看出输出反馈参与运算了,所以其本质是 IIR 滤波器。

上代码

#include #include #include typedef struct _t_FSTO_FILTER
{float yn1;float a;
}t_FSTO_FILTER;int init_first_order_lpf(t_FSTO_FILTER * pFilter,float Tf,float T){if(T<=0 || Tf<=0)return -1;
    pFilter->a   = Tf/(Tf+T);
    pFilter->yn1 = 0;return 0;
}float fist_order_lpf(t_FSTO_FILTER * pFilter,float xn){float yn;
    yn = pFilter->a*pFilter->yn1+(1-pFilter->a)*xn;
    pFilter->yn1 = yn;return yn;
}#define PI 3.1415f#define SAMPLE_RATE 500.0f#define SAMPLE_T (1/SAMPLE_RATE)#define SAMPLE_SIZE (100)int main(){float sim[SAMPLE_SIZE];float out[SAMPLE_SIZE];
    t_FSTO_FILTER lpf;if(init_first_order_lpf(&lpf,0.005,SAMPLE_T)==-1)return -1;
    FILE *pFile=fopen("./simulationSin.csv","wt+");if(pFile==NULL)
    {printf("simulationSin.csv opened failed");return -1;
    }for(int i=0;i    {
        sim[i]=20*sin(2*PI*10*i/500)+rand()%5;
    }for(int i=0;i    {
        out[i]=fist_order_lpf(&lpf,sim[i]);fprintf(pFile,"%f,%f\n",sim[i],out[i]);
    }
    fclose(pFile);return 0;
}

取滤波时间常数为 0.005S,采样周期为 0.2S,为 40 倍关系,来看一下上述代码的滤波效果,波形未失真,效果棒棒哒~

6c3c7b2571c4afbb17afa5fb16222dbe.png

如果将常数修改为 0.1S,看下效果:

745faa9e4eeea4432e429f247804a826.png

由图可见,幅度已经衰减,波形已经失真,传递函数的幅频响应已进入衰减区。所以实际使用的时候,滤波器时间常数尽量取小于采样周期 10 倍为宜,具体可以仿真一下,或者类似上面测试程序测试一下为宜。

总结一下

一阶数字滤波计算简单,实现代价非常低。在滤除高频噪声时应用很广泛。其本质是 IIR 滤波器,为啥要单列出来介绍一下呢?是因为其实现简单,实际使用时也不必进行复杂的仿真。

604ffa166aa3a4196435bc6328cb62bb.png

1.谨记:知者不惑,仁者不忧,勇者不惧

2.中芯国际透露:14nm或不能为某客户代工

3.数学之美:嵌入式编程凹凸性之妙用(附C代码)

4.MCU是如何从上电复位运行到main函数的?

5.不想在编译程序时浪费时间,这里有妙招!

6.STM32L5中如何关闭TrustZone?

b065a8bd9bf9cafc3c1fd6ad1476941a.gif

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

相关文章:

正则表达式中$1,$2 ===算是什么意思

$1,$2...是表示的小括号里的内容 $1是第一个小括号里的 ,$2是第2个小括号里的 比如 /gai([\w]?)over([\d])/ 匹配 gainover123 $1 括号里的 n $2 第2个括号里的 123转载于:https://www.cnblogs.com/vertko/p/5888902.html

为什么以太坊能成为区块链2.0的代表之作?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链的学习进入到第四天&#xff0c;前三天学习比特币&#xff0c;分别从比特币的前世、货币属性和背后的区块链技术学习。 比特币是区块链的1…

(转)搭建企业内部yum仓库(centos6+centos7+epel源)

搭建企业内部yum仓库(centos6centos7epel源) 原文&#xff1a;https://www.cnblogs.com/nulige/p/6081192.html https://www.linuxidc.com/Linux/2017-11/148723.htm---------部署yum仓库与定制rpm包 1. 创建yum仓库目录mkdir -p /data/yum_data/cd /data/yum_data/#可以上传rp…

vs按f5没反应_《死神vs火影》中最受欢迎的游戏角色,仙鸣当之无愧上榜

hello&#xff01;大家好&#xff0c;又到了一日一度的杨某讲游戏环节啦&#xff0c;赶紧系好安全带&#xff0c;准备上车吧。《死神vs火影》作为一款深受广大群众欢迎的街机游戏&#xff0c;自然而然地涌现出了一系列知名游戏角色。那么&#xff0c;大多数人心目中最喜欢&…

IEC61850笔记--IEC61850应用入门(二)

IEC61850标准学习和调试&#xff0c;测试的记录文档&#xff0c;主要参考了IEC61850标准文档&#xff0c;《IEC61850应用入门(第二版)》&#xff0c;开源代码libIEC61850及libIEC61850说明文档。 IEC61850标准内容参考IEC61850标准文档&#xff0c;以及IEC61850标准介绍文档《I…

区块链赚钱的9种方式

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 物联网火了一段时间&#xff0c;人工智能火了一段时间&#xff0c;无人驾驶火了一段时间。现在&#xff0c;通通被区块链的风头盖住了&#xff0c;都…

7、在对象内部尽量直接访问实例变量

本文概要&#xff1a; 1、首先给出结论是&#xff1a;除了几种特殊情况外&#xff0c;在读取实例变量的时候采用直接访问的形式&#xff0c;而在设置实例变量的时候通过属性来做。 2、讲解了使用getter、setter的好处。 3、列举了几种上面提到的特殊情况&#xff1a;有时不能使…

linux python2和python3共存_linux-Centos7安装python3并与python2共存

1.查看是否已经安装PythonCentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5。使用 python -V 命令查看一下是否安装Python然后使用命令 which python 查看一下Python可执行文件的位置可见执行文件在/usr/bin/ 目录下&#xff0c;切换到该目录…

9月20号作业

转载于:https://www.cnblogs.com/kangy123/p/5890515.html

区块链以太坊五大开发工具,你喜欢哪个?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 以太坊&#xff08;Ethereum&#xff09;是运行智能合约的最受欢迎的分布式平台之一。因为虚拟货币近年来的发展&#xff0c;以太坊以区块链为基础引…

sublime text 3 中改变.vue文件的颜色

1、按 CtrlShiftP 2、输入install&#xff0c;选择install Package 3、输入vue&#xff0c;选择 vue syntax hightlight 如果上述方法不起作用&#xff0c;可以选择在下面连接中下载文件&#xff0c;手动安装 如何让你的.vue在sublime text 3 中变成彩色? 转载于:https://www…

nodejs端口被占用。

I had the same issue. I ran: $ ps aux | grep node to get the process id, then: $ sudo kill -9 followed by the process id to kill the process.转载于:https://www.cnblogs.com/facial/p/5893138.html

戴尔电脑管家_2020年笔记本电脑推荐指南:笔记本电脑应该怎么选?什么牌子的笔记本电脑更值得入手?...

笔记本电脑已经成为家家户户必不可少的移动装置了&#xff0c;作为一名互联网行业从业者&#xff0c;无论是居家还是工作也得有一台性价比较高的笔记本&#xff0c;才能满足工作需要了。接下来&#xff0c;跟大家唠一唠笔记本电脑的那些事儿~我将从以下几个方面进行介绍&#x…

行走在区块链上的智能合约

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 我和你打一个赌&#xff0c;我赌明天是雨天&#xff0c;你赌是晴天&#xff0c;赌注100大洋。假设明天是晴天&#xff0c;然后你跑过来管我要100大洋…

安装 telnet

yum install telnet-server yum install telnet service xinetd restart 查询是否正常启动telnet netstat -tnl |grep 23 telnet服务默认使用的23端口 转载于:https://www.cnblogs.com/gaobo543013306/p/8922021.html

python中json dumps_python中json.loads,dumps,jsonify使用

search_info {id:132,user_role:3}print type(search_info) #输出 #转为string用dumpsprint type(json.dumps(search_info)) #输出 #string转 dict用 loads()print type(json.loads(json.dumps(search_info))) #输出 如果前后台通过接口交互时&#xff0c;返回给前台json格式数…

区块链中的智能合约是什么?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 “智能合约是一套以数字形式定义的承诺&#xff0c;承诺控制着数字资产并包含了合约参与者约定的权利和义务&#xff0c;由计算机系统自动执行。”…

Python学习【第七篇】基本数据类型

基本数据类型 bytes数据类型 Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode&#xff0c;由str类型表示&#xff0c;二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes&#xff0c;正是这使得两者的区分特别…

web项目答辩总结_web实战项目遇到问题总结探索

最近在写一个django的web项目&#xff0c;后端代码基本都已经写好了&#xff0c;主要是前端&#xff0c;以前学过一段前端&#xff0c;只是对一些基本的方法知道&#xff0c;但还有很多东西不熟练&#xff0c;问题是在遇到表单数据时候&#xff0c;如何对参数整体打包发送后端接…

iOS----------计算一段代码执行时间

CFAbsoluteTime start CFAbsoluteTimeGetCurrent(); //在这写入要计算时间的代码 // do something CFAbsoluteTime end CFAbsoluteTimeGetCurrent(); NSLog("%f", end - start);转载于:https://www.cnblogs.com/KiVen2015/p/8926265.html

区块链热度不减 应用风险不容忽视

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 今年来&#xff0c;除了区块链本身之外&#xff0c;越来越多的业内人士也更加关注区块链在金融等方面的应用。 4月2日&#xff0c;由京东金融研究院…

POJ 3258:River Hopscotch (最大化最小值)

【题意】 牛要到河对岸&#xff0c;在与河岸垂直的一条线上&#xff0c;河中有N块石头&#xff0c;给定河岸宽度L&#xff0c;以及每一块石头离牛所在河岸的距离&#xff0c; 现在去掉M块石头&#xff0c;要求去掉M块石头后&#xff0c;剩下的石头之间以及石头与河岸的最小距离…

python获取文本光标_使用python readline时如何获取(并设置)当前bash光标位置?

我可以建议Python curses吗&#xff1f;The curses module provides an interface to the curses library, the de-facto standard for portable advanced terminal handling.While curses is most widely used in the Unix environment, versions are available for DOS, OS/2…

Gridview改变单元格颜色

if (e.Row.RowType DataControlRowType.DataRow) { e.Row.Cells[1].BackColor System.Drawing.Color.Red;//第二列的颜色 }转载于:https://www.cnblogs.com/objectxhy/p/5896970.html

区块链为什么这么热?有这么大热度的原因是什么

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链的热度是超乎想象的。 在上地和西二旗密集的写字楼办公空间里&#xff0c;年轻人三五成群聚在一起&#xff0c;在午饭后或散步或聚在茶水间…

使用nmonchart把.nmon文件转换成html

转载&#xff1a;https://blog.csdn.net/zd470015321/article/details/68923280 我的环境 :centos6.6 下载地址 nmon: http://nmon.sourceforge.net/pmwiki.php?nSite.Download nmon analyzer: https://www.ibm.com/developerworks/community/wikis/home?langen#!/wiki/Power…

java web中文乱码处理笔记

一、发生中文乱码的情况有以下三种&#xff1a; 1.表单form的两种提交出现中文乱码 ① get提交 ② post提交 2.超链接&#xff08;本质是get提交&#xff09;出现中文乱码 3、sendRedirect(发生乱码) 二、乱码产生的原因&#xff1a; 浏览器编码 utf-8 发送请求给服务器是会产…

python websocket 客户端_aiohttp Websocket客户端和HTTP

我正在编写一个应用程序&#xff0c;它需要从两个来源接收事件。有些事件来自Websocket客户机连接&#xff0c;有些来自传入的HTTP请求。aiohttp是否可以在同一个应用程序中同时使用这两个侦听器&#xff0c;还是需要两个单独的可执行文件&#xff1f;在我目前有一个函数&#…

你关注区块链了吗?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 前言&#xff1a;关于什么是区块链的论述有很多&#xff0c;本文从公共数据库、印刷机、治理、经济学、组织方式等方面进行阐述&#xff0c;作者观点…

(转)记忆杭州中的(非杭户籍人)

非杭州户籍外来人员在杭州 一、为杭州所做的贡献 1.知识分子 科技创新&#xff08;这个很简单明了&#xff0c;现在的国家已经不是八九十年代的国家了&#xff0c;飞速发展的今天离不开一群知识分子&#xff09; 人才培养&#xff08;光谈科技发展&#xff0c;也要有一群人教育…