DSP--点编程技术概要.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DSP--点编程技术概要

技术总结 浮点和定点的转换 在定点中,最大的正数为32767,对应浮点为1,最小的负数为-32768,对应浮点为-1。转换过程为将正浮点数乘以32767得到相应的定点输出,如0.5转换为定点过程为0.5×32767=0x3fff;3转换为定点过程为3×32767=0x17ffd。负浮点数乘以32767,再减去1。 定点乘法:在定点中,小数乘法和整数乘法是不同的。如整数乘法16383×16383在定点中可以表示为0x3fff×0x3fff,小数乘法0.5×0.5=0.25在定点中表示为2×0x3fff×0x3fff=0x1fff0002,取高16位为有效数据0x1fff=8191,8191/32767=0.25。 Q15,Q16,Q30和Q31 在定点编程中,我们经常会遇到对定点数据的位数进行舍取,即在正确的位置确定数据小数点的问题,下面我们讨论两个例子: 第一个例子是0.5×0.5=0.25,我们前面说到定点乘法要将结果乘以2,这是因为该小数乘法可以等效为定点乘法: 我们以分母确定整个小数的有效位数,0x3fff0001的有效位为30位,小数为Q30。如果将小数的分子分母同时乘以2,则分母31位有效,相应分子有效位也为31位,小数为Q31。 第二个例子是整数小数乘法:0.5×3=1.5。仍然进行等效变形: 当整数乘以小数的时候,结果有可能大于1,小数点后的有效位取Q16或者Q32,所以 1.5表示为定点为0x17ffa,指数。 从上面两个例子可以看出,确定定点对应的浮点数的关键在于确定该定点的相对值,在程序实现过程中要记住小数点的位置。 输入归一化 在定点编程实现中,输入归一化过程非常重要,它既可以防止溢出又可以保持精度。比如256个定点数进行平方和求取过程,由于256个数为变量输入,需要考虑最大可能的输出结果:256×(0x7fff×7fff×2)=0x7ffe000200,有效数据为40bit,根据目前zsp的实现能力是可以实现的,没有溢出。但是如果有512个定点数据进行平方和求解,有效数据为41bit,所以处理之前要先对输入数据右移一位。另外如果已知输入数据有特定的规律,比如进行复数乘累加过程时,如果输入复数的实部和虚部只能为0x7fff,0,0x8000,但是实虚部的模不能同时为0x7fff的时候,则估计最大可能输出要将输入数据的特殊规律考虑进去,从而准确确定归一化的系数。 精度 在定点实现中,精度直接影响算法的性能,在不溢出的范围内要最大限度地保证输出精度。 传递精度:为了节省数据空间的开销,模块之间的数据一般以16bit,即word的方式传递;模块内部由于使用局部变量,可以在堆栈区开辟存储空间,乘累加的中间结果一般以32bit,即双word的方式传递。 处理精度:有三种方式可以提高处理过程的精度。 第一种方式:交换执行次序。比如x×y×z,如果已知x和y的数量级在一个很小的范围,而每次乘法的输入都是16bit有效,x×y的输出的高16bit作为下一级的输入的话会带来精度的损失,这个时候可以将较大数量级的输入先执行,输出高16bit的精度会提高。比如0x567×0x8×0x3fff=0x00002b38×0x3fff,如果采用32bit乘以16bit的话,不论输入数据的先后如何,32位结果都是一样的,32位结果为0xacdd4c8。但是如果采用16bit乘以16bit的话,0x00002b38的高16bit为0,再和0x3fff乘的话结果为0。如果采用x×z×y,即0x567×0x3fff×0x8=0x159ba99×0x8,取0x159ba99的高16bit和0x8相乘结果为0xac8。 第二种方式:保留指数操作。大多数情况下,我们并不知道输入数据的数量级,我们可以不考虑执行先后顺序,在每一步操作时候,都采用保留指数和底数,但是如果是序列操作时,这种处理方式需要的运算量较大,一般在数据量少的时候用这种方法。还是以上面的0x567×0x8×0x3fff=0x00002b38×0x3fff为例,0x00002b38=0,再和第三个数相乘,最后结果为0x5670×0x3fff=0x159ba990,指数为。 第三种方式:输出归一化方式。上面谈到序列操作时,第二种处理方式是对每个数据都归一化,每个数据都要保留相应的指数信息,计算量较大,存储空间也较大。所以我们最常用的方法是:只对序列的最大值求取归一化指数,序列中的每个值都按照同一个指数进行归一化,这样即不会溢出,也保证中间过程的精度。如x×y×z是序列操作的话,我们保存x×y的输出,然后找出序列中的最大值,求归一化指数,对x×y的结果进行归一化;将归一化后的结果和序列z相乘,根据归一化的指数再将x×y×z还原成真实值。 线性关系 防

文档评论(0)

h0r3d7m + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档