在 Microchip 8-bit MCU 上跑 DSP 之 中值滤波(Median Filter)
前言
最近发掘到一个 “宝藏”:在 Microchip 的 AN4515 应用笔记中,阐述了如何在其 AVR® EA 8 bit 微控制器(MCU)上运行多款经典的数字信号处理算法(DSP)及案例:
本文介绍一下基本使用方法和第一个案例 —— 中值滤波(Median Filter)。后续再逐步介绍 IIR 滤波器、 FFT 变换、 Kalman 滤波器 等案例。
硬件支持
AN4515 对应的代码适用于 Microchip AVR64EA48 Curiosity Nano Evaluation Kit:
板载 MCU 型号是 AVR64EA48,具有 AVR® 8-bit CPU 并配有硬件乘法器,最高时钟速度 20 MHz ,片内资源是 64KB 闪存、6KB SRAM 和 512 字节 EEPROM。
它在 AVR® EA 系列中的位置如下:
软件支持
软件需要三个方面的支持:
- IDE:Microchip Studio IDE v7.0.2594+ 或者 MPLAB® X IDE v5.50+
- Compiler:XC8 Compiler v2.40+
- Device Family Pack:Microchip AVR64EA48 Device Support Pack AVR-Dx_DFP 2.2.56+
请注意两种 IDE 分别对应不同的案例代码,分别于 Microchip Github 不同的仓库地址(见参考资料 [4] 和 [5] )获取。
我使用的是 MPLAB® X IDE v6.25,后续将以此 IDE 为例进行介绍。
Median Filter 案例的使用步骤
现在我们记录一下 中值滤波器(Median Filter) 的案例使用情况。
1. 准备工作
首先,准备好 MPLAB® X IDE 和 AVR64EA48 Curiosity Nano 板子,我的板子如下:
由于 AVR64EA48 Curiosity Nano 板子自带 Debugger 芯片,在插上电脑后,MPLAB® X IDE 能自动识别出板子:
2. 获取代码
在 MPLAB Discover 中可以看到官方支持的所有案例,其中就有 “Digital Filters using MPLAB X” 和 “Digital Filters using Microchip Studio”,我们用的是前者:
在 “Digital Filters using MPLAB X” 可以看到代码简介,然后点击右上角 “Download” 下载代码(与直接从 Microchip Github 代码库下载一样):
3. 工程操作
在 IDE 中导入代码工程,更新 Device Family Pack,执行编译、下载和运行操作,通常可顺利完成。
4. 数据可视化
打开 MPLAB® X IDE 中的 Data Visualizer,加载代码工程目录下的 data_visualizer.dvws 文件,开启串口(在我图中串口号是 ttyACM0)后效果如下:
蓝色曲线为原始信号(代码中预存的吉他音波形),绿色曲线为中值滤波后的信号。中值滤波器有效去除了信号中的尖峰,使滤波后的波形更为平滑。
Median Filter 案例的代码解释
我们通过查看 main 函数可以看到代码逻辑(参考图 8)。
原始信号储预存在 sinewave 数组中。
每次取一个原始信号数据(original),并经由 MEDIANFILTER_Insert 函数计算,输出一个滤波后信号数据(filtered)。
这两个数据会通过串口传给 IDE 里的 Data Visualizer,data_visualizer.dvws 负责对这些数据的解析和呈现波形。
中值滤波算法的核心是“窗口 + 排序”,AN4515 中举了一个例子,比如 9 个数据的窗口,先对这些数据做大小排序,然后取中间排序第 5 个的数据作为“中值”:
实际代码中用的都是 UINT8/16 类型,窗口大小设定为 31 。
如果要测性能,代码中还预留了 GPIO 的 Toggle,以便于看 MEDIANFILTER_Insert 函数 的运行时间。
总结
本文基于 Microchip 的 AN4515 应用笔记,介绍了在 AVR64EA48 Curiosity Nano 板子上运行 中值滤波(Median Filter) 的案例。
参考资料
- https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ApplicationNotes/ApplicationNotes/ProcessAnalogSensorDataDigitalFiltering-DS00004515.pdf
- https://www.microchip.com/en-us/development-tool/EV66E56A
- https://www.microchip.com/en-us/product/avr64ea48
- https://github.com/microchip-pic-avr-examples/avr64ea48-digital-filters-mplab-mcc
- https://github.com/microchip-pic-avr-examples/avr64ea48-digital-filters-studio
欢迎关注我的微信公众号“疯狂的运放”
,及时收到最新的推文。