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

IIR 巴特沃斯II型滤波器设计与实现

低通滤波器的设计与实现

打开Matlab ,运行命令filterDesigner,选择IIR,巴特沃斯滤波器,设置采样频率,和低通滤波器截止频率。点击设计滤波器,如图1:

默认配置是 巴特沃斯滤波器 ,直接II型二阶节。为了便于C语言的计算,可以选择生成单节型。点击编辑,转换成单节。如同2:

点击目标,生成.C头文件,生成滤波器系数。

const int NL = 11;
const real64_T NUM[11] = {1.894397002288e-08,1.894397002288e-07,8.524786510297e-07,2.273276402746e-06,3.978233704805e-06,4.773880445766e-06,3.978233704805e-06,2.273276402746e-06,8.524786510297e-07,1.894397002288e-07,1.894397002288e-08
};
const int DL = 11;
const real64_T DEN[11] = {1,   -7.591034810035,    26.16244792022,   -53.86859767765,73.33349935454,   -68.93050956294,    45.28447142245,   -20.52295845359,6.138318579144,   -1.093760106583,  0.08814273308364
};

IIR滤波器C语言代码如下:

const int NL = 11;
const double NUM[11] = {1.894397002288e-08,1.894397002288e-07,8.524786510297e-07,2.273276402746e-06,3.978233704805e-06,4.773880445766e-06,3.978233704805e-06,2.273276402746e-06,8.524786510297e-07,1.894397002288e-07,1.894397002288e-08
};const int DL = 11;
const double DEN[11] = {1,   -7.591034810035,    26.16244792022,   -53.86859767765,73.33349935454,   -68.93050956294,    45.28447142245,   -20.52295845359,6.138318579144,   -1.093760106583,  0.08814273308364
};double x_array[11];
double y_array[11];/**  double plot::filter_iir_dfII(double* x_arr, double* y_arr,const double* filter_num,const double* filter_den, int filter_order, float input)*  brief: IIR 直接II型滤波器*/
double plot::filter_iir_dfII(double* x_arr, double* y_arr,const double* filter_num,const double* filter_den, int filter_order, float input)
{int i = 0;double res = 0;res = res + input * filter_num[0];for (i=1; i<filter_order; i++){res = res + x_arr[i-1] * filter_num[i];res = res - y_arr[i-1] * filter_den[i];}for (i = filter_order-1; i > 0; i--){x_arr[i] = x_arr[i - 1];y_arr[i] = y_arr[i - 1];}x_arr[0] = input;y_arr[0] = res;return res;
}void plot::dataInit(void)
{//创建一个测试信号int fs = 1000;     //采样频率
//    float t = 0:1/fs:1;  //时间向量  分辨率float t = 1.0 / fs;const float pi = 3.1415926;int i = 0;for (i = 0; i < _DATA_LENGTH; i++) {rawData[i] = sin(2 * pi * 50 * t * i) + sin(2 * pi * 150 * t * i) + sin(2 * pi * 250 * t * i);rawData2[i] = sin(2 * pi * 50 * t * i);}for (i = 0; i < _DATA_LENGTH; i += 1){filterData[i] = filter_iir_dfII(x_array,y_array,NUM,DEN,11,rawData[i]);}
}

http://www.xdnf.cn/news/538651.html

相关文章:

  • React Contxt详解
  • 孤立森林和随机森林主要区别
  • Java实现:如何在文件夹中查找重复文件
  • 如何从容应对面试?
  • vi实时查看日志
  • UA 编译和建模入门教程(zhanzhi学习笔记)
  • 基于大模型的脑出血全流程预测系统技术方案大纲
  • 物联网安全技术的最新进展与挑战
  • 深入理解pip:Python包管理的核心工具与实战指南
  • (1-5)Java 常用工具类、包装类、StringStringBuilderString
  • 计算机存储与数据单位的核心定义及换算逻辑
  • 学习黑客 PowerShell 详解
  • 相机Camera日志分析之十五:高通相机Camx 基于预览1帧的ConfigureStreams Usecase完整过程日志分析详解
  • 辅助驾驶平权与出海,Mobileye的双重助力
  • Cursor 模型深度分析:区别、优缺点及适用场景
  • IOS 创建多环境Target,配置多环境
  • GK的作用是什么?
  • C语言指针深入详解(三):数组名理解、指针访问数组、一维数组传参的本质、冒泡排序、二级指针、指针数组、指针数组模拟二维数组
  • opencascade如何保存选中的面到本地
  • 使用MCP驱动IDA pro分析样本
  • DV SSL证书管理主要有哪些功能?
  • C语言—字符函数和字符串函数
  • 如何实现从网页一键启动你的 Electron 桌面应用(zxjapp://)
  • pcie phy电气层(PCS)详解gen1、2 (rx)
  • 北斗卫星通讯终端的技术原理是什么
  • 2025-05-19 学习记录--Python-简易用户登录系统 + 计算天数
  • RAG策略
  • 第二章、IMU(Inertial Measurement Unit 惯性测量单元)
  • 包装可靠性测试【二】
  • C++寻位映射的奇幻密码:哈希