前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于micropython的数字滤波器

基于micropython的数字滤波器

作者头像
企鹅号小编
发布2018-01-25 15:28:25
1.5K0
发布2018-01-25 15:28:25
举报
文章被收录于专栏:编程编程

刚参加了昨天的硕士研究生考试,专业课考的信号与系统,报考学校今年出题出的有点偏,不是题型偏而是考察知识点有明显的偏重,简单说考纲里所罗列的考点最多只考了百分之三十,考系统输入输出方程的提有好几道,傅立叶的题好几道,考试前我特意巩固的离散系统没怎么考,拉普拉斯没怎么考,上场前画了个信号流熟悉了熟悉梅森公式热热身也没考,滤波器也没按正常套路考。。。。。总之今年专业课有点诡异。

不管怎样已经考完了过去了就不再去想了静待结果吧。

今天从实用的角度好好学习学习滤波器以及傅立叶变换,先搞滤波器。考前star了一个github的一个开源项目,关于数字滤波器代码实现的,源码地址绑定在文末阅读全文处。

首先向这位前辈大师表示敬重,最近一直在找相关的资料,在micropython社区发现了这位大师,他有很多基于micropython好玩有趣的开源代码,mark一下。

主要是基于micropython开发板的快速数字滤波器实现,开发板如图所示,板载STM32F405

数据采集过程中采集到数据往往不直接使用,而是经过一定的过滤以后才使用,原因是因为这些信号中包含了各种噪声,滤波的目的就是减少这些数据中的随机扰动,隔离特定的信号或者减小数据突变带来的异常响应。

通常减少噪音常用的方法有滑动取最后N个样本进行平均计算,这在计算上非常简单所以也很快,但这是比较粗糙的一种形式,因为N个样本中最老的样本与最新的样本具有同样的权重,这通常并不是最佳的。

还有就是FIR滤波器(有限长单位冲激响应滤波器,又称为非递归型滤波器),这个滤波方法可以看作滑动平均的延伸,相比滑动平均值滤波,该方法对每一个样本分配了不同的权重,这些权重由一组数组定义,计算时,每个样本乘以其系数,然后在对他们求和。FIR滤波器可以设计成产生一系列滤波器类型:低通,高通,带通,带阻等。它们也可以被定制为对突然变化(脉冲响应)产生特定的响应。

该项目代码里滤波器用于处理单片机实时采集的数据(整数数据),耗时很短可以用在中断程序里。主要实现了上述两种滤波器.计算对象是32位有符号整形,在micropython开发板中,滑动平均需要8微秒,FIR需要15微秒来获得一组典型系数。

里面一共有8个后缀名为py的python代码文件。

第一个asm.py是一个演示文件,演示了汇编语言在micropython中的使用

第二个avg.py和第三个avgtest.py是滑动平均滤波的代码实现以及实例代码

后面全是fir滤波器的代码实现以及多个实例代码。

文件lpf.py使用该板作为截止频率为40Hz的低通滤波器。它处理X7引脚上的模拟输入,对其进行滤波,并将结果输出到DAC2(X6)。为了方便起见,代码包含一个DAC1(X5)输出的扫频振荡器。通过连接X5和X7,可以在X6上查看过滤结果。

滤波器使用定时器4以2KHz采样输入数据。 该程序在DAC1上产生扫频正弦波,并使用X7引脚上的ADC进行读取。经过滤波的信号在DAC2上输出。输入信号以定时器4的2KHz采样,FIR滤波器在定时器的回调处理程序中运行。

当使用振荡器测试滤波器时,您可能会看到阻带中偶然发生的瞬变现象。这些是由振荡器频率的阶跃变化引起的瞬态频率成分的结果:这可以通过增加频率变化之间的延迟来证明。理想情况下,振荡器会发出一个缓慢的,连续的扫描。

firtest.py说明了FIR操作,并用不同的系数集来计算执行时间。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档