本文中的例子和代码放在Github

First,什么是双二阶滤波器?wiki上是这么说的:二阶、递归、线性,含有两个极点和两个零点,“双二阶”的名字来源于它的传递函数是两个二次多项式的比值。

In signal processing, a digital biquad filter is a second order recursive linear filter, containing two poles and two zeros. "Biquad" is an abbreviation of "biquadratic", which refers to the fact that in the Z domain, its transfer function is the ratio of two quadratic functions: H(z)=(b₀+b₁z⁻¹+b₂z⁻²)/(a₀+a₁z⁻¹+a₂z⁻²) The coefficients are often normalized such that a₀ = 1: H(z)=(b₀+b₁z⁻¹+b₂z⁻²)/(1+a₁z⁻¹+a₂z⁻²) High-order IIR filters can be highly sensitive to quantization of their coefficients, and can easily become unstable.

归一化传递函数写成这样:

$$H(z)= \frac{b₀+b₁z⁻¹+b₂z⁻²}{1+a₁z⁻¹+a₂z⁻²}$$

用MATLAB的Filter Designer来设计一个:400Hz带通IIR,需要用4个Sections来实现,默认给出的滤波器结构是Direct-Form II。

在菜单栏的Analysis中选择Filter Coeffients就能看到滤波器系数了:

Numerator,分子,也就是传递函数中的b项们,从上到下依次为$b_0$,$b_1$和$b_2$。 Denominator,分母,也就是传递函数中的a项,从上到下依次为$a_0$,$a_1$和$a_2$,其中$a_0$总是为1。 Gain,增益。

用数组来存放滤波器系数:

//8-order IIR filter with 4 sections

const int sections = 4;

//nominator

const float b[4][3] = {

{ 1, -1.984454421, 1 },

{ 1, -1.999405318, 1 },

{ 1, -1.993167556, 1 },

{ 1, -1.998644244, 1 }

};

//denominator

const float a[4][3] = {

{ 1, -1.984532740, 0.9884094716 },

{ 1, -1.988571923, 0.9909378613 },

{ 1, -1.991214225, 0.9962624248 },

{ 1, -1.995917854, 0.9977478940 }

};

const float gain[4] = { 0.583805364, 0.583805364, 0.170388576, 0.170388576 };

以Direct-Form II为例来写个实现代码,计算过程是: $$y[n]=b_{0}w[n]+b_{1}w[n-1]+b_{2}w[n-2]$$ 其中$$w[n]=x[n]-a_{1}w[n-1]-a_{2}w[n-2]$$ 代码如下: 用一个数组来存放滤波器的中间状态量$w[n-1]$和$w[n-2]$:

float w[sections][2]; //filter states

在滤波计算之前,初始化滤波器:

for (int i = 0; i < sections; i++) {

w[i][0] = 0; //w[n-1]

w[i][1] = 0; //w[n-2]

}

正式开始计算:pcmIn[i]是原始的输入信号,输入section 1,section 1的输出则作为section 2的输入,以此类推,由于这个滤波器由4个sections构成,因此要循环4次。 注意输出要乘gain。

y[0] = pcmIn[i];

for (j = 0; j < sections; j++) {

tmp[j] = y[j] - a[j][1] * w[j][0] - a[j][2] * w[j][1]; //calculate w[n]

y[j+1] = tmp[j] + b[j][1] * w[j][0] + b[j][2] * w[j][1]; //calculate the j-th section filter output y[n]

w[j][1] = w[j][0]; //move w[n-1] -> w[n-2]

w[j][0] = tmp[j]; //move w[n] -> w[n-1]

y[j+1] = gain[j] * y[j+1]; //multiply with gain

}

out = y[j];

如果需要得到例如PCM16的输出,那么再对out进行限幅,that's all.

二阶滤波器matlab代码,双二阶滤波器之MATLAB设计及C语言实现相关推荐

  1. Matlab代码 多时间尺度优化调度 MATLAB程序含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度

    Matlab代码 多时间尺度优化调度 MATLAB程序,论文复现<含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度> 是一篇多时间尺度的优化运行程序 有需要的可以先知网阅读一下文章 ID: ...

  2. 用MATLAB编写限幅滤波程序,双二阶滤波器之MATLAB设计及C语言实现

    本文中的例子和代码放在Github First,什么是双二阶滤波器?wiki上是这么说的:二阶.递归.线性,含有两个极点和两个零点,"双二阶"的名字来源于它的传递函数是两个二次多项 ...

  3. matlab滤波器设计双陷滤波,基于MATLAB 双线性变换法IIR 滤波器的设计

    摘要:滤波是信号处理的基础,因此滤波器的设计也就成为数字信号处理的基本问题之一.数字滤波是对数字信号处理不可或缺的环节,其好处远远大于模拟滤波器.本文应用MATLAB,实现了用双线性变换法设计IIR滤 ...

  4. 【光学】基于matlab模拟双孔干涉附matlab代码

    1 内容介绍 通过Matlab软件编程,实现光学双缝干涉的计算机仿真.仿真结果对学生理解光学原理的基本概念很有帮助,提高了教学效果. 2 部分代码​ %REDME!!!该仿真模拟了双孔干事实验中光屏逐 ...

  5. matlab实现频域率滤波,基于Matlab的图像的频域滤波实现及研究.doc

    摘要:图像的频域滤波是图像增强的一种方法.图像增强是图像处理的方法之一,有频率域法和空间域法.频率域法把图像看成一种二维信号,对其进行二维傅里叶变换的信号增强,采用低通滤波法可以去掉图像的噪声:采用高 ...

  6. 滑动均值滤波matlab实现,滑动均值滤波的matlab和Java实现

    最近时间在研究滤波算法,目的是为了更好的识别音频数据.因为有些音频数据里面的杂波太多,很难识别,所以需要先对其进行过滤,才能解析识别.为此,我先在matlab上做了仿真.采用的很多滤波算法,最后选择了 ...

  7. python怎么运行matlab代码_用python运行matlab代码

    我得到了一个错误:Traceback (most recent call last): File "", line 1, in File "C:\Users\XYZ\Ap ...

  8. 2dpca的matlab代码,2DPCA人脸识别的matlab代码

    [实例简介] 很好用的2DPCA人脸识别的matlab代码 [实例截图] [核心代码] 2dpcamatlab └── 2dpcamatlab ├── CreateDatabase.m ├── orl ...

  9. 彩色matlab代码拷贝到word研究,matlab编辑器合并_彩色MATLAB代码拷贝到WORD研究

    公众号:理念世界的影子 文不可无观点,观点不可无论据. 转载请注明出处 结果简单,重在过程 有时将彩色Matlab代码拷贝到Word中,可能出现彩色消失.中文乱码.没有行号.字体不佳等问题.已有的措施 ...

  10. 3.过滤——高斯滤波器之Matlab、Octave实战、保持两个高斯直行_5

    目录 在Matlab使用高斯滤波器 在Octave高斯滤波器去除噪音 保持两个高斯直行 在Matlab使用高斯滤波器 本文首先使用Matlab展示示例,我要做的是在Matlab中演示过滤中的代码和效果 ...

最新文章

  1. 从演进式角度看消息队列
  2. 由于存储区是只读的,存储区已满,或者存储区没有正确打开,所以导致失败
  3. 虚拟机安装CentOS 5.5详细过程和上网配置
  4. 浅谈sql中的in与not in,exists与not exists的区别以及性能分析
  5. 使用telnet命令验证邮箱
  6. (转载)grep的使用
  7. C/C++整数除法以及保留小数位的问题
  8. win10计算器_你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
  9. MRAM学习笔记——3.SOT-MTJ SPICE model解析
  10. 【VUE】前端搜索引擎优化seo
  11. 2019/04/12 华为通用软件开发工程师现场面试(offer到手)
  12. 【Stanford Online】Engineering: Algorithms1 NO.2 Asymptotic analysis
  13. 【论文翻译 假新闻检测综述 HICSS 2019】Can Machines Learn to Detect Fake News? A Survey Focused on Social Media
  14. 如何进行用户体验的评估分析
  15. 昆明公交车和站台建在路中央
  16. linux文件删除 能恢复出厂设置密码,OpenWrt固件通过reset键恢复出厂设置步骤
  17. 3dmax 单位匹配和基本单位设置
  18. AWC / Advanced SystemCare Pro(专业版)V3.7.0+有效注册码
  19. 在线伪原创代写工具文章生成器
  20. 我的淘宝新开店铺历时10年成长经验

热门文章

  1. python中取绝对值简单方法总结
  2. Android系统网络架构
  3. android 视频播放器m3u8,Android 播放/下载M3U8视频(转)
  4. 断面测量数据格式转换
  5. java 内置中介模式_详解Java设计模式编程中的中介者模式
  6. 【魔兽世界】WLK版本的常规宏教程
  7. python ipo模型是什么意思_IPO里的估值模型是什么情况?
  8. 用户旅程图进阶:实操与模板
  9. 【Python 小白到精通 | 课程笔记】第三章:数据处理就像侦探游戏(函数和包)
  10. 四川省内二本计算机公立好的大学排名,盘点四川省最好的几所二本大学