二阶滤波器matlab代码,双二阶滤波器之MATLAB设计及C语言实现
本文中的例子和代码放在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语言实现相关推荐
- Matlab代码 多时间尺度优化调度 MATLAB程序含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度
Matlab代码 多时间尺度优化调度 MATLAB程序,论文复现<含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度> 是一篇多时间尺度的优化运行程序 有需要的可以先知网阅读一下文章 ID: ...
- 用MATLAB编写限幅滤波程序,双二阶滤波器之MATLAB设计及C语言实现
本文中的例子和代码放在Github First,什么是双二阶滤波器?wiki上是这么说的:二阶.递归.线性,含有两个极点和两个零点,"双二阶"的名字来源于它的传递函数是两个二次多项 ...
- matlab滤波器设计双陷滤波,基于MATLAB 双线性变换法IIR 滤波器的设计
摘要:滤波是信号处理的基础,因此滤波器的设计也就成为数字信号处理的基本问题之一.数字滤波是对数字信号处理不可或缺的环节,其好处远远大于模拟滤波器.本文应用MATLAB,实现了用双线性变换法设计IIR滤 ...
- 【光学】基于matlab模拟双孔干涉附matlab代码
1 内容介绍 通过Matlab软件编程,实现光学双缝干涉的计算机仿真.仿真结果对学生理解光学原理的基本概念很有帮助,提高了教学效果. 2 部分代码 %REDME!!!该仿真模拟了双孔干事实验中光屏逐 ...
- matlab实现频域率滤波,基于Matlab的图像的频域滤波实现及研究.doc
摘要:图像的频域滤波是图像增强的一种方法.图像增强是图像处理的方法之一,有频率域法和空间域法.频率域法把图像看成一种二维信号,对其进行二维傅里叶变换的信号增强,采用低通滤波法可以去掉图像的噪声:采用高 ...
- 滑动均值滤波matlab实现,滑动均值滤波的matlab和Java实现
最近时间在研究滤波算法,目的是为了更好的识别音频数据.因为有些音频数据里面的杂波太多,很难识别,所以需要先对其进行过滤,才能解析识别.为此,我先在matlab上做了仿真.采用的很多滤波算法,最后选择了 ...
- python怎么运行matlab代码_用python运行matlab代码
我得到了一个错误:Traceback (most recent call last): File "", line 1, in File "C:\Users\XYZ\Ap ...
- 2dpca的matlab代码,2DPCA人脸识别的matlab代码
[实例简介] 很好用的2DPCA人脸识别的matlab代码 [实例截图] [核心代码] 2dpcamatlab └── 2dpcamatlab ├── CreateDatabase.m ├── orl ...
- 彩色matlab代码拷贝到word研究,matlab编辑器合并_彩色MATLAB代码拷贝到WORD研究
公众号:理念世界的影子 文不可无观点,观点不可无论据. 转载请注明出处 结果简单,重在过程 有时将彩色Matlab代码拷贝到Word中,可能出现彩色消失.中文乱码.没有行号.字体不佳等问题.已有的措施 ...
- 3.过滤——高斯滤波器之Matlab、Octave实战、保持两个高斯直行_5
目录 在Matlab使用高斯滤波器 在Octave高斯滤波器去除噪音 保持两个高斯直行 在Matlab使用高斯滤波器 本文首先使用Matlab展示示例,我要做的是在Matlab中演示过滤中的代码和效果 ...
最新文章
- 从演进式角度看消息队列
- 由于存储区是只读的,存储区已满,或者存储区没有正确打开,所以导致失败
- 虚拟机安装CentOS 5.5详细过程和上网配置
- 浅谈sql中的in与not in,exists与not exists的区别以及性能分析
- 使用telnet命令验证邮箱
- (转载)grep的使用
- C/C++整数除法以及保留小数位的问题
- win10计算器_你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
- MRAM学习笔记——3.SOT-MTJ SPICE model解析
- 【VUE】前端搜索引擎优化seo
- 2019/04/12 华为通用软件开发工程师现场面试(offer到手)
- 【Stanford Online】Engineering: Algorithms1 NO.2 Asymptotic analysis
- 【论文翻译 假新闻检测综述 HICSS 2019】Can Machines Learn to Detect Fake News? A Survey Focused on Social Media
- 如何进行用户体验的评估分析
- 昆明公交车和站台建在路中央
- linux文件删除 能恢复出厂设置密码,OpenWrt固件通过reset键恢复出厂设置步骤
- 3dmax 单位匹配和基本单位设置
- AWC / Advanced SystemCare Pro(专业版)V3.7.0+有效注册码
- 在线伪原创代写工具文章生成器
- 我的淘宝新开店铺历时10年成长经验
热门文章
- python中取绝对值简单方法总结
- Android系统网络架构
- android 视频播放器m3u8,Android 播放/下载M3U8视频(转)
- 断面测量数据格式转换
- java 内置中介模式_详解Java设计模式编程中的中介者模式
- 【魔兽世界】WLK版本的常规宏教程
- python ipo模型是什么意思_IPO里的估值模型是什么情况?
- 用户旅程图进阶:实操与模板
- 【Python 小白到精通 | 课程笔记】第三章:数据处理就像侦探游戏(函数和包)
- 四川省内二本计算机公立好的大学排名,盘点四川省最好的几所二本大学