数字IIR滤波器的设计简介

1 数字滤波器概述

在生活中,广义的滤波器也是无处不在,环境中存在很多人类能听到的声音,但是我们在聆听时会听见对我们自己来说关键的声音,滤除弱化我们不关心的声音,这其实就可以算是广义的一种滤波过程。滤波就是选取留下我们需要的,滤除弱化我们不需要的。在信号处理领域,滤波器是一个避不开的话题。对于模拟信号的处理有模拟滤波器,对于数字信号的处理有数字滤波器。在数字滤波器中,IIR(无限冲激响应)数字滤波器是一大类,还有一大类是FIR(有限冲激响应)数字滤波器。数字滤波器的系统函数可表述如下所示。

H(z)=\frac{\sum_{j=0}^{M}b_{j}^{-j}}{1+\sum_{i=1}^{N}a_{i}z^{-i}}

如果a_{i}均等于0,则该系统函数为FIR滤波器的系统函数,只要有a_{i}不等于0,则该系统函数是IIR滤波器的系统函数。

本文仅从数字滤波器的系统函数出发,记录数字IC设计人员设计滤波器。如果要知道如何获得符合需求的数字滤波器的系统函数会在后面整理的笔记中贴出来。

2 系统函数对应的系统框图和信号流图

IIR滤波器的系统框图和信号流图是等效的,下面举例给出两个具体的IIR滤波器的系统函数并给出系统框图和信号流图。

H(z)=\frac{1-4z^{-256}+6z^{-512}-4z^{-768}+z^{-1024}}{1-4z^{-1}+6z^{-2}-4z^{-3}+z^{-4}}

系统框图

信号流图

matlab代码

digital_input=input_data(1025:end,1);
x_input(1:1024,1)=0;
y_input(1:4,0)=0;

for i=1:1025
y=digital_input(i,1)-4*x_input(256,1)+6*x_input(512,1)-4*x_input(768,1)+x_input(1024,1)+4*y_input(1,1)-6*y_input(2,1)+4*y_input(3,1)-y_input(4,1);
x_input=[digital_input(i,1);x_input(1:end-1,1)];
y_input=[y;y_input(1:3,1)];
end

H(z)=\frac{z^{-1}+\frac{3}4{}z^{-2}}{1-\frac{9}{16}z^{-2}}

系统框图

信号流图

其中的z^{-1}表示一个延时单元,在数字电路中则是一个D触发器。系统框图和信号流图是等价的,系统框图可以通过simulink搭建进行仿真,信号流图可以直接用于编写.m文件调用matlab进行仿真,这两个仿真结果可以进行比对。在进行数字电路设计时采用信号流图的方式可以少处理一次信号溢出和截短。

3 数字设计时的注意事项

(1)明确滤波器输入的实际物理意义

由于滤波器的用处很多,因此滤波器的输入可能会具有不同的物理意义,明白滤波器输入信号的物理意义方便在滤波器设计时对数据进行处理。

比如有的滤波器的输入是一个多bit数据,可能表示实际输入信号具有我们理解的数学上正负意义。

有的滤波器的输入是1bit数据,仅有0和1两个符号,而0和1表示的是与基准值的比较结果,如1表示大于基准值,0表示小于基准值。这里的0和1并不表示具体的数值,更无正负之分。

(2)设计滤波器时有无符号的处理

如果数据是有符号数,可以直接按照有符号的加减乘除进行计算,和我们熟悉的数学运算一样处理。

但如果是无符号数,当和滤波器系数进行相乘时,可能物理意义理解就不是很容易,建议将无符号数转换成有物理意义的有符号数,比如将大于基准值的输入记为+1,小于基准值的记为-1,同时也方便数据溢出的处理。也可以将滤波器输入的0和1当成是输入为0和有输入来处理,即0按照有符号数的0,1按照有符号数的1来计算,但滤波器内部还是按照有符号数来处理。两种处理方式(+1/-1,1/0)的区别在于前者去除了直流分量,后者保留了直流分量。

(3)设计滤波器时数据溢出的处理

在RTL设计中数据位宽是固定的,因此可能会有超出寄存器位宽的数值产生,即数据存在向上(正向)溢出(大于寄存器能表示的最大值)和向下(负向)溢出(小于寄存器能表示的最小值),这时需要考虑到溢出的处理:大于最大值直接取最大值,小于最小值取最小值;重量化等。具体选用什么方法,根据可接受的性能要求选取。如果存在小数,还需考虑对小数的截短处理。

关于数据的溢出处理和截短处理可以参考下面的链接:

基于FPGA的数字信号处理(8)--RTL运算的溢出与保护_数字信号处理中防止溢出的方法-CSDN博客

基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)_wrap截位-CSDN博客 基于FPGA的数字信号处理(10)--定点数的舍入模式(1)四舍五入round_fpga四舍五入-CSDN博客

round(四舍五入)

00.10.50.91-0.1-0.5-0.9-1
round结果001110-1-1-1

基于FPGA的数字信号处理(11)--定点数的舍入模式(2)向最临近值取整nearest-CSDN博客

00.10.50.91-0.1-0.5-0.6-1
nearest结果0011100-1-1

基于FPGA的数字信号处理(12)--定点数的舍入模式(3)收敛取整convergent_verilogfpga定点数处理技巧-CSDN博客

00.10.40.50.60.91-0.1-0.4-0.5-0.6-0.9-1
convergent结果0000111000-1-1-1

基于FPGA的数字信号处理(13)--定点数的舍入模式(4)向下取整floor_指定定点运算的舍入模式-CSDN博客

 floor向下截短

00.10.91-0.1-0.9-1
floor结果0001-1-1-1

基于FPGA的数字信号处理(14)--定点数的舍入模式(5)向上取整ceil_fpga ceil-CSDN博客

 ceil向上截短

00.10.91-0.1-0.9-1
ceil结果011100-1

关于IIR滤波器的设计的笔记就简要的整理在这里……如有错误欢迎指出。

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值