浮点程序已经给出了,那么定点程序会是什么样子呢?为什么要进行定点仿真呢?这是产品的要求!很多产品中用于实现算法的器件都会是FPGA或者DSP,在这些器件中,定点运算是绝对的主流!定点运算的性能不会比浮点差多少,但速度会快太多。因此浮点运算自然需要转换为定点运算!如何转换?确实包含很多原则和技巧!本文内容会特别的多,请大家耐心看完!
如何将定点数转换为浮点数?通过量化!量化过程有技巧吗?当然,后续慢慢讲。此时第一步就是需要考虑器件的性能,然后决定量化的位数!不过在讲定点程序之前还是先带着大家熟悉一下指数滤波器的相关性能!怎么看性能?通过仿真来了解最直观!
DSP处理器有定点型和浮点型之分。针对定点型DSP处理器,为了提高DSP运算速度,需要将浮点型参数转化成定点型参数,同时还要考虑精度问题。采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于运算芯片所给定的字长。
字长越长,所能表示的数的范围越大,精度也越高。matlab软件里面也有字长的概念!在FPGA中,参与运算的数以二进制补码形式表示。比如设定数的字长为16位。每个16位数用一个符号位来表示数的正负,0表示数值为正,1则表示数值为负。其余15位表示数值的大小。
参与数值运算的数为16位的整型数。但在许多情况下,数学运算过程中的数不一定都是整数。定点芯片本身无法处理小数,必须是由程序员来确定一个数的小数点处于16位中的哪一位。这就是数的定标!通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数。所以浮点转定点的关键是定标和截位操作!
我们在编写DSP浮点算法时,一般都是采用高级语言(如C语言或者matlab语言)来编写浮点程序。程序中所用的变量一般既有整型数,又有浮点数。后来我都用matlab来写定点程序,效果是一样的。不过自己的c编程能力后来就慢慢退化了。
先看指数滤波器的程序,然后再学习AGC的定点程序!
指数滤波器也能滤除噪声!但是什么样的噪声呢?白噪声!再来看定点的AGC程序吧!这是之前工作时候写的程序!没有改动!这个定点程序能用在QAM接收机中,不能用于短波接收机中!为什么呢?后续文章再讲解!当年研制完短波电台后,我整整休整了一个星期,太累了。用脑过度,一时很难缓的过来!
%%%%%%% File: FixpointAGC_test_rel1.m %%%%%%
%%%%%%%% date: 2008-08-07 %%%%%%%%
%%%%% 目的
% 在程序DigitalAGC_test_rel1改进成定点优化的程序。
编辑:jq
全部0条评论
快来发表一下你的评论吧 !