Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
滤波处理
20
巴特沃斯滤波器的设计
发布于 2021-10-25 15:26:17 浏览:1181
订阅该版
有没有软件包支持 “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.2k
关于作者
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
RT-Thread项目助手v0.2.0 - 支持Env Windows
2
RttreadV5.10上,GD32F450Z RTC时间显示问题
3
rt-smart启动流程分析
4
EtherKit快速上手PROFINET
5
RTThread USB转串口无法接收数据
热门标签
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
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部