Butterworth (巴特沃斯)滤波器设计参考

-- By Water

在嵌入式音频产品开发过程中经常会到LPF(Low Pass Filter 低通滤波器)和HPF(High Pass Filter 高通滤波器),一般情况下都是离线用工具(如: Matlab)设计好滤波器的参数(Filter Coefficients)再应用到产品中去。但有些状况下需要用户自己根据需求来实时(Real-time)调整Filter Frequency Response (滤波器频率响应),这种情形下就需要在嵌入式系统中实时根据客户的设定需求来产生相应的Filter Coefficients。

下文就汇总出了N阶IIR LPF & HPF Butterworth滤波器系数的设计方法,具体的算法原理推导可以参考陈佩青《数字信号处理教程》一书,此处只给出工程上可以应用的结论。

背景介绍:

归一化的巴特沃斯滤波器系统函数一般形式:

(Note: 参考 陈佩青《数字信号处理教程》第二版266页(6-108)表达式)

一般情况下会希望保持通带增益为0dB,因此设定d0 = a0。

在a0 = aN = 1 情况下得到如下归一化的巴特沃斯多项式:

(Note: 参考 维基百科 “巴特沃斯滤波器”)

由此得到 d0=a0=aN=1情况下的Butterworth多项式展开的系数表:

(Note: 参考 陈佩青《数字信号处理教程》第二版266页 表6-4)

上面的表达式是s域的表达式,下面是变化到z域的方法。

低通滤波器:

采样频率fs, -3dB频率点 fc

高通滤波器:

(Note: 参考 陈佩青《数字信号处理教程》第二版291页 表6-8)

其他带通、带阻滤波器频率变换式参考表6-8 (下图)

参考设计:

1. 1阶Butterworth LPF设计

因此,在确定fc、fs后,1阶的Butterworth滤波器系数就能按照上式计算出来了。如果嵌入式系统没有数据函数库,那么tan的计算方式可以换成tan(x) = sin(x)/cos(x), 加入sin/cos table后就能计算出sin/cos值了。具体Fixed point实现在后续文章再表。

例1:设定fs=44100Hz, fc=1000Hz 计算1阶Butterworth LPF filter coefficients

C1 =tan(2*pi*1000/44100/2) =  0.071358680866949307399178122527764

带入上式计算出1阶Butterworth LPF filter coefficients:

B=[0.066605780250, 0.066605780250, 0]

A=[1, -0.866788439500, 0]

与下图中MatLab获得的Filter Coefficients是完全一致的。

2. 2阶Butterworth LPF 设计

例2:设定fs=44100Hz, fc=1000Hz 计算2阶Butterworth LPF filter coefficients

C1 = tan(2*pi*1000/44100/2) =  0.071358680867

G = 0.904152198106

带入上式计算得2阶Butterworth LPF Filter Coefficients

B=[0.004603998476  0.009207996951  0.004603998476]

A=[1 -1.799096409760  0.817512403663]

与Matlab的结果相当:

3. 1阶Butterworth HPF设计

例3:设定fs=44100Hz, fc=1000Hz 计算1阶Butterworth HPF filter coefficients

C1 = tan(2*pi*1000/44100/2) =  0.071358680867

G = 0.93339421975

带入上式计算得Filter Coefficients:

B = [0.933394219750  -0.933394219750  0]

A = [1 -0.866788439500  0]

与Matlab计算结果相当:

4. 2阶Butterworth HPF设计

例4:设定fs=44100Hz, fc=1000Hz 计算2阶Butterworth HPF filter coefficients

C1 = tan(2*pi*1000/44100/2) =  0.071358680867

G = 0.904152203356

带入上式计算得Filter Coefficients:

B = [0.904152203356  -1.808304406712  0.904152203]

A = [1 -1.799096409760  0.817510981662 ]

与Matlab计算结果相当:

Butterworth 1~2 阶 LPF & HPF Filter Coefficients以及制作成Excel表格分享在:

http://pan.baidu.com/s/1hqw2mby

可以下载使用,选择对应的类型,设定相应的fs & fc就能自动计算出Filter Coefficients。

参考文献:

1. 陈佩青 《数字信号处理教程》第二版

2. 维基百科 “巴特沃斯滤波器”

http://zh.wikipedia.org/wiki/%E5%B7%B4%E7%89%B9%E6%B2%83%E6%96%AF%E6%BB%A4%E6%B3%A2%E5%99%A8

该文档完整的PDF档案文章可以在如下地址下载:

http://pan.baidu.com/s/1ntLu8GD

[DSP] Butterworth (巴特沃斯)数字滤波器设计参考相关推荐

  1. 一个设计低通巴特沃斯数字滤波器的实例

    本人本科渣渣一个,前两天导师让我设计一个数字滤波器.由于本人基本没有数字信号处理基础,于是只能依靠百度和matlab,折腾了半天总算是摸索明白了.百度上有一些文章不靠谱,很容易误导别人,故在此发一篇博 ...

  2. 四旋翼惯导融合之观测传感器滞后问题汇总与巴特沃斯低通滤波器设计(气压计MS5611、GPS模块M8N、超声波、PX4FLOW等)

    前文讲到APM的三阶互补方案,之前附的图是从学长博客里面抠的,感觉还不是很详细,于是自己就画了下,顺便重新理一下思路. 上图中下标为O的表示原始量(Origion),C表示矫正后的量(Correcti ...

  3. 巴特沃斯滤波器matlab代码,MATLAB实现巴特沃斯数字滤波器

    MATLAB实现巴特沃斯数字滤波器 前因:因为要准备保研面试,今年暑假就重新把烂尾的项目捡起来了. 为了提取采集到的脑电信号中有用的部分,想用数字带通滤波器实现,浏览了很多帖子.要不是只有代码,没有注 ...

  4. 基于matlab的巴特沃斯滤波器设计

    一.butterworth滤波器也称最平响应特性滤波器,其特征多项式为: |K(jΩ)|^2=K(jΩ)K(-jΩ)=(Ω/Ωc)^2N 巴特沃斯滤波器的模平方函数为: |H(jΩ)|^2=1/(1+ ...

  5. matlab模拟巴特沃斯滤波器设计,巴特沃斯滤波器matlab实现

    描述 巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零. 在振幅的对数对角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大 ...

  6. 数字信号处理——巴特沃斯滤波器设计

    设计思路 这里采用间接法设计数字滤波器(先设计模拟滤波器再设计数字滤波器) 滤波器理解: 1.数字滤波器可以用H(z),h(n)or系统差分方程来表示,对应的就是一个系统,信号输入该系统即可改变其所含 ...

  7. 设计低通巴特沃斯数字滤波器(matlab)去除ECG基线漂移实例

    matlab代码************************** M=load ('datafile'); ecg=M(1:15000,1); 读取数据 fs=512; 采样率 fmaxd_1=5 ...

  8. 巴特沃斯滤波器设计案例

    函数时候看这里:传送门 clc; clear all; fp=8; fs=3; Rp=5; %通带最大衰减 Rs=30; %阻带最小衰减 wp=fp*2*pi; %通带截止频率 ws=fs*2*pi; ...

  9. matlab巴特沃斯滤波器设计

    %% 滤波 Wp = input('通带截止频率(Hz)'); Ws = input('阻带截止频率(Hz)'); rp = input('通带波动 (dB)'); rs = input('阻带波动 ...

最新文章

  1. 莱比特矿池CEO江卓尔:BCH作为货币不需要新功能,但出于货币竞争的考虑需要
  2. Windows phone应从Android吸取四点教训
  3. override覆盖
  4. golang刷Leetcode系列 --- 加1
  5. 如何处理OData错误消息Property XX at offset XX is invalid
  6. 浅谈ButterKnife对Android性能的影响
  7. oracle9i解密rewrap,oracle 9i 的加密解密用法之dbms_obfuscation_toolkit(一)
  8. mantis apache mysql_Debian下mysql5+php5+apache2+mantis服务器升级
  9. NGINX1.19安装手册
  10. OpenShift 4 - 提权运行容器
  11. c语言随机数表,C语言随机数
  12. 算法笔记_面试题_22. 图与搜索(BFS/DFS)相关_模板及示例十几道
  13. 数据分析-学术前沿趋势分析-论⽂数据统计
  14. Dapr for dotnet | 服务调用-Service invoke(HTTP协议)
  15. linux系统内存dump机制介绍(一)--kdump
  16. [bzoj3238]差异
  17. Python_从零开始-同步学习进度
  18. 数字孪生技术结合大数据创建智慧城市体系架构
  19. 1、labelImg标准图集技巧
  20. 长安渝北工厂机器人_面包车界的悲情品牌-「长安凯程欧尚」为何不敌通用五菱宝骏?...

热门文章

  1. Linux命令--tree--使用/详解/实例
  2. C++ 模板级实现单链表
  3. java beanutils 性能_对比BeanUtils、PropertyUtils、BeanCopier的性能消耗
  4. arm linux内核实时补丁,宋宝华: Linux实时补丁的原理和实践
  5. WinXP下由于图标造成的System.Windows.Markup.XamlParseException
  6. BP神经网络进阶-MINIST分类
  7. maven命令指定打包模块
  8. 内置 230+ 工具,它值得被官方纳入标准库
  9. 蓝松视频编辑SDK, 视频加载快
  10. python代码画土拨鼠_PETA:应放弃传统的土拨鼠日活动 改由AI土拨鼠执行