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

利用Matlab工具生成滤波器

利用Matlab工具生成滤波器

简介

利用Matlab生成IIR型滤波器,IIR型会引入输出项,重新计算出新的输出项;使用matlab的滤波器设计工具,得到系数 a , b a,b a,b,再利用推导出来的公式,带入即可;

Matlab生成系数

以低通滤波器为例:

在这里插入图片描述

  • F c F_c Fc截止频率,也就是说从通带开始到截止频率处,dB值会下降3dB
  • F s F_s Fs采样率,采样率要尽可能大一点,过小会造成频谱泄露
  • 指定的阶数这里取2,就是参数 a a a会使用到2个

使用IIR型的巴特沃斯函数来构造的参数,其函数图像如下:

在这里插入图片描述
函数图如上,随着频率的上升,dB值呈单调递减的效果,也就是最后经过我们处理后的音频数据也会呈现这种效果;

从上面我们就拿到了 a , b a,b a,b系数,带入下面公式即可

低通滤波器公式

引入IIR型推导出的2阶公式,此公式由前人推导而出,推导相对复杂,后面会有文章简单讲解:
y ( n ) = b 0 ∗ x ( n ) + b 1 ∗ x ( n − 1 ) + b 2 ∗ x ( n − 2 ) − a 1 ∗ y ( n − 1 ) − a 2 ∗ y ( n − 2 ) y(n) = b_0*x(n) + b_1*x(n-1) + b_2*x(n-2) - a_1*y(n-1) - a_2*y(n-2) y(n)=b0x(n)+b1x(n1)+b2x(n2)a1y(n1)a2y(n2)

最后,将待处理的数据带入公式接口,大致算法如下:

for index in range(len(data)):
    if index < 2:
        low_signal[index] = data[index]
        continue
    low_signal[index] = b_p[0] * data[index] + b_p[1] * data[index-1] + b_p[2] * data[index-2] - a_p[1] * low_signal[index-1] - a_p[2]*low_signal[index-2]

最后运行的效果如下:
在这里插入图片描述

其它的高通滤波器、带通和带阻滤波器也可以按照这种方法做,是不是很简单;还是要理解好原理才重要;


http://www.kler.cn/a/378904.html

相关文章:

  • 【网络协议】RFC3164-The BSD syslog Protocol
  • 【大数据】机器学习------支持向量机(SVM)
  • Mybatis Plus 分页实现
  • Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
  • Python操作Excel——openpyxl使用笔记(2)
  • 【机器学习:三十二、强化学习:理论与应用】
  • 在Springboot中更好的打印日志
  • 基于STM32的数控DC-DC电源系统设计
  • 【MyBatis源码】SqlSession实例创建过程
  • 《Python修炼秘籍》01踏上编程之旅
  • 大零售时代下融合发展的新路径:定制开发技术的应用与思考
  • IT 运维:流量回溯与视频质量监控的秘籍
  • vue3项目中实现el-table分批渲染表格
  • scrapy服务器重试机制失效问题
  • 【生物学&水族馆】观赏淡水鱼检测系统源码&数据集全套:改进yolo11-dysample
  • Python规整电商编码
  • docker 启动 neo4j
  • STM32 透传简易实现的软件方法
  • 基于SpringBoot的“CSGO赛事管理系统”的设计与实现(源码+数据库+文档+PPT)
  • ESP8266 自定义固件烧录-Tcpsocket固件
  • java脚手架系列12-mongoDB
  • 10天进阶webpack---(1)为什么要有webpack
  • 【数据分享】2024年我国省市县三级的休闲娱乐设施数量(免费获取/18类设施/Excel/Shp格式)
  • 中文词向量质量的评估
  • 服务器开启SSH允许远程连接服务
  • Springboot 内置缓存与整合Redis作为缓存