Board logo

标题: 浅谈IQmath库的定点DSP算法设计 [打印本页]

作者: yuyang911220    时间: 2015-10-25 12:53     标题: 浅谈IQmath库的定点DSP算法设计

引言

  DSP数字信号处理器DSP数字信号处理器是一个实时处理信号的微处理器,分为定点和浮点两种基本类型,它们之间最大差异在于浮点DSP比定点DSP具有更强大的计算能力和更大范围的动态精度。浮点DSP内部设有专门支持浮点运算的硬件单元,对浮点格式的数据可以直接通过代码加入硬件运算中,因此运算速度很高。而定点DSP没有定点运算单元,它对浮点格式的实数必须通过软件才能实现,这样就增加了指令代码,间接地使得定点DSP运算速度低于浮点DSP,典型的浮点处理器,如TI公司的C6000系列,几乎所有的嵌入式微控制器都为定点处理器,如TI公司的C2000系列。因为浮点DSP的价格更加昂贵,因此定点DSP仍然有其巨大的优势。但是任何算法都需要进行浮点运算,因此如何提高在定点DSP上进行的浮点运算的速度和精度,就成为了用户开发时必须要考虑的关键问题。TI公司专门为定点处理器TMS320C2000系列提供的IQmath库为解决上述问题提供了良好的实现方法。
  数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
1 数的定标:Q格式
  有符号数的表示法,机器数(出现在电脑的二进位数值)有3个特点, 无符号或符号转换成数值来表示,没有 +10101这样的资料,而是以010101来表示,只表示单纯的整数或小数,小数点的位置预设在一定的位置而较少变动,它的长度受到电脑硬体的限制,而不能无限增长。Q格式,就是将一个小数放大若干倍后,用整数来表示小数
  定点DSP不能直接处理小数,编程时处理小数有3种方法:
  ①把变量定义成float类型。该方法编程量最小,但编译出来的代码最大。
  ②把整数变量放大来表示小数。这是许多开发定点DSP的程序员经常使用的方法,但程序不具有可移植性。
  ③采用整数定标的方法来确定小数,即采用Q格式来表示小数。对于定点处理器而言,不管定义哪种类型的数据最终都采用整型数据进行具体的运算。
  整数定标的实质就是通过确定小数点位于哪一位,从而确定小数的精度,通常用Q格式表示。一个32位有符号定点数的Q格式如下:
   
  其中,S是符号位,I是整数部分,f是小数部分。定点数的大小按下式计算:   
  比如Q15定点数的小数点位于第15位的右侧,小数0.25用Q15表示则为2000H。这样很简单地用一个整数格式表示了一个小数,对于定点DSP来说处理小数就与处理整数完全相同了。需要注意的是,采用Q格式数据进行算法设计的时候必须考虑溢出,各种Q格式数据表示的范围和精度参考文献。
2 TMS320F2812定点DSP处理器
  TMS320F2812作为TI公司C2000系列DSP典型产品,一款用于控制的高性能、多功能、高性价比的32位定点DSP芯片。定点处理器TMS320F2812具有很高的性价比,广泛应用于工业控制,特别是应用于处理速度、处理精度方面要求较高的领域。TMS320F2812整合了Flash存储器、A/D转换器、事件管理器、QEP以及多种通信模块,具有强大的控制和信号处理能力,便于用户开发高性能的数字控制系统。特别是TI公司为C28xx内核专门设计的IQmath库能够实现在定点DSP处理器上进行精确的浮点运算和复杂的控制算法。另外,该器件还有3个独立的32位CPU定时器,以及多达56个独立编程的GPIO引脚,可外扩大于1M×16位程序和数据存储器。TMS320F2812采用哈佛总线结构,具有密码保护机制,可进行双16×16乘加和32×32乘加操作,因而可兼顾控制和快速运算的双重功能
  库函数;顾名思义是把函数放到库里是别人把一些常用到的函数编完放到一个文件里,供别人用。别人用的时候把它所在的文件名用#include<>加到里面就可以了。一般是放到lib文件里的,一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。
  IQmath库是高度优化和具有高精度的数学函数库集合。IQmath库里面包含的函数都是采用Q格式定点数作为输入/输出,允许程序设计人员在定点TMS320F281xx处理器上进行浮点算法设计,从而提高运算速度。
3.1 IQmath库组成
  IQmath库可以在c/C++程序设计中使用,它包含4个部分:
  ◆IQmath头文件IQmathLib.h
  ◆包含所有函数和数值表的目标文件IQmath.lib
  ◆命令连接文件IQmath.cmd
  ◆调试用的GEL文件IQmath.gel
  3.2 IQmath库函数
  IQmath库中主要包括以下函数(用户在程序设计开发时可以直接调用):
  ◆格式转换函数IQ()、IQN()、IQtoF()、IQtoIQN()等
  ◆算术运算函数IQmpy()、IQdiv()等
  ◆三角运算函数IQsin()、IQcos()、IQatan2()等
  IQmath库中的各个函数及其含义参考文献。
  3.3 IQmath库函数应用
  下面说明如何在一个C程序中使用IQmath库。首先要安装IQmath库,可以从TI公司的网站http://www.dspvillage.ti.com免费下载得到。然后新建一个工程,将IQmath.lib,IQmath.cmd添加到工程。同时,还要把IQmath.gel添加到工程中,因为IQ变量的变换和调整都是通过GEL函数来实现的。按以上步骤设置完以后,就可以在C语言程序中利用IQmath库里面的函数了。需要注意的是,IQmath.cmd必须包含以下内容:




4 PARK变换浮点算法的定点数实现






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0