当前位置: 首页 > article >正文

基于stm32ARM库函数的IIR二阶巴特沃斯带通滤波器--附完整代码

在嵌入式系统中使用ARM CMSIS-DSP库实现高效IIR带通滤波器 引言嵌入式系统中的频带选择挑战在嵌入式系统开发中信号处理不仅需要滤除高频噪声或低频干扰有时还需要专门提取特定频率范围内的信号。今天我想与大家分享一种在ARM Cortex-M系列微控制器上实现高效IIR带通滤波器的实用方案它充分利用了ARM官方提供的CMSIS-DSP库既能保证性能又能大幅简化开发工作。首先解读什么是带通与截止频率1.带通带通的含义就在于此 它只允许特定频率范围内的信号通过而将该范围之外的信号视为干扰并滤除。这个特定的频率范围称为通带低于下截止频率的称为下阻带高于上截止频率的称为上阻带带通滤波器有两个频率哨卡下截止频率Fc_low和上截止频率Fc_high。下哨卡之下下阻带信号被拦截削弱。两哨卡之间通带信号安全通行。上哨卡之上上阻带信号被拦截削弱。两个哨卡位置-3dB点正是通行权限变化的临界点。2.截止频率的定义-3dB点截止频率并非一个一刀切的硬边界。在工程上它被精确定义为信号功率衰减到一半-3dB时所对应的频率点。-3dB的物理意义因为功率与电压的平方成正比功率减半意味着电压幅值衰减到原来的约 0.707倍因为 √0.5 ≈ 0.707。为什么是-3dB 这是一个国际公认的标准平衡点。它意味着信号刚好开始被显著注意到衰减既不是完全无损耗0dB也不是被完全阻断。这为滤波器提供了一个明确、可重复的性能衡量基准。具体代码调用步骤 实时处理流程在实际应用中带通滤波器的调用与低通/高通类似初始化阶段根据采样频率、下截止频率和上截止频率计算系数初始化滤波器实例运行阶段对每个采样点调用处理函数输入原始值获取滤波后结果这种一进一出的处理模式非常适合实时系统每个采样点的处理时间是确定的便于系统调度。1.使用带通滤波初始化函数它会调用系数生成函数来生成对应的下截止频率和上截止频率的系数不再需要通过matlab来生成系数这样就比较方便针对具体情况改变通带范围。2.在采集完ADC数据后直接调用执行函数此函数一进一出非常适合实时系统具体演示效果计算过程如下根据分贝与幅度比的关系公式dB 20 × log₁₀(幅度比)-10dB 表示信号幅度衰减到原来的约 0.316 倍-6dB 表示信号幅度衰减到原来的 0.5 倍即一半。假设我们使用下截止频率为100Hz上截止频率为300Hz的带通滤波器1.输入50Hz信号低于下截止频率实际输出效果图注绿色输入50Hz信号低于100Hz下截止频率输出波形被显著抑制体现了滤波器在下阻带内的衰减特性。可以看到幅值从1360左右衰减到450满足-10db左右的衰减特性2.输入100Hz信号在下截止频率点实际输出效果图注绿色输入100Hz信号在下截止频率点输出振幅衰减至输入的0.707倍完美符合理论上的-3dB截止特性证明滤波器下边界设计精准。3.输入170Hz信号在通带中心频率实际输出效果图注绿色输入170Hz信号在通带中心频率附近输出波形与输入波形高度重合无明显衰减或失真体现了滤波器在通带内的0dB增益特性。4.输入300Hz信号在上截止频率点实际输出效果图注输入300Hz信号在上截止频率点输出振幅衰减至输入的0.707倍完美符合理论上的-3dB截止特性证明滤波器上边界设计精准。5.输入400Hz信号高于上截止频率实际输出效果图注绿色输入400Hz信号高于300Hz上截止频率输出波形被显著抑制体现了滤波器在上阻带内的衰减特性。根据matlab衰减显示在400Hz左右为-6db的衰减可以看出衰减的程度符合要求五张图的展示了带通滤波器如何工作您提供的五张实测图完美演绎了带通滤波器作为频率窗口的角色① 第一张图输入50Hz展示下阻带现象50Hz的输入信号低于100Hz下截止频率被剧烈压制。解读信号深陷于下阻带。滤波器在此区域的任务是强力抑制将低于下截止频率的低频干扰牢牢挡住。② 第二张图输入100Hz定义下边界现象100Hz的输入信号振幅恰好衰减到输入的0.707倍。解读信号正好位于下截止频率点-3dB点。这张图就是下截止频率定义的实验证明展示了滤波器从强力抑制到开始通过的转折点。③ 第三张图输入170Hz展示通带中心现象170Hz的输入信号在通带内几乎无衰减、无失真地通过。解读信号完全处在通带内且位于通带中心频率附近。这里需要特别说明带通滤波器的中心频率通常定义为上下截止频率的几何平均值计算公式为Fc_center √(Fc_low × Fc_high) √(100 × 300) ≈ 173.2Hz在实际应用中中心频率173.2Hz附近区域的信号增益最大衰减最小。输入170Hz信号虽不正好是中心频率但仍在通带范围内因此同样能获得很好的传输特性。④ 第四张图输入300Hz定义上边界现象300Hz的输入信号振幅恰好衰减到输入的0.707倍。解读信号正好位于上截止频率点-3dB点。这张图就是上截止频率定义的实验证明展示了滤波器从开始通过到强力抑制的另一个转折点。⑤ 第五张图输入400Hz展示上阻带现象400Hz的输入信号高于300Hz上截止频率被剧烈压制。解读信号深陷于上阻带。滤波器在此区域的任务同样是强力抑制将高于上截止频率的高频干扰牢牢挡住。 性能对比在STM32F407Cortex-M4带FPU上实测使用CMSIS-DSP库处理一个采样点仅需约50个时钟周期而纯C实现需要200周期。当采样率为10kHz时滤波计算仅占用约0.05%的CPU时间真正实现了低功耗、高效率。 ARM CMSIS-DSP库嵌入式信号处理的瑞士军刀在开始深入滤波器原理前我们先认识一下这个方案的核心工具——ARM CMSIS-DSP库。这是ARM官方为Cortex-M处理器提供的数字信号处理库具有以下几个显著优势硬件优化CMSIS-DSP库的函数针对ARM Cortex-M处理器的架构进行了深度优化特别是利用了M4/M7等内核的DSP扩展指令集。这意味着相同的滤波算法使用库函数可能比手写C代码快数倍。标准化接口库函数提供了统一、标准的API接口大大提高了代码的可移植性。无论是在STM32、NXP还是其他ARM Cortex-M芯片上调用方式完全一致。丰富功能除了IIR滤波器CMSIS-DSP还包含FIR滤波器、FFT、矩阵运算、控制系统等200多个函数堪称嵌入式信号处理的瑞士军刀。 IIR滤波器设计的核心双线性变换法在数字滤波器设计中我们面临一个基本问题如何将模拟世界的连续滤波器数字化这里我们采用了双线性变换法这是一种经典且实用的映射方法。简单来说双线性变换就像在s平面模拟域和z平面数字域之间建立了一座桥梁。但这座桥有个特点它会把模拟频率压缩到数字域的有限范围内这就导致了频率畸变。想象一下你有一根有弹性的尺子模拟频率轴要把它装进一个固定长度的盒子数字频率的0-π范围。在装盒子的过程中尺子的某些部分会被压缩得更厉害——这就是频率畸变的直观理解。为了解决这个问题我们引入了预畸变补偿在装盒子前先在尺子上做好标记让被压缩严重的部分预先拉伸这样装进去后就刚好是正确的位置了。⚡ 巴特沃斯滤波器的独特魅力为什么选择巴特沃斯Butterworth型滤波器这源于它的最大平坦特性在通带内幅度响应尽可能平坦没有起伏过渡带以单调方式衰减没有纹波相位响应相对较好虽然仍是非线性的这种特性使得巴特沃斯滤波器在需要保真度的应用中特别受欢迎比如音频信号处理、振动分析、生物信号采集等。您提出的这一点非常关键确实在单片机等嵌入式环境中计算效率和内存占用量是选择二阶节Biquad结构的核心考量之一。让我们将这一点补充进去并调整整个章节的逻辑结构使其更符合嵌入式开发的思维方式。 嵌入式优化核心为什么选择二阶节Biquad结构在CMSIS-DSP库中IIR滤波器采用二阶节级联结构实现。这种设计不仅体现了数字信号处理的理论智慧更深谙嵌入式开发的资源约束之道。让我们从四个层面剖析其精妙之处1.内存友好状态变量最少化的艺术二阶节是满足复数极点/零点对的最小稳定单元。每个二阶节仅需4个状态变量对比直接型高阶实现可能需要2N个状态变量。在内存以KB计的单片机世界里这种精打细算意味着可同时运行多个滤波器实例更少的内存访问更低的功耗更好的缓存局部性2.计算高效乘加运算的完美平衡一个二阶节的差分方程仅需5次乘法、4次加法直接I型y[n] b0x[n] b1x[n-1] b2x[n-2] - a1y[n-1] - a2*y[n-2]这种计算模式恰好匹配多数Cortex-M处理器的单周期乘加指令MAC。CMSIS-DSP库正是利用这一点通过汇编级优化将计算密度最大化。3.数值稳定将误差囚禁在局部高阶IIR滤波器如8阶若直接实现其长反馈链会使量化误差如滚雪球般累积甚至导致溢出振荡。二阶节结构将系统分解为多个独立单元每个单元的误差被囚禁在本地不会在系统中传播放大。这种分而治之的策略是嵌入式浮点/定点运算的生命线。4.模块化设计可扩展的滤波器乐高二阶节是滤波器设计的原子单元你可以像搭乐高一样级联多个二阶节实现任意阶数的滤波器动态调整滤波器阶数无需重构整个系统复用同一套代码和测试用例在系统中混合不同类型的二阶节低通、高通、带通、带阻✨ 结语在嵌入式系统中实现高效的IIR带通滤波器不仅是技术问题更是工程艺术。通过合理利用ARM CMSIS-DSP库我们既获得了硬件级的性能优化又保持了代码的简洁和可维护性。这种设计哲学可以推广到其他嵌入式信号处理任务中善用硬件厂商提供的优化库专注于算法逻辑而非底层优化这样才能在有限的时间和资源内创造出更稳定、更高效的系统。希望这篇文章能为你打开嵌入式信号处理的一扇窗。在实际项目中不妨尝试一下这个方案相信你会被它的简洁和高效所吸引。如果有任何问题或心得欢迎在评论区交流分享其他滤波器二阶IIR巴特沃斯低通滤波-无时延补偿版二阶IIR巴特沃斯低通滤波-有时延补偿版适合电力电子滤波二阶IIR巴特沃斯高通滤波工程代码链接

相关文章:

基于stm32ARM库函数的IIR二阶巴特沃斯带通滤波器--附完整代码

在嵌入式系统中使用ARM CMSIS-DSP库实现高效IIR带通滤波器 🎯 引言:嵌入式系统中的频带选择挑战 在嵌入式系统开发中,信号处理不仅需要滤除高频噪声或低频干扰,有时还需要专门提取特定频率范围内的信号。今天,我想与…...

3分钟搭建开源H5编辑器:零代码制作专业级移动页面

3分钟搭建开源H5编辑器:零代码制作专业级移动页面 【免费下载链接】h5maker h5编辑器类似maka、易企秀 账号/密码:admin 项目地址: https://gitcode.com/gh_mirrors/h5/h5maker 还在为制作精美的H5页面而头疼吗?想要像专业设计师一样创…...

3步掌握Legacy-iOS-Kit:旧设备降级、越狱与系统恢复终极实战

3步掌握Legacy-iOS-Kit:旧设备降级、越狱与系统恢复终极实战 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit…...

深入AD9361 No-OS驱动:在ZC706上通过SPI配置FMComms5的底层代码解析

深入AD9361 No-OS驱动:在ZC706上通过SPI配置FMComms5的底层代码解析 当开发者需要直接与AD9361这类高性能射频捷变收发器进行底层交互时,No-OS驱动提供了一条绕过操作系统抽象层的直接路径。本文将聚焦于如何在Xilinx ZC706开发板上,通过SPI接…...

微积分自学笔记(13):向量与空间解析几何

第10章 向量与空间解析几何本文作者:黄邦勇帅(原名:黄勇),读者意见可发至 本文旨在以通俗的语言将讲解微积分,尽量以零起点角度将复杂的微积分讲解明白。 引用本文内容须注明“参考文档:《微积分笔记》作者&#xff1a…...

FPGA新手避坑指南:用Verilog写自己的‘软’ROM存储波形,真的比用IP核好吗?

FPGA波形生成方案深度对比:Verilog手动实现与IP核的实战抉择 在数字信号处理领域,波形生成是FPGA开发者经常遇到的基础任务。面对这个看似简单的需求,开发者们往往陷入选择困境:是直接调用现成的ROM IP核,还是用Verilo…...

Stata数据合并保姆级避坑指南:从CSV导入到merge命令的完整流程

Stata数据合并实战避坑指南:从CSV预处理到merge高阶技巧 第一次用Stata合并数据集时,我盯着屏幕上莫名其妙的"_merge1 only"提示发呆了半小时——明明两个文件都有相同的股票代码和年份,为什么合并后数据量少了三分之一&#xff1f…...

别再死磕YOLOv5了!用CLIP+CRIS结构,手把手教你实现文本驱动的目标检测

从CRIS架构到文本驱动目标检测:一条渐进式实践路径 当我在深夜第三次尝试将文本模块硬塞进YOLOv5的检测头时,屏幕上的维度不匹配报错终于让我意识到——或许我们该换个思路了。传统目标检测框架就像精密的瑞士手表,突然要它理解自然语言&…...

DataChain:构建面向对象存储的数据上下文层,实现AI时代数据处理革命

1. 项目概述:为AI时代的数据处理构建“上下文层”如果你和我一样,长期在数据工程和机器学习领域摸爬滚打,一定对下面这个场景深有体会:团队里新来的同事,或者一个刚被唤醒的AI智能体,面对一个存储了上百万张…...

MultiTimer vs. FreeRTOS软件定时器:在资源受限的STM32F4上,我为什么选择了它?

MultiTimer与FreeRTOS软件定时器在STM32F4上的深度对比与选型实践 引言 在嵌入式系统开发中,定时任务管理是每个工程师都无法回避的核心问题。当面对STM32F4这类资源受限的MCU时,如何在裸机环境与RTOS之间做出合理选择,往往成为项目初期最关键…...

别再死记硬背了!用Python和PyTorch亲手画一遍Sigmoid、Tanh、ReLU激活函数,理解立马不一样

用Python和PyTorch亲手绘制激活函数:从代码中理解神经网络的核心机制 在深度学习的世界里,激活函数就像是神经元的"开关",决定了信息是否应该被传递下去。很多初学者会陷入死记硬背函数公式和特性的误区,却忽略了最本质…...

8大网盘直链下载神器:告别限速,一键获取真实下载地址

8大网盘直链下载神器:告别限速,一键获取真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…...

突破Windows远程桌面限制:RDP Wrapper Library完全指南

突破Windows远程桌面限制:RDP Wrapper Library完全指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 你是否曾因Windows家庭版只能单用户远程连接而困扰?想同时让家人使用电脑、自己远程办…...

OpenClaw 2.6.6 安装避坑 + 必装技能 新手入门教程

OpenClaw 2.6.6 保姆级部署 必装技能全攻略|10 分钟打造高效数字员工 下载地址:https://xiake.yun/api/download/package/12?promoCodeIV3FAC171F46 一、OpenClaw 是什么?核心优势 OpenClaw(昵称小龙虾)是可直接操…...

为什么92%的Python跨端项目在macOS M-series上编译失败?Apple Silicon专用符号表修复方案曝光

更多请点击: https://intelliparadigm.com 第一章:Apple Silicon架构下Python跨端编译失败的根因诊断 Apple Silicon(M1/M2/M3)采用ARM64指令集与统一内存架构,导致传统基于x86_64构建的Python扩展模块在交叉编译或pi…...

AlienFX Tools终极指南:500KB替代AWCC,彻底掌控你的Alienware设备

AlienFX Tools终极指南:500KB替代AWCC,彻底掌控你的Alienware设备 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 还在为臃肿的…...

如何用AKShare快速获取金融数据?Python量化投资必备工具完全指南

如何用AKShare快速获取金融数据?Python量化投资必备工具完全指南 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirr…...

用LabVIEW给ESP32做个远程监控面板:TCP通信+OLED显示温度(附完整Arduino代码)

基于LabVIEW与ESP32的智能监控系统开发实战 在物联网技术快速发展的今天,远程监控系统已成为工业控制、环境监测等领域的重要工具。本文将详细介绍如何利用LabVIEW和ESP32开发板构建一套完整的远程监控系统,实现温度数据的实时采集、传输与可视化展示&am…...

如何用WebPlotDigitizer快速从图表图像中提取数据:完整指南

如何用WebPlotDigitizer快速从图表图像中提取数据:完整指南 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经遇到…...

告别网盘限速:如何通过本地解析技术实现多平台文件高速下载

告别网盘限速:如何通过本地解析技术实现多平台文件高速下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…...

Mamba-3 在金融时序预测中的应用:从理论到 PyTorch 实现

一、状态空间模型(SSM)与 Mamba 是什么? 如果你做过时序预测,大概率用过 Transformer 或 LSTM。Transformer 的自注意力机制虽然强大,但计算复杂度是 O(n),序列一长就爆显存。LSTM 倒是线性复杂度&#xff…...

Switch大气层整合包终极指南:5步解锁游戏新境界

Switch大气层整合包终极指南:5步解锁游戏新境界 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层整合包作为Nintendo Switch最强大的自制系统解决方案,为玩家带…...

避开MATLAB优化那些坑:fmincon求解失败?可能是你的初始点和选项没设对

MATLAB优化实战:破解fmincon求解失败的五大关键策略 当你在MATLAB中运行fmincon优化求解器时,是否经常遇到"求解失败"的提示?这往往不是代码本身的错误,而是优化过程中的关键参数设置不当所致。本文将深入剖析fmincon求…...

从Kaggle金牌方案里,我扒出了3种给神经网络‘组队’的野路子(模型融合实战)

Kaggle金牌方案揭秘:3种颠覆性的神经网络集成策略 在数据科学竞赛的战场上,单打独斗的模型往往难以登顶冠军宝座。那些最终摘得Kaggle金牌的解决方案,几乎都藏着一个不为人知的秘密武器——非传统的模型集成技术。这些方法很少出现在教科书里…...

AI_10_Coze_Multi-Agent多智能体

学习目标 了解什么是多智能体掌握多智能体的创建方式了解单Agent自主规划模式 一、 什么是Multi-Agent 在单 Agent 模式下处理复杂任务时,你必须编写非常详细和冗长的提示词,而且你可能需要添加各种插件和工作流等,这增加了调试智能体的复…...

若依微服务实战:SpringBoot 2.x + WebSocket 实现实时消息推送(含完整代码与网关配置)

若依微服务架构下WebSocket深度整合实战指南 在分布式系统架构中,实时消息推送已成为提升用户体验的关键能力。作为国内广泛使用的开源微服务解决方案,若依(RuoYi)框架为企业级应用提供了完整的基础设施,但在实时通信方面的原生支持仍需开发者…...

WindowResizer:Windows窗口调整的终极免费解决方案,让每个窗口都听你指挥

WindowResizer:Windows窗口调整的终极免费解决方案,让每个窗口都听你指挥 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些固执的Windows窗口而烦…...

WechatRealFriends:微信单向好友检测的技术实现与实用指南

WechatRealFriends:微信单向好友检测的技术实现与实用指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends…...

Seraphine终极指南:英雄联盟智能辅助工具深度解析

Seraphine终极指南:英雄联盟智能辅助工具深度解析 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟的对局中,你是否曾因错过接受匹配而懊恼不已?是否在BP阶段面对…...

如何高效批量下载抖音内容:douyin-downloader专业用户实战指南

如何高效批量下载抖音内容:douyin-downloader专业用户实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallba…...