DSP中定点与浮点运算

news2024/11/20 15:30:22

一、定点数及其定标
在定点DSP芯片中,采用的是定点数据数值运算,其操作数一般采用整形数来表示。一个整形数的最大表示范围由DSP芯片给定字长决定。字长越长,表示的范围越大,精度越高。
举例16位字长
每个16数位用1个符号位表示正负,0表示正,1表示负,其余15位表示数值大小。因此
二进制数 0010000000000011b 即十进制数8195
二进制数1111111111111100b 即十进制数-4
对于DSP而言,参与数值运算的数是16位整形数,而许多情况下,数学运算过程中的数不一定都是整数,那么,DSP芯片是如何处理小数的呢?是这样的,DSP芯片本身不可以,是不是芯片不能处理各种小数呢?当然不是,这关键就是由程序员来确定一个数的小数点处于16位中哪一位,给这个数定标。
二进制转换为十进制的计算方法如下:1个具有n+1位整数m位小数的二进制数表示为:
在这里插入图片描述比如
在这里插入图片描述在这里插入图片描述以上数据的下标2、10分别表示2进制、10进制。
通过设定小数点在16位数不同位置,而表示不同大小和不同精度的小数,数的定标有Q表示法和S表示法2种。
在这里插入图片描述若小数点设定的位置不同,它所表示的数也就不同。例如:
16 进制数 2000H=8192,用 Q0 表示
16 进制数 2000H=0.25,用 Q15 表示
其中 Q0 表示小数的位数为 0,整数 15 位,符号 1 位;Q15 表示小数的位数是 15,整数 0 位,符号 1 位。
但对于DSP而言,不管小数设置在什么位置,处理方法完全相同,都看成16位整数,真正的数据是什么由程序员设定的Q来计算。因此,对定点数而言,数值范围与精度是反比关系,一个变量想要表示大的数值范围,必须牺牲精度为代价。
例如,Q0 的数值范围是-32768 到+32767,其精度为 1,而 Q15 的数值范围为-1 到 0.9999695,精度为 1/32768 = 0.00003051。

二、浮点数(x)与定点数(xq)的转换关系
浮点数(x)转换为定点数(xq):xq=(int)x* 2Q
定点数(xq)转换为浮点数(x):x=(float)xq2-Q
例如,浮点数x=0.5,定标Q=15,则定点数xq=L0.5
32768J=16384,式中LJ表示下取整。反之,一个用Q=15表示的定点数16384,其浮点数为163幼*2-15=16384/32768=0.5。浮点数转换为定点数时,为了降低截尾误差,在取整前可以先加上0.5。

三、浮点数
是属于有理数中某特定子集的数的数字表示法。定点数由于要对数定标,编程时难度较大,数据的精度也会受到一定的影响。若用浮点数,则简单方便很多。
浮点数分为两种表示形式:一种是一般格式(也是百度常见的) 另一种是IEEE754标准格式。
1、一般表示格式:阶码就是指数;阶符就是指数的符号;数符是指尾数的符号,它们各占多少位取决于表示范围,表示精度等方面的权衡。比如32位长的浮点数,阶符和阶符各用1位,阶码可以用7位,尾数23位;阶符和阶码也可以结合起来,用一个8位来表达,一般格式中将数符放在中间部分,这与定点表示格式不一致,而且在计算机处理时也不够方便,因此实际中一般采用IEEE754来表示格式
2、IEEE754标准格式
N=M×R^E
在这里插入图片描述比如:12.345=1.2345×10^1
其中,M(Mantissa)被称为浮点数的 尾数 ,R(Radix)被称为阶码的 基数 ,E(Exponent)被称为阶的 阶码 。计算机中一般规定R为2、8或16,是一个确定的常数,不需要在浮点数中明确表示出来。以上为字长32位。

2.1、尾数M的值,通常由小数形式表示,决定浮点数的精度,23位,但实际是24位,有一个位是“不可见”的,其值固定为1,这也就是说IEEE 754 标准所定义的浮点数,其有效数字是介于 1 与 2 之间的小数,因此尾数 m=1.f。
2.2、阶码E通常用定点整数表示,决定浮点数的表示范围,8位。
2.3、符号位:1位,0表示正数,1表示负数。

3、浮点数据转换16进制数据的原理
以32位字长即4个字节的数据位准:4*8=32位31位为符号,30~23的八个字节为阶码,尾数部分则是剩余的小数部分(由后23位决定)
3.1将数据(10进制,浮点型)转换成2进制;
3.2小数点向左移动n位,指导最后1个为1停止,得到左移的位数,计算阶码,127+(左移位数);
3.3尾数(22~0位置总计23个bit位)为小数部分的二进制编码,剩余未填满的位数用0补齐;
3.4再将所有得到的2进制编码,转换成16进制的数据。
4、举例:将10进制4.25表示成机器内4个字节的2进制形式
4.1第1步:将4.25表示成2进制数:(4.25)(十进制)=(100.01)(二进制)
4.2第2步小数点向左移2位,变成1.0001x2^2,阶码E(Exponent)=2+127=129;
4.3第3步Mantissa=1.0001-1.0=0001(规格化后,小数点前总是整数1,所有人都知道前面是1不是0,所以省略不写了,即尾数部分不包括整数部分;
4.4转换成16进制数81010000
举例在这里插入图片描述4.5、以小数点为界,拆分;
4.6、整数部分转换:整数转二进制我想大家应该都熟悉,使用:除2取余法 即可。而这里的0.875整数部分为0,无需操作;
4.7、小数部分转换:小数部分的转换不同于整数部分,采用的是 “乘2取整法”。
如下图所示:
在这里插入图片描述合并结果:整数部分 + 小数部分,最终得到二进制结果为0.111。
所以该结果按照尾数 + 阶码的计算机计数方式,可以表示为:
在这里插入图片描述阶码(E):若以float为例,应为127 + (-1) = 126,因此,二进制表示为:01111110
尾数部分(M):若以float为例,应为23位,因此尾部补齐后为11000000000000000000000
因此,最终的结果为(以32位精度float表示):00111111011000000000000000000000
举例sigmaStudio中float转int
在这里插入图片描述

5、浮点类型转换十六进制代码实现方法
5.1、用地址用指针
void flout2int(float src, int *dst)
{
*dst = ((int)(&src));
}
5.2、用memcpy
#include “stdio.h”
#include “string.h”
void flout2int(float src, int *dst)
{
memcpy(&dst,&src,sizeof(float));
}

参考来源:
https://blog.csdn.net/qq_36915078/article/details/106019023
https://blog.csdn.net/qq_43537721/article/details/107757766
https://blog.csdn.net/qq_36915078/article/details/106019023
https://blog.csdn.net/ADI_OP/article/details/129021375?spm=1001.2014.3001.5502

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九龙证券|这一刻,资本市场进入全新时代!

2023年4月10日,第一批10家主板注册制企业上市鸣锣敲钟,奏响了触及本钱商场灵魂深处革新的序曲。 动能切换中的我国对于高效资源配置的渴望,与革新进行时的本钱商场对于全面注册制的探究,一起凝集成一股连绵有力之暖流,…

学习安全攻防技能30讲-开篇|别说你没有被安全困扰过

文章目录学习安全攻防技能30讲-开篇|别说你没有被安全困扰过研读开篇安全重要吗?安全难学吗?学习安全攻防技能30讲-开篇|别说你没有被安全困扰过 研读开篇 文中说到一个竞赛叫CTF,这个之前从来没有听过的,作为开发人员涨知识了。…

Java封装

Java封装\huge{Java封装}Java封装 JavaJavaJava的三大特征之一。 作用 告知如何设计对象的属性和方法,将对象完全独立起来。 ❗❗封装原则 对象代表什么,就要封装对应的数据,并且提供对应数据的行为。(尤其是后半句非常重要&a…

012:Mapbox GL显示弹窗Popup

第012个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中显示弹窗。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共70行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhuan…

PHP医院安全(不良)事件管理系统源码,十多种不良事件类型,上百种报告内容数据表

医院不良事件上报系统源码,PHP医院安全(不良)事件管理系统源码 技术架构:前后端分离,仓储模式, 开发语言:PHP 开发工具:vscode 前端框架:vue2element 后端框架&…

2023年mathorcupB题城市轨道交通列车时刻表思路分析

B 题 城市轨道交通列车时刻表优化问题 列车时刻表优化问题是轨道交通领域行车组织方式的经典问题之一。 列车时刻表规定了列车在每个车站的到达和出发(或通过)时刻,其在实 际运用过程中,通常用列车运行图来表示。图 1 为某一运行图的示例,图…

文件操作【上篇】

文章目录🗃️1.为什么使用文件🗃️2.什么是文件📁2.1.程序文件📁2.2.数据文件📁2.3.文件名🗃️3.文件的打开和关闭📁3.1.文件指针📁3.2.文件的打开和关闭🗃️4.文件的顺序…

I-型糖尿病患者的福音,皮下燃料电池将多余的血糖转化为电能产生胰岛素

I-型糖尿病患者体内不产生胰岛素,患者必须从外部获得激素来调节血糖水平。当前,患者主要通过将胰岛素泵直接连接到身体以获得胰岛素。这些胰岛素泵以及其他医疗器械(如起搏器)需要可靠的能源供应,主要通过一次性或可充…

#mvn 打包ik分词器报错#

场景:在window上安装ik分词器,需要先mvn打包,结果报错 原因:由于jdk版本的问题导致 解决过程 1:打包流程 git clone https://github.com/medcl/elasticsearch-analysis-ik #git clone https://gitcode.net/mirrors/me…

线性分类算法:逻辑回归和Softmax回归

目录(一 )逻辑回归1.1 逻辑回归概述:1.2 逻辑回归的作用与Sigmoid 函数:1.2.1 Sigmoid 函数作用1.3 指数族分布1.4 逻辑回归的损失函数1.5逻辑回归如何求解得到最优解模型方法1.6 逻辑回归鸢尾花分类1.7 逻辑回归做多分类&#xf…

拉取gradle项目报错Could not find method compile() for arguments

拉取gradle项目, 依赖拉不下来, 报错如下: Could not find method compile() for arguments XXXXXX on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. 找了很多篇文章都没有解决,后来在stack overflow上面找到了答案: Note t…

Linux中快速搭建RabbitMQ

目录一、简介1、关于RabbitMQ2、RabbitMQ主要端口介绍二、RabbitMQ安装1、安装依赖项socat2、下载Erlang和RabbitMQ(1) Erlang和RabbitMQ版本关系要求(2) 下载操作系统支持的Erlang和RabbitMQ版本(3) 安装Erlang和RabbitMQ三、启动和关闭1、启动服务2、查看状态3、停止服务4、设…

核心业务3:借款人借款申请

核心业务3:借款人借款申请 1.借款人借款申请业务流程图 2.借款项数据库绑定 ---------------------借款申请流程---------------------- 3.借款申请流程 4.前端代码逻辑 5.后端代码逻辑 ---------------------借款申请流程---------------------- 核心业务3&…

用SSH登陆Centos系统时,命令行最前面显示“的提示符[root@www myapp]”是什么意思?

用SSH登陆Centos系统时,命令行最前面显示“的提示符[rootwww myapp]”是什么意思? 在SSH登录到CentOS系统时,提示符 [rootwww myapp] 中的 www 表示当前登录的主机名(hostname),也就是指当前运行的CentOS系…

基于html+css的盒子展示2

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

蓝桥杯web备赛——Node.js

node.js之前只能说是略有了解,这次好好了解一下吧! 东西还是比较多的。 目前来看就了解比赛会用到的http模块就可以了,其他的暂且不做了解 const http require("http");//1.引入http模块const app http.createServer();//2.创建…

【网络安全】--xss漏洞

xss漏洞xss漏洞介绍危害防御方法xss测试语句xss攻击语句1. 反射性xss2.存储型xss3.DOM型xssxss漏洞介绍 定义:XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS&#xff0c…

线段树笔记草稿

一个左节点u << 1和右节点u << 1 | 1 的证明 区间修改部分 1.批量等值修改 前提条件 是要区间修改&#xff0c;区间查询&#xff0c;且修改操作修改的值是相同的 情景 一般是要对一个数组执行k次操作&#xff0c;每次改变其中一个区间内所有元素的值&#x…

B02-国际化语言配置

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;Silence Lamb &#x1f4d6; 本章内容&#xff1a;【国际化语言配置】 Silence-Vitev 1.0.0 基于VITE前端快速开发框架 一、创建工具类 &#x1f356;常用工具类&#xff1a;src\utils\modules\common.js /*** Descriptio…

JavaScript(WebAPI)+具体案例

专栏简介: 前端从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1. WebAPI 背景知识 1.1 什么是 WebAPI 1.2 DOM 基…