Q 格式使用总结

注意 16位有符号数 表示的范围是 -32768~32767

假如 整形数在内存中以源码的形式存放, 则0000 0000 0000 0000 表示正整数0

则 1000 0000 0000 0000 表示负整数0 ,显然重复了。

?

另外采用补码 可以将减法运算变为加法:

?

例如: -1-2=-3 可以变为 -1的补码加上-2的补码

对于整数: [A-B]补=[A]补+[-B]补

-1的补码为


1


1


1


1


1


1


1


1


1


1


1


1


1


1


1


1

-2的补码为


1


1


1


1


1


1


1


1


1


1


1


1


1


1


1


0

相加 变为


1


1


1


1


1


1


1


1


1


1


1


1


1


1


1


0


1

上边的红色1 为进位 去掉


1


1


1


1


1


1


1


1


1


1


1


1


1


1


0


1

减1 以后, 求反 可知道为-3

?

结论:故数据在内存中以补码的形式存放。

?

数据在内存中以补码的形式存放,

对于正整数 源码=反码=补码

对于负数 例如-10

源码为 1000 0000 0000 1010 1为符号位

反码为 1111 1111 1111 0101

补码为 1111 1111 1111 0110

?

假设对于有符号数A 在内存中的存放形式

补码为以下:


1


0


0


0


0


0


0


0


0


0


0


0


0


0


0


0

则它表示的数为:

符号位不变,先减1 然后在求反, 可知 这个数不存在

于是 人为 规定 1000 0000 0000 0000 表示为-32768

?

?

?

?

?

?

?

?

?

?

对于IQ格式 数据的理解:

IQ30 表示的数据范围:


31


30


Point


29


28


27


26


25


24


23


22


21


20


19


18


17


16


15


14


13


12


11


10


9


8


7


6


5


4


3


2


1


0

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

对IQ30小数点在30位和29位之间, 所以它表示的数值范围是

-2-----1.999 999 999

?

同理对于 IQ16


31


30


29


28


27


26


25


24


23


22


21


20


19


18


17


16


POINT


15


14


13


12


11


10


9


8


7


6


5


4


3


2


1


0

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

即 -32768------32767.999984741

?

?

使用方法:

IQN实际没你想的复杂,你就简单的认为是把小数的乘法,变为整数的乘法而已。

只要计算的结果 不超过你规定的IQN的范围就行。

只是这样做 CPU的在处理浮点数时,更得心应手

例如 :

?

对与60kW永磁场同步电机的 直流母线电压采样环节

?

图1

在EEPROM 参数设定的上位机 软件中 Systemp->UDC_LEM_RATIO 的值为200

BASE_VOLTAGE的值为1000

已知IQ20的表示范围为 -2048----2047.999 999 046

所以IQ20(200) 与IQ20(1000) 是合理的。 如果是IQ(3000)就不对了。

?

上图1 的第一行temp 我在ADDWATCHWINDOW以后,用Q24 的格式去观看,就是0.6

上图1中的第二行的temp 我在watchwindow 里观测, 其值为 0.0001465082169

如下图所示

?

如用_iq格式观看,其值为 2458 (这里iq 为全局IQ24 是整形数)

?

????tmp=_IQdiv(tmp,_IQ15toIQ(Systemp->UDC_LEM_FACTOR));

Systemp->UDC_LEM_FACTOR的值为19661

19661 如果是IQ15格式 对应的数为

经过了IQ15toIQ以后, 我如果用IQ24查看,其值还是 0.6

?

?

关于对母线电压采样的说明:

直流母线采样,1000V对应调理输出为5V 然后经过电路板上分压电阻3/5转换为3V,(因为DSP要求的电压是3V), 即ADC采样得到的4095 对应的是1000V 那么假设ADC采样得到的值是y

第一极的比例

第二极的比例

第三极的比例

那么 实际的电压值应为

那么之流母线的标幺值为

在DSP程序中 通过上面的图指导UDC_PU_GAIN 的值就是

?

所以上面的红线高亮的udc是标幺值,上传给上位机就需要转换为真实值

?

?

当DSP把这个数据传递给上位机,在邮箱11中

?

用VB编写的上位机的接收的是整数, 于是在VB中定义了一个浮点数,

然后将DSP传递上来的整数除以32768 在乘以1000 即可 。

下图是VB上位机的处理

?

?

?

(2) IQ的乘法

描述:C编译器将两个不同的IQ格式的IQ数进行相乘。

关于对_IQNmpyIQX(_iqN1 A ,int N1 _iqN2 B ,int N2)

下面的程序 定义 temp135 为 IQ4 temp678 为IQ22 temp246为IQ16

实际计算的值

而我用IQ乘法计算得到的值为1166.952225

误差为 0.154759

如下图所示:

?

?

如果采用了 IQ4(450.256) 未超出IQ4的表示的数的数值范围

IQ22(200.789) 未超出IQ22表示的范围

这个90406.451984 超出了_iq16 表示的数值范围,所以计算结果不对,如下图所示。

?

若把temp246 改正为 _IQ10 那么计算结果会好吗?

IQ10的数值范围 -2097152------2097151.999023

计算结果为90405.24707

计算误差为

精度基本上到万分之一

?

精度已经很高了,能不能再高一些,

我的想法是:用IQ14代替IQ10 因为IQ14 的分辨率高于IQ10 提高精度的作用不大。

?

?

?

?

百度网盘

?

?

原文地址:https://www.cnblogs.com/bailongwei654321/p/12228440.html

时间: 2024-11-01 15:36:26

Q 格式使用总结的相关文章

WPF画图の利用Path画扇形(仅图形)

一.画弧 Path继承自Sharp,以System.Windows.Shapes.Shape为基类,它是一个具有各种方法的控件. 我们先看一段xaml代码: <Path Stroke="Red"> <Path.Data> <PathGeometry> <PathFigure StartPoint="100,0"> <ArcSegment Point="200,100" Size="1

四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法

 原创文章,欢迎转载,转载请注明出处      最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用,因为之前用过模拟的I2C,也写过AVR的I2C也就是TWI的硬件驱动,所以想试试写STM32的硬件I2C...为了避免库带来的麻烦,之前和特意将STM32F4的标准库升级到了1.3.0,但是貌似问题依旧.于是在网上找到了ST转为I2C写的CPAL的库,拿着它的英文手册和例子看了下,觉得很不错,功能相当的齐全,按照手册配置用起来应该不错,于是开始加载到自己的项目中

自己编写的sublime text 3 插件

下载链接 import sublime, sublime_plugin, datetime import webbrowser import re import urllib.request,os import threading import json import sublime_api import sys # D:\Program Files\Sublime Text 3\Data\Packages\User\testone_config.sublime-settings # my_pa

FPGA中浮点运算实现方法——定标

有些FPGA中是不能直接对浮点数进行操作的,仅仅能採用定点数进行数值运算.对于FPGA而言,參与数学运算的书就是16位的整型数,但假设数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一种解决的方法就是採用定标.数的定标就是将要运算的浮点数扩大非常多倍,然后取整,再用这个数进行运算,运算得到的结果再缩小对应的倍数就能够了.在设计中,一定不要忘记小数点.在FPGA 中是体现不出来小数点的,小数点的位置仅仅有程序猿知道.Q表示小数点的位置,Q15就表示小数点在第15位. 浮点数(x)转

Sliverlight之2 适量绘图

目标:在两天内完成一个环形图的绘制 准备:第5章 矢量绘图 1,形状绘图(见Project11) (1)线条用什么标签表示,它有哪几个重要属性 说明: Line标签 x1 y1表示起始点x,y坐标 x2 y2表示结束点x,y坐标 (2)画一条线(x1=100,y1=100 x2=200,y2=200) 说明: <Line Stroke="Green" StrokeThickness="3" X1="100" Y1="100&quo

TMS320F28035学习记录五

IQMath lib的使用 参考手册<IQmath_Quickstart.pdf> 版本V1.6.0 存放路径:C:\ti\controlSUITE\libs\math\IQmath\v160\doc 1.TMS320F28035是TI公司推出的32位定点DSP芯片,其硬件本身不支持浮点数运算,在用C语言编程时用到的浮点运算是在软件层面上完成的,并非TMS320F28035具备浮点运算能力.用C语言编程在软件上实现浮点数运算将增加代码量和程序运行时间.IQmath是一种采用定点运算,但具有浮点

笔记3 网络编程 egon

socket编程 什么是socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议. 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的. 基于文件类型的套接字家族 套接字家族的名

STM32F4使用FPU+DSP库进行FFT运算的测试过程

测试环境:单片机:STM32F407ZGT6   IDE:Keil5.20.0.0  固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 第一部分:使用源码文件的方式,使用void arm_cfft_radix4_f32(const arm_cfft_radix4_instance_f32 * S,float32_t * pSrc)函数进行FFT运算. 准备空工程,配置Keil环境.使能STM32F4的FPU单元. 开启硬件浮点运算,等效于在C/C++->defin

按键精灵认证错题

1GetLastKey命令在获取一次ANSI字符代码后继续循环执行返回值是? A:0 2哪一种脚本语言可以在不修改的情况下直接粘贴到按键精灵中运行? 3下列哪种方式不能将下载到的 .q 格式脚本文件正确导入到按键精灵2014中? 4调试时遇到无法跟踪的奇怪语法错误,可以通过以下哪种方案快速确定出错行? 为保证脚本的正确运行,找图和模糊找色的精确度不可低于? 执行语句 For i = 1 to 5 : Next 后,变量i的指值为? A:6 FindPic 命令查找 100x100 大小的图片,精