Butterworth滤波器设计(IIR类型)
设计 类型 滤波器
2023-09-14 09:16:38 时间
-
设计滤波系数
打开MATLAB,选择应用程序,点击Filter Design & Analysis
选择Butterworth,设置阶数,采样频率FS,截止频率FC,最后点击Design Filter确定
选择Analysis菜单,点击Filter Coefficients
选择Edit菜单,点击Convert to single section
选择Targets菜单,点击Generate C Header...
选择Export as,选择single-precision float,点击Generate
生成的文件内容如下
/*
* Filter Coefficients (C Source) generated by the Filter Design and Analysis Tool
* Generated by MATLAB(R) 9.0 and the Signal Processing Toolbox 7.2.
* Generated on: 27-Nov-2019 07:42:47
*/
/*
* Discrete-Time IIR Filter (real)
* -------------------------------
* Filter Structure : Direct-Form II
* Numerator Length : 7
* Denominator Length : 7
* Stable : Yes
* Linear Phase : No
*/
/* General type conversion for MATLAB generated C-code */
#include "tmwtypes.h"
/*
* Expected path to tmwtypes.h
* C:\Program Files\MATLAB\R2016a\extern\include\tmwtypes.h
*/
/*
* Warning - Filter coefficients were truncated to fit specified data type.
* The resulting response may not match generated theoretical response.
* Use the Filter Design & Analysis Tool to design accurate
* single-precision filter coefficients.
*/
const int NL = 7;
const real32_T NUM[7] = {
0.004106325097, 0.02463795058, 0.06159487367, 0.08212649822, 0.06159487367,
0.02463795058, 0.004106325097
};
const int DL = 7;
const real32_T DEN[7] = {
1, -2.021385193, 2.312567234, -1.521253347, 0.6202822328,
-0.1416414529, 0.01423505601
};
C代码实现Butterworlth滤波系数数组定义
float FACTOR_B[] = {0.004106325097, 0.02463795058, 0.06159487367, 0.08212649822, 0.06159487367, 0.02463795058, 0.004106325097};
float FACTOR_A[] = {1, -2.021385193, 2.312567234, -1.521253347, 0.6202822328, -0.1416414529, 0.01423505601};
Butterworlth数据结构
typedef struct
{
float xBuffer[FACTOR_NUMBER];
float yBuffer[FACTOR_NUMBER];
}BUTTER_WORTH_BUFFER;
Butterworth算法实现
static BUTTER_WORTH_BUFFER s_ecgFilter;
#define FACTOR_NUMBER 7
uint16_t buterworlthFilter(uint16_t x)
{
uint32_t i;
//运算之前Buf向前移动一个位置,以保存之前Buf的数据;
for(i=FACTOR_NUMBER-1; i>0;i--)
{
s_ecgFilter.yBuffer[i] = s_ecgFilter.yBuffer[i-1];
s_ecgFilter.xBuffer[i] = s_ecgFilter.xBuffer[i-1];
}
s_ecgFilter.xBuffer[0] = x;
s_ecgFilter.yBuffer[0] = 0;
for(i=1;i<FACTOR_NUMBER;i++)
{
s_ecgFilter.yBuffer[0] = s_ecgFilter.yBuffer[0]+FACTOR_B[i]*s_ecgFilter.xBuffer[i];
s_ecgFilter.yBuffer[0] = s_ecgFilter.yBuffer[0]-FACTOR_A[i]*s_ecgFilter.yBuffer[i];
}
s_ecgFilter.yBuffer[0] = s_ecgFilter.yBuffer[0]+FACTOR_B[0]*s_ecgFilter.xBuffer[0];
return (uint16_t)s_ecgFilter.yBuffer[0];
}
相关文章
- 【华为云技术分享】Sketch插件技术 — 让研发和设计高效协同
- PHP 枚举类型的管理与设计
- 缓存子系统如何设计(Cachable tag, Memcache/redis support, xml config support, LRU/LFU/本地缓存命中率)
- 数据仓库专题20-案例篇:电商领域数据主题域模型设计v0.2(改进意见征集中)
- 动态内容国际化,数据库设计
- Plugin & Hook 设计与实现
- ENode 1.0 - 消息队列的设计思路
- SAP UI5应用里类型为Edm.DateTime的日期控件设计原理
- Spartacus Storefront 的 wishlist 设计
- Atitit. atiOrder Order 订单管理框架的设计
- Atitit.ati orm的设计and架构总结 适用于java c# php版
- 软件研发落地实践,要从设计就开始
- 零代码以“王者荣耀”为例解析设计七原则
- 【华为云技术分享】敏捷设计,高效协同,凸显设计端云协同价值
- SQL 解析器:值类型解析设计
- cocos2d-x3.x 设计与实现弹出对话框
- 算法分析与设计入门-搜索策略
- 设计模式(Python语言)----面向对象设计SOLID原则
- MySQL_13_在表设计中给字段设计合适的类型