DSP实现浮点数的乘除法c语⾔,DSP中浮点转定点运算--定点
数的加减乘除运算
DSP中浮点转定点运算--定点数的加减乘除运算
3.定点数的加减乘除运算
简单的说,各种运算的原则就是先把待运算的数据放⼤⼀定的倍数,在运算的过程中使⽤的放⼤的数据,在最终需要输出结果的时候再调整回去。
举个例来说,有如下运算:
复制代码 代码如下:
…
// coefs1 = 0.023423; coefs2=0.2131
float coefs1,coefs2;
int result;
…
result = 34* coefs1+72* coefs2;
…
代码的意思是,该模块需要输出⼀个整型的结果,但计算的过程中有浮点的运算。如果在定点的DSP中,这段代码是⽆法运⾏的。
为了解决这个问题,我们可以这样处理:⾸先,把coefs1,coefs2等类似的浮点数据扩⼤⼀定的倍数(具体扩⼤多少倍,依据精度要求不同),我们暂且把⼩数点向右移动4位,也就是扩⼤的倍数为:*10000,在最终的输出的时候在缩⼩相同的倍数。修改后的代码⼤致如下:
复制代码 代码如下:
// coefs1 = 234; coefs2= 2131
int coefs1,coefs2;
int result;
…
result = 34* coefs1+72* coefs2;
result /= 10000;
…
当然,上⾯的例⼦为了⼤家好理解,写的可能不是太正确,不过基本的精髓应该是这些了。具体的处理过程,⼤家可以在⽹上搜索“第3章 DSP芯⽚的定点运算.doc”这篇⽂章,写的很具体,这⾥不再罗嗦了。
以上就是本⽂的全部内容,希望能给⼤家⼀个参考,也希望⼤家多多⽀持我们。
时间: 2016-06-15
5.举例及编程中的⼼得 5.1举例 "第3章 DSP芯⽚的定点运算.doc"这篇⽂章中给了⼀个很简单有能说明问题的例⼦,不想动⼤脑了,直接引⽤过来如下. 这是⼀个对语⾳信号(0.3kHz~3.4kHz)进⾏低通滤波的C语⾔程序,低通滤波的截⽌频率为800Hz,滤波器采⽤19点的有限冲击响应FIR滤波.语⾳信号的采样频率为8kHz,每个语⾳样值按16位整型数存放在insp.dat⽂件中. 例3.7 语⾳信号800Hz 19点FIR低通滤波C语⾔浮点程序 复制代码 代码如下: #inc
任何数据在内存中都是以⼆进制的形式存储的,例如⼀个short型数据1156,其⼆进制表⽰形式为00000100 10000100.则在Intel CPU架构的系统中,存放⽅式为 10000100(低地址单元) 00000100(⾼地址单元),因为Intel CPU的架构是⼩端模式.但是对于浮点数在内存是如何存储的?⽬前所有的C/C++编译器都是采⽤IEEE所制定的标准浮点格式,即⼆进制科学表⽰法.在⼆进制科学表⽰法中,S=M*2^N 主要由三部分构成:符号位+阶码(N)+尾数(M).对于flo
4.定点数模拟浮点数运算及常见的策略 相信⼤家到现在已经⼤致明⽩了浮点数转换成定点数运算的概貌.其实,原理讲起来很简单,真正应⽤到实际的项⽬中,可能会遇到各种各样的问题.具我的经验,常见的策略有如下⼏条: 1)除法转换为乘法或移位运算 我们知道,不管硬件平台如果变换,除法运算所需要的时钟周期都远远多于乘法运算和加减移位运算,尤其是在嵌⼊式应⽤中,"效率"显得尤为重要.以笔者的经验,其实,项⽬中的很⼤⼀部分除法运算是可以转换成乘法和移位运算,效率还是有很⼤提升空间的. 2)查表计算 有些
⼀:浮点与定点概述 1.1相关定义说明 定点数:通俗的说,⼩数点固定的数.以⼈民币为例,我们⽇常经常说到的如123.45¥,789.34¥等等,默认的情况下,⼩数点后⾯有两位⼩数,即⾓,分.如果⼩数点在最⾼有效位的前⾯,则这样的数称为纯⼩数的定点数,如0.12345,0.78934等.如果⼩数点在最低有效位的后⾯,则这样的数称为纯整数的定点数,如12345,78934等. 浮点数:⼀般说来,⼩数点不固定的数.⽐较容易的理解⽅式是,考虑以下我们⽇常见到的科学记数法,拿我们上⾯的数字举例,如123.
C语⾔和C#语⾔中,对于浮点类型的数据采⽤单精度类型(float)和双精度类型(double)来存储,float数据占⽤32bit,double数据占⽤64bit,我们在声明⼀个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储⽅式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,⽽double 遵从的是R64.53. ⽆论是单精度还是双精度在存储中都分为三个部分: 1.符号位(Sign
⼆:浮点数的存储格式 2.1 IEEE floating point standard 上⾯我们说了,浮点数的⼩数点是不固定的,如果每个⼈都按照⾃⼰的爱好存储在电脑⾥,那不就乱套了吗?那么怎么在计算机中存储这种类型的数字呢?象这类古⽼的问题前⼈早都为我们做好了相应的规范,⽆规矩不成⽅圆吗.我们平时所说的浮点数的存储规范,就是由IEEE指定的,具体的规范⽂件是:IEEE Standard 754 for Binary Floating-Point Arithmetic.⼤家可以很容易的从⽹络上下载
本⽂实例讲述了PHP中两个float(浮点数)⽐较⽅法.分享给⼤家供⼤家参考.具体如下: 最近在开发⼀个合同管理系统的时候,涉及到两个浮点数⽐较,算是把我郁闷惨了. 在N久以前,就不晓得从哪⾥听来的⼀个"不要⽤等号去⽐较浮点数"的"真理",⾃⼰平时也在⽤,好像没有出现啥问题,可这次问题总算是来了. <?php $sum = "12300.00"; $a = "10000.30"; $b = "2000.30&q
浮点型变量float本⽂实例讲述了PHP中round()函数对浮点数进⾏四舍五⼊的⽅法.分享给⼤家供⼤家参考.具体⽅法如
下: 语法:round(x,prec) 参数 描述 x 可选,规定要舍⼊的数字. prec 可选,规定⼩数点后的位数. 说明:返回将 x 根据指定精度 prec(⼗进制⼩数点后数字的数⽬)进⾏四舍五⼊的结果,prec 也可以是负数或零(默认值). 提⽰和注释 注释:php默认不能正确处理类似 "12,300.2" 的字符串. 注释:prec 参数是在 php 4 中被引⼊的,实例代码如下
为什么说浮点数缺乏精确性? 在开始本⽂之前,让我们先来谈谈浮点数为什么缺乏精确性的问题,其实这不是Python的问题,⽽是实数的⽆限精度跟计算机的有限内存之间的⽭盾. 举个例⼦,假如说我只能使⽤整数(即只精确到个位,计算机内的浮点数也只有有限精度,以C语⾔中的双精度浮点数double为例,精度为52个⼆进制位),要表⽰任意实数(⽆限精度)的时候我就只能通过舍⼊(rounding)来近似表⽰. ⽐如1.2我会表⽰成1,2.4表⽰成2,3.6表⽰成4. 所以呢? 在算1.2 - 1.2的时候,由于计
有时需要在JSON中使⽤浮点数,⽐如价格.坐标等信息.但python中的浮点数相当不准确, 例如下⾯的代码: 复制代码 代码如下:
#!/usr/bin/env python import json as json data = [ 0.333, 0.999, 0.1 ]print json.dumps(data) 输出结果如下: 复制代码 代码如下: $ python floatjson.py[0.33300000000000002, 0.999, 0.10000000000000001] 能
最近研究了⼀下Java的浮点数计算问题,从⽹上查询了相关的资料,汇总并经过了⼀些整理和调试,
最后完成此⽂,欢迎⼤家指出其中的错误和问题. 在Java中,float声明的变量是单精度浮点数,double声明的变量是双精度浮点数,顾名思义就是double型的实体占⽤内存空间是float的两倍.float是4个字节⽽double是8个字节.float和double类型的数据,⽆法精确表⽰计算结果,这是由于float和double是不精确的计算.⼤家可以通过下⾯代码可以看出来: 复制代码 代码如下: p
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论