实用数字滤波器设计小结之IIR和FIR
2014-07-27 20:14
232 查看
总时不时接触和用到滤波器设计,现在对它做一个简要的小结,本文仅仅是从应用出发的,实用主义,理论上冗长的详解可网上轻松查到。
H为系数,x输入,y为输出,通常我们是根据历史数据x和系数H求出y,那么在实时滤波中我们只需根据我们设计的滤波器系数来选择需要存储的个数,然后求出y.
例如:已知:H[4] = {1,2,3,4};x[4] = {a,b,c,d};
Y = 1*d + 2*c +3*b + 4*d; H[0]与最新采集的x相乘。
求出最新采集数值d滤波后的值y.
双线性变换:
S —— Z
s-平面(ωA)和 z-平面(ωD)不成线性关系
利用双线性变换设计IIR滤波器4步:
1 获取S平面滤波器传递函数
2 预变换S平面ωA到Z平面ωD.
fC= 3000,fs = 24000
3 ωA 进行变换
4 S平面到Z平面
有几点自己原来没有注意到的加以说明。
定点参数输出 set quantization parameters 处需要注意,可选择use unsigned representation 和Scale 他和numerator coefficients to fully utilize the entire dynamic range ,但是需要在设计IIR滤波器时,系统是否稳定。
另外Edit菜单下面的convert to single section可以转化为我们方便编程的numerator和Denominator。
还有Export toworkspace仿真,可以输出coefficients Numerators andDenominators, 也可以输出Objects,simulation
Matlabtest code:
freqz(Num,Den);freqz(Hd);%可以看看是否和设计时的结果是否相识;
y= filter(Num,Den,x); y = filter(Hd,x);%y
就是滤波后的输出,可方便查看仿真结果
FIR例程摘自例程,这里就不重复了!
IIR例程摘自CCS例程…
1 首先看一下滤波器的基本结构
1.1 Finite Impulse Response (FIR)filters
一般公式如下:H为系数,x输入,y为输出,通常我们是根据历史数据x和系数H求出y,那么在实时滤波中我们只需根据我们设计的滤波器系数来选择需要存储的个数,然后求出y.
例如:已知:H[4] = {1,2,3,4};x[4] = {a,b,c,d};
Y = 1*d + 2*c +3*b + 4*d; H[0]与最新采集的x相乘。
求出最新采集数值d滤波后的值y.
1.2 Infinite Impulse Response (IIR) filters
双线性变换:
S —— Z
s-平面(ωA)和 z-平面(ωD)不成线性关系
利用双线性变换设计IIR滤波器4步:
1 获取S平面滤波器传递函数
2 预变换S平面ωA到Z平面ωD.
fC= 3000,fs = 24000
3 ωA 进行变换
4 S平面到Z平面
2 利用MATLAB fdatool 设计滤波器
很多资料介绍如何设计和填写参数,自不必多讲!有几点自己原来没有注意到的加以说明。
定点参数输出 set quantization parameters 处需要注意,可选择use unsigned representation 和Scale 他和numerator coefficients to fully utilize the entire dynamic range ,但是需要在设计IIR滤波器时,系统是否稳定。
另外Edit菜单下面的convert to single section可以转化为我们方便编程的numerator和Denominator。
还有Export toworkspace仿真,可以输出coefficients Numerators andDenominators, 也可以输出Objects,simulation
Matlabtest code:
freqz(Num,Den);freqz(Hd);%可以看看是否和设计时的结果是否相识;
y= filter(Num,Den,x); y = filter(Hd,x);%y
就是滤波后的输出,可方便查看仿真结果
3 C语言至实际应用
3.1 FIR Filters
在MATLAB中上面已经讲到如何进行convert to fixedpoint,然后乘以2^15次方(正负1范围),转换为整数。FIR例程摘自例程,这里就不重复了!
3.2 IIRFilters
需要说明一下,并非所有的浮点都可以转换成定点数,有时候会出错。IIR例程摘自CCS例程…
/*****************************************************************************/ /* second_order_IIR_direct_form_I() */ /*---------------------------------------------------------------------------*/ /* */ /* Second order direct form I IIR filter implemented by cascading two second */ /* order filters. */ /* */ /* This implementation uses two buffers, one for x and the other for y */ /* */ /*****************************************************************************/ signed int second_order_IIR_direct_form_I( const signed int * coefficients, signed int input) { long temp; static signed int x[3] = { 0, 0, 0 }; /* x(n), x(n-1), x(n-2). Must be static */ static signed int y[3] = { 0, 0, 0 }; /* y(n), y(n-1), y(n-2). Must be static */ x[0] = input; /* Copy input to x[0] */ temp = ( (long) coefficients[B0] * x[0]) ; /* B0 * x(n) */ temp += ( (long) coefficients[B1] * x[1]); /* B1/2 * x(n-1) */ temp += ( (long) coefficients[B1] * x[1]); /* B1/2 * x(n-1) */ temp += ( (long) coefficients[B2] * x[2]); /* B2 * x(n-2) */ temp -= ( (long) coefficients[A1] * y[1]); /* A1/2 * y(n-1) */ temp -= ( (long) coefficients[A1] * y[1]); /* A1/2 * y(n-1) */ temp -= ( (long) coefficients[A2] * y[2]); /* A2 * y(n-2) */ /* Divide temp by coefficients[A0] to remove fractional part */ temp >>= 15; y[0] = (short int) ( temp ); /* Shuffle values along one place for next time */ y[2] = y[1]; /* y(n-2) = y(n-1) */ y[1] = y[0]; /* y(n-1) = y(n) */ x[2] = x[1]; /* x(n-2) = x(n-1) */ x[1] = x[0]; /* x(n-1) = x(n) */ return ( (short int) temp ); }
相关文章推荐
- FIR和IIR滤波器的使用范围区别,如何用matlab设计一个滤波器
- 双音多频 DTMF 拨号信号的产生——IIR 数字滤波器的设计和实现
- 多带FIR数字滤波器的频域设计
- 滤波器设计(2):经典FIR数字滤波器的设计
- 滤波器设计(2):经典FIR数字滤波器的设计
- MATLAB双线性变换法IIR切比雪夫低通数字滤波器的设计
- 搜索引擎设计实用教程-以百度为例
- 搜索引擎设计实用教程(1)-以百度为例 之一:查询处理以及分词技术
- 搜索引擎设计实用教程-以百度为例
- .NET实用设计模式:工厂模式(Factory)
- VB6.0设计真正实用的TreeView控件[2003-04-07· ·东方欲晓··yesky]
- Java实用设计模式:Command(命令模式)
- 搜索引擎设计实用教程-以百度为例(二)
- 搜索引擎设计实用教程(2)-以百度为例
- 搜索引擎设计实用教程(3)-以百度为例 之三:对百度分词算法的进一步分析
- 搜索引擎设计实用教程-以百度为例 (1-4) 【FreeXploiT整理】【转至http://blog.csdn.net/malefactor/】
- 小结面向对象的类的设计方式
- 数据库结构设计小结(2)
- .NET实用设计模式:组合模式(Composite)
- .NET实用设计模式:工厂模式(Factory)