和同学们一起交流程序定点化过程中的经验,这对同学们的学习很有帮助。本堂课不讲解具体的理论内容,而是从一个实际的文档案例来说明定点化的复杂度和重要性。
定点化是程序走向实用的必经之路。
大多芯片都是在定点运算中发挥速度优势。现在信号处理要求的实时性要求高,所以浮点程序定点化是必须完成的过程,还要保证性能几乎没有变化。
课程《数字信号处理》中有一章专门讲这方面的知识,可见其有多重要。
先看看文档内容吧!
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的人自然能明白!
全部0条评论
快来发表一下你的评论吧 !