根据实例来介绍程序定点化的复杂度和重要性

描述

和同学们一起交流程序定点化过程中的经验,这对同学们的学习很有帮助。本堂课不讲解具体的理论内容,而是从一个实际的文档案例来说明定点化的复杂度和重要性。

定点化是程序走向实用的必经之路。

大多芯片都是在定点运算中发挥速度优势。现在信号处理要求的实时性要求高,所以浮点程序定点化是必须完成的过程,还要保证性能几乎没有变化。

课程《数字信号处理》中有一章专门讲这方面的知识,可见其有多重要。

先看看文档内容吧!

1. 设计与调试总结

1.1. 有关verilog HDL

1.1.1. 二进制补码取反

既是双目的减法运算符,也可演变为单目运算符得到原值的二进制补码。

1.1.2. 二维数组

假设对于一个位宽为wordsize,长度为memsize的二维数组由如下定义:

reg [wordsize-1:0]  mem[memsize-1:0];

如果想单独读取二位数组中地址为addr的某个字,那么addr只能是模块内部产生的变量,而不能是外部输入。

1.1.3. 带符号移位操作符

使用verilog HDL语言中的带符号移位运算符“>>>”和“<<<”时,需要设置变量为signed型,否则带符号移位无效。

1.2. CIC经验总结

1.2.1. CIC阶数对下变频器频率响应的影响

实际测试表明5级的CIC滤波器的频率响应性能大大好于3级CIC滤波器,由于1005#电台有较严格的频率响应指标,必须使用5级CIC滤波器。

1.2.2. CIC运算位宽的确定

CIC滤波器中由于存在积分单元,因此计算结果溢出在所难免。由于二进制补码对数据的溢出能够进行自动补偿,所以如果数据采用补码的形式进行运算,对积分器的溢出问题可以不用考虑。在多级CIC级联的情况下,为了保证不至于因为寄存器溢出而导致的数据的丢失,需要对寄存器进行位数的扩展,这就涉及到寄存器最大长度的问题。

1.3. FIR经验总结

1.3.1. FIR滤波器的设计

生成FIR滤波器的matlab语句为:

fir_coef = fir1(255,0.18,'low',chebwin(256,110));

使用窗函数法设计滤波器。

第一个参数是滤波器的阶数。

第二个系数是截止频率,这是一个介于0和1之间的数。假设实际截止频率是F,采样率是Fs,那么函数中第二个参数为 本文的FIR,截止频率是电台要求的3.2KHz,采样率是36KHz。通过公式计算约为0.1778,因此设为0.18,即实际截止频率比3.2KHz稍大。因为之后的DSP处理还有带通滤波器,将会把上截止频率严格限制在3.2KHz。但是该值也不可以太大,截止频率越大,就会有更多的噪声进入音频信号,从而使电台的灵敏度指标恶化。

第三个参数是滤波器类型,可以设为低通滤波器low,高通滤波器high和带通滤波器bandpass。

第四个参数是窗函数的类型,默认为汉明(Hamming)窗,同样还可以设计为KAISER或者切比雪夫窗。本文中的FIR采用切比雪夫窗。切比雪夫窗的使用方法是CHEBWIN(N+1,R),其中N是FIR的阶数,R是带外抑制度,单位是dB。带外抑制越高,电台的灵敏度和阻塞指标越好。

上述内容是一位研究生所写,从文档中可以看出理论知识即使学的好,也需要在实践中去应用。知识只有应用了才能得到真正的提高和理解。

休息一下!

没有定点化的过程,

就很难完成实际的产品。

学过DSP和FPGA的人自然能明白!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分