Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
滤波处理
20
巴特沃斯滤波器的设计
发布于 2021-10-25 15:26:17 浏览:1113
订阅该版
有没有软件包支持 “C语言巴特沃斯滤波器”?或者哪位大佬用过,给个思路。
查看更多
myLLgf
2021-10-26
这家伙很懒,什么也没写!
给你个二阶低通巴特沃斯的代码,记得采纳 ```c typedef struct lowpassFilter2p { // 历史采样数据 float _delay_element1; float _delay_element2; // 权重系数 float _a1; float _a2; float _b0; float _b1; float _b2; // 截至频率 float _cutoff_freq; // 采样频率 float _sample_freq; } lowpassFilter2p_t; void lp2p_init(lowpassFilter2p_t *lp, float sample_freq, float cutoff_freq) { lp2p_set_cutoff_frequency(lp, sample_freq, cutoff_freq); } float lp2p_reset(lowpassFilter2p_t *lp, float sample) { const float input = isfinite(sample) ? sample : 0.0f; if (fabsf(1 + lp->_a1 + lp->_a2) > FLT_EPSILON) { lp->_delay_element1 = lp->_delay_element2 = input / (1 + lp->_a1 + lp->_a2); if (!isfinite(lp->_delay_element1) || !isfinite(lp->_delay_element2)) { lp->_delay_element1 = lp->_delay_element2 = input; } } else { lp->_delay_element1 = lp->_delay_element2 = input; } return lp2p_apply(lp, input); } void lp2p_disable(lowpassFilter2p_t *lp) { lp->_sample_freq = 0.f; lp->_cutoff_freq = 0.f; lp->_delay_element1 = 0.0f; lp->_delay_element2 = 0.0f; lp->_b0 = 1.f; lp->_b1 = 0.f; lp->_b2 = 0.f; lp->_a1 = 0.f; lp->_a2 = 0.f; } void lp2p_set_cutoff_frequency(lowpassFilter2p_t *lp, float sample_freq, float cutoff_freq) { if ((sample_freq <= 0.f) || (cutoff_freq <= 0.f) || (cutoff_freq >= sample_freq / 2) || !isfinite(sample_freq) || !isfinite(cutoff_freq)) { lp2p_disable(lp); return; } // reset delay elements on filter change lp->_delay_element1 = 0; lp->_delay_element2 = 0; lp->_cutoff_freq = constrain_float( cutoff_freq, 1.f, sample_freq / 2); // TODO: min based on actual numerical limit lp->_sample_freq = sample_freq; const float fr = lp->_sample_freq / lp->_cutoff_freq; const float ohm = tanf(M_PI_F / fr); const float c = 1.f + 2.f * cosf(M_PI_F / 4.f) * ohm + ohm * ohm; lp->_b0 = ohm * ohm / c; lp->_b1 = 2.f * lp->_b0; lp->_b2 = lp->_b0; lp->_a1 = 2.f * (ohm * ohm - 1.f) / c; lp->_a2 = (1.f - 2.f * cosf(M_PI_F / 4.f) * ohm + ohm * ohm) / c; if (!isfinite(lp->_b0) || !isfinite(lp->_b1) || !isfinite(lp->_b2) || !isfinite(lp->_a1) || !isfinite(lp->_a2)) { lp2p_disable(lp); } } float lp2p_apply(lowpassFilter2p_t *lp, float sample) { float delay_element_0 = sample - lp->_delay_element1 * lp->_a1 - lp->_delay_element2 * lp->_a2; const float output = delay_element_0 * lp->_b0 + lp->_delay_element1 * lp->_b1 + lp->_delay_element2 * lp->_b2; lp->_delay_element2 = lp->_delay_element1; lp->_delay_element1 = delay_element_0; return output; } ```
3
个回答
默认排序
按发布时间排序
chenyaxing
2021-10-25
泥上偶然留指爪,鸿飞那复计东西。
可以试试这个 http://t-filter.engineerjs.com/ 能够生成c 和 c++ 代码 ![image.png](https://oss-club.rt-thread.org/uploads/20211025/3dac5ccba4c384f942f633b9b93dcb9e.png.webp) ![image.png](https://oss-club.rt-thread.org/uploads/20211025/11bb2b15a880e0960e4da3fdb9b48648.png.webp)
李肯陪你玩赚嵌入式
认证专家
2021-10-25
2022年度和2023年度RT-Thread社区优秀开源布道师,COC深圳城市开发者社区主理人,专注于嵌入式物联网的架构设计
在github上面找到一个相关的[仓库](https://github.com/wustyuyi/Butterworth_filter_coefficients-MATLAB-in-C),可以参考下, 具体能不能用,咱也不懂,也不能问。 不过,建议像你这种代码参考设计,可以全网找找资料,需要参考代码可以利用利用[github](https://github.com).
撰写答案
登录
注册新账号
关注者
0
被浏览
1.1k
关于作者
yc961213911
这家伙很懒
提问
78
回答
54
被采纳
5
关注TA
发私信
相关问题
1
外部中断计数输入的脉冲
2
请教一下ADC采集温度用什么滤波算法呢
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部