建议你用sptool设计并完成仿真吧 我自己单独用tdatool设计滤波器之后simulink也没法完成 不知道啥原因 sptool设计并将你的信号导入到signals里面 然后选择你设计的滤波器并apply 之后就可以看输出的signal并可以通过fft对输出信号进行频谱分析 比较两个信号的频谱!如果还有问题继续联系我!
采用级联结构的。从级联型结构中看到,它的每一个基本节只是关系到滤波器的某一对极点和一对零点,调整系数、只单独调整了滤波器第i对零点而不影响其他任何零点。同样,调整系数、也只单独调整了滤波器第i对极点。因此,这种结构便于准确地实现单节滤波器的零极点,也便于性能调整。然而从总体看,某频率成分在某一节阻断即表现为整体上的阻断,必须在每一节畅通才能表现为整体的畅通,所以,容易控制零点而难于调整极点。
还可看到,这种结构可以有许多不同的零极点搭配关系,基本节级联时前后次序也可不同,它们在实际工作时,由于字长的限制,不同方案运算后所带来的误差也是不同的,因此排列组合的选择,将决定滤波器的优劣。如何才能得到最好的排列搭配,这是一个最优化问题,在此不作讨论。
O(∩_∩)O~,我也是西华的呢。电气__晓说~~!!
其中为如下的二阶形式:
这样就可以将任意阶的IIR滤波器通过若干二阶网络(也称为滤波器的二阶基本节)级联起来构成,其结构如图1所示。其中,代表第i级的二阶网络。
对于每一个二阶基本节,可以转置直接II型结构加以实现,如图2所示。
采用这种级联结构实现IIR滤波器的优点是每一个基本节只是关系到滤波器的某一对极点和一对零点,调整系数a0i、a1i、a2i,只单独地调整了滤波器第i对零点而不影响其他任何零、极点。同样,调整b1i、b2i系数、也只单独调整了第i对极点。因此,这种结构便于准确地实现滤波器的零、极点,也便于调整滤波器的频率响应性能。这种结构的另一个优点是存储单元需要较少,在硬件实现时,可以用一个二阶节进行时分复用,从而降低对FPGA硬件资源的要求。
IIR数字滤波器的设计
利用MATLAB信号处理工具箱中的滤波器设计和分析工具(FDATool)可以很方便地设计出符合应用要求的未经量化的IIR滤波器。需要将MATLAB设计出的IIR滤波器进一步分解和量化,从而获得可用FPGA实现的滤波器系数。
由于采用了级联结构,因此如何将滤波器的每一个极点和零点相组合,从而使得数字滤波器输出所含的噪声最小是个十分关键的问题。为了产生最优的量化后的IIR数字滤波器,采用如下步骤进行设计。
(1)首先计算整体传递函数的零极点;
(2)选取具有最大幅度的极点以及距离它最近的零点,使用它们组成一个二阶基本节的传递函数;
(3)对于剩下的极点和零点采用与(2)相类似的步骤,直至形成所有的二阶基本节。
通过上面三步法进行的设计可以保证IIR数字滤波器中N位乘法器产生的量化舍入误差最小。
为了设计出可用FPGA实现的数字滤波器,需要对上一步分解获得的二阶基本节的滤波器系数进行量化,即用一个固定的字长加以表示。量化过程中由于存在不同程度的量化误差,由此会导致滤波器的频率响应出现偏差,严重时会使IIR滤波器的极点移到单位圆之外,系统因而失去稳定性。为了获得最优的滤波器系数,采用以下步骤进行量化。
(1)计算每个系数的绝对值;
(2)查找出每个系数绝对值中的最大值;
(3)计算比此绝对值大的最小整数;
(4)对(3)的结果取反获得负整数;
(5)计算需要表示此整数的最小位数;
(6)计算用于表示系数值分数部分的余下位数。
除了系数存在量化误差,数字滤波器运算过程中有限字长效应也会造成误差,因此对滤波器中乘法器、加法器及寄存器的数据宽度要也进行合理的设计,以防止产生极限环现象和溢出振荡。
IIR数字滤波器的VHDL描述
由上一节设计出来的IIR数字滤波器可以进一步用VHDL语言加以描述,通过编译、功能仿真、综合和时序仿真之后就可以在FPGA上实现了。由于采用了级联结构,每一个二阶基本节的VHDL描述都是类似的,只是滤波器的系数有所不同,下面着重讨论二阶基本节的VHDL描述。
采用VHDL描述的二阶基本节的顶层结构如图3所示。数据在执行单元内进行处理。执行单元内部包含算术和逻辑单元以及一些寄存器;算术和逻辑单元主要由串行乘法器和累加器组成;存储器包括工作RAM和系数ROM两部分,分别用于存放计算的中间结果和滤波器的系数;存储器和执行单元通过内部总线相连接;控制模块包括程序ROM和程序控制单元,程序ROM中存放有滤波算法的程序,程序控制单元用于解释指令并为数据处理模块产生控制信号。
此结构既可以接收串行输入的数据,也可以接收并行输入的数据,通过SEL进行设置。外部CPU可以通过READ信号来访问滤波器的计算结果,另外,外部CPU也可以通过地址总线A[3:0]对内部的存储器进行访问,用WRITE信号对滤波器系数进行写 *** 作,这样外部CPU就可以根据自己的需要对滤波器进行配置,灵活地实现各种功能。
各信号的含义如下。
CLK:系统时钟;
RES:异步全局复位信号,低有效;
SDATA:串行输入数据;
PDATA:并行输入数据;
SEL:设置输入数据为并行还是串行;
READ:读信号,低有效;
WRITE:写信号,低有效;
SRES:同步复位信号,高有效;
CLKI:外部CPU时钟;
A[3:0]:外部CPU访问内部寄存器的地址总线;
OUT:输出数据。
内部算术与逻辑单元是整个滤波器的核心,它的结构如图4所示。计算过程是,X、Y为输入数据,通过选择器进入乘法器,算术与逻辑单元从系数ROM中读取滤波器的系数用以输入数据相乘,相乘的结果与前一步的结果相加进入累加器,累加器读取上一步计算的中间结果A并计算,最后将此步计算的结果M存入到RAM中去。
结语
本文介绍了一种采用级联结构在FPGA上实现IIR数字滤波器的方法。在实际使用中,可以根据不同精度要求,方便地对该IIR滤波器进行修改以满足不同的指标要求,灵活地组成任意阶不同类型的滤波器。同时,在系统运行中,外部CPU可以灵活修改滤波器系数,改变滤波器的频率响应,满足特定的应用要求。
参考文献
1 王世一数字信号处理北京理工大学出版社 1997
2 Bernard Gold, Lawrence R Rabiner "Theory and Application of Digital Signal Processing" Prentice-Hall Inc, 1975
3 Dimitris G Manolakis, John G Proakis "Digital Signal Processing: Principles, Algorithms, and
3 iir数字滤波器在计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,其设计工作量比较小,对计算工具的要求不高。在设计一个iir数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
4 iir数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。
在matlab下设计iir滤波器可使用buttterworth函数设计出巴特沃斯滤波器,使用cheby1函数设计出契比雪夫i型滤波器,使用cheby2设计出契比雪夫II型滤波器,使用ellipord函数设计出椭圆滤波器。下面主要介绍前两个函数的使用。
与fir滤波器的设计不同,iir滤波器设计时的阶数不是由设计者指定,而是根据设计者输入的各个滤波器参数(截止频率、通带滤纹、阻带衰减等),由软件设计出满足这些参数的最低滤波器阶数。在matlab下设计不同类型iir滤波器均有与之对应的函数用于阶数的选择。
iir单位响应为无限脉冲序列fir单位响应为有限的
iir幅频特性精度很高,不是线性相位的,可以应用于对相位信息不敏感的音频信号上;
fir幅频特性精度较之于iir低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变。这是很好的性质。
另外有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要
以上就是关于已经在MATLAB环境下设计好IIR滤波器了,但是如何加程序给滤波器,可以给图片降噪全部的内容,包括:已经在MATLAB环境下设计好IIR滤波器了,但是如何加程序给滤波器,可以给图片降噪、要得到一个方便调节零极点的IIR滤波器应用什么结构、求教如何量化IIR数字滤波器系数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)