Matlab滤波器的verilog实现,FIR滤波器的Verilog实现

设计总结FIR简介用Verilog实现FIR需要注意的问题?2.1 浮点数和定点数之间的转换2.2 利用FilterDesigner设计FIR2.3 Matlab仿真分析2.4 补码问题Verilog实现代码FIR简介FIR全称为:Finite Impluse Response,称之为:有限长单位冲击响应滤波器。也叫非递归线性滤波器,也就是抽头没有反馈。显然,这是一种数字域的滤波器。目前实现数字滤...
摘要由CSDN通过智能技术生成

设计总结

FIR简介

用Verilog实现FIR需要注意的问题?

2.1 浮点数和定点数之间的转换

2.2 利用FilterDesigner设计FIR

2.3 Matlab仿真分析

2.4 补码问题

Verilog实现

代码

FIR简介

FIR全称为:Finite Impluse Response,称之为:有限长单位冲击响应滤波器。也叫非递归线性滤波器,也就是抽头没有反馈。显然,这是一种数字域的滤波器。目前实现数字滤波器的方案可分为三种:

单片数字滤波器集成电路;

DSP;

PLD(可编程逻辑器件)。

一个数字滤波器在离散域常用常系数线性差分方程表示:

03cfc5d62794?from=timeline

其z域的系统函数形式为:

03cfc5d62794?from=timeline

对于FIR来讲,也就是y[n-k]的权值为零(无反馈)。所以FIR的离散域常用常系数线性差分方程为:

03cfc5d62794?from=timeline

系统框图为:

03cfc5d62794?from=timeline

因此,对于一个FIR滤波器,若知道每个抽头的权值和权值个数,则滤波器就可确定下来。

用Verilog实现FIR需要注意的问题?

使用Verilog设计FIR,个人理解最终重要的问题在于输入信号位宽、权值位宽、以及输出信号位宽的确定。它们的确定决定了系统能够处理的信号的范围,而其中涉及到的一个问题就是浮点数转定点数。

至于滤波器阶数以及滤波器抽头权值的确定,可以借用Matlab中的FilterDesigner工具来分析。

2.1 浮点数和定点数之间的转换

浮点数和定点数之间的转换可以理解为两个域之间的转换,浮点域适合域计算机做分析,而定点域适合于具体的硬件实现。那么,计算机开发的算法如何转换成具体的电路实现?这就涉及到一个域的变换的问题。

为了把浮点域中的数据转换成定点域中的数据,可以使用以下步骤:

假设浮点数据为变量a;

step1:计算b=a* 2^(F) ,其中,F的确定至关重要,直接影响了定点域数据的分辨率。注意,b使用十进制表示。

step2:round;求出b最近的整数值,例如:

round(4.45) = 4;

round(-1.9) = -2;

step3:将十进制的round(b)用二进制表示,记为c。

step4:假设c需要n bits可以表示,这n bits包括了定点域的小数部分和整数部分。

上述步骤1中,F的值为如何确定呢?F是十进制a转成二进制时,二进制的小数位数。举例说明:

假设十进制形式的a = 3.625;

那么可以将其二进制形式了可以表示为(1):11.1010;

当然,也可以将其表示为(2):0011.1010;

还可以将其表示为(3):11.10100000;

甚至,还可以将其表示为(4):000011.10100000;

可以看出,这几种二进制的表示方法殊途同归,其值都为十进制3.625;

对于(1),F = 4;

对于(2),F = 4;

对于(3),F = 8;

对于(4),F = 8;

可以看出,F的确定似乎是很随意的,F值越大,能表示的数据越准确;但是,有的浮点数并不能精确地用二进制表示,如:

a = 3.613

这个十进制数用无论多少位二进制都是无法表示的;

加入确定其二进制形式的整数位数为3,小数位数为6,则:

转成二进制数可以为011.100111;

而011.100111实际值为3.609375;

两数之间有0.003625的误差;

可以看出,二进制小数位越多,能表示的浮点数越精确;但实际的硬件电路资源是有限的,不可能针对这种数据不限制地增加小数的位数。

以上就是F的确定,越大越好,但是资源消耗很大;但是太小,影响数据的精度。所以,选取F时,需要在硬件资源和数据精度做一个权衡。

针对浮点转定点,这里给出一个具体的示例:

假设定点数用8位表示,F=3 , a = 3.013;

step1:b = a * 2^(F) = a * 2^(+3) = 24.1040

step2:round(b) = round(24.1040) = 24

step3:c = dec2bin(24) = 11000

step4 : c = 00011.000

step4中的c即为硬件中的定点数形式。

数据操作时用step3中的数据,(因为是定点数据,所以输入11000时,硬件自动划分3位为小数部分,其他的为整数部分)

error = 3.013 - 3 = 0.013

所以,数据位宽的选择很重。当然,这里还有一个问题,也就是数据溢出,假设上面的实例中,a = 3.013变为63.013,那整数部分就是111111,显然,5位的整数位宽无法表示这个数据,这就会导致数据溢出。数据溢出存在数据上溢出和数据下溢。

2.2 利用FilterDesigner设计FIR

在命令窗口输入filterDesigner;即可打开工具filterDesigner。红色区域设置滤波器具体指标。

值得一提的就是这个采样频率Fs,它是采样信号的频率,就是每秒钟采集多少个点(数据)。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值