注意 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 提高精度的作用不大。

 

 

 

 

百度网盘

 

 

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

  1. 基于C语言的Q格式使用详解

    用过DSP的应该都知道Q格式吧: 目录 1 前言 2 Q数据的表示 2.1 范围和精度 2.2 推导 3 Q数据的运算 3.1 0x7FFF 3.2 0x8000 3.3 加法 3.4 减法 3.5 ...

  2. 【wpf】Path画扇形以及Path的Data属性的理解

    <Path x:Name="PathFillColor" Fill="{TemplateBinding Property=Button.Background}&qu ...

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

    有些FPGA中是不能直接对浮点数进行操作的,仅仅能採用定点数进行数值运算.对于FPGA而言,參与数学运算的书就是16位的整型数,但假设数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一 ...

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

    四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法  原创文章,欢迎转载,转载请注明出处      最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用, ...

  5. Sliverlight之 矢量绘图

    目标:在两天内完成一个环形图的绘制 准备:第5章 矢量绘图 1,形状绘图(见Project11) (1)线条用什么标签表示,它有哪几个重要属性 说明: Line标签 x1 y1表示起始点x,y坐标 x ...

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

    测试环境:单片机:STM32F407ZGT6   IDE:Keil5.20.0.0  固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 第一部分:使用源码文件的方式,使 ...

  7. 【转载】FPGA算法设计随笔

    FPGA设计算法依次需要完成MATLAB浮点仿真 MATLAB定点仿真 verilogHDL定点运算以及数据对比的流程.其中浮点到定点的转换尤为重要,需要在数据表示范围和精度之间做出权衡.另外掌握定点 ...

  8. webRTC中音频相关的netEQ(二):数据结构

    上篇(webRTC中音频相关的netEQ(一):概述)是netEQ的概述,知道了它主要是用于解决网络延时抖动丢包等问题提高语音质量的,也知道了它有两大单元MCU和DSP组成.MCU 主要是把从网络收到 ...

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

    一.画弧 Path继承自Sharp,以System.Windows.Shapes.Shape为基类,它是一个具有各种方法的控件. 我们先看一段xaml代码: <Path Stroke=" ...

随机推荐

  1. ORACLE varchar2类型的字段更改为clob

    将varchar2类型字段改成clob类型    --增加临时新字段 alter table base_temp add temp clob; --将需要改成大字段的项内容copy到大字段中updat ...

  2. 一键设置Fluent环境变量小程序

    使用视频教程优酷播放地址: https://v.youku.com/v_show/id_XNDU2MTkwNDg5Mg==.html?spm=a2hzp.8244740.0.0 一键设置环境变量小软件 ...

  3. Python内置模块-logging

    一.初识logging模块 import logging logging.debug("debug message") #级别最低,只有在诊断问题时才有兴趣的详细信息. loggi ...

  4. Eclipse传递main函数参数

    在项目上右击 Run As->Run Configurations...->Arguments->在Program arguments:的文本框中输入你要传入的参数,若有几个参数则在 ...

  5. 1-Docker学习笔记

    docker还是比较容易的,比较蛋疼的就是镜像网络问题,不过也可以配置了镜像加速器(比如阿里云).这里重点记录一下初学docker时遇到的知识点. docker环境变量 docker对环境变量的定义和 ...

  6. mybatis注解中写SQL语句

    参考: https://blog.csdn.net/gebitan505/article/details/54929287/https://blog.csdn.net/KingBoyWorld/art ...

  7. Android问题:ScrollView默认位置不是最顶部最全解决方案

    描述: Scrollview里面嵌套了一个listview ,这是开发中最寻常的一种布局,遇到的问题是:在这个Scrollview页面默认的起始位置不是最顶部,而是listview的底部. 原因: 在 ...

  8. 《算法技术手册》George T. Heineman(作者)epub+mobi+azw3

    内容简介 开发健壮的软件需要高效的算法,然后程序员们往往直至问题发生之时,才会去求助于算法.<算法技术手册>讲解了许多现有的算法,可用于解决各种问题.通过阅读它,可以使您学会如何选择和实现 ...

  9. Day9 - F - Monkey and Banana HDU - 1069

    一组研究人员正在设计一项实验,以测试猴子的智商.他们将挂香蕉在建筑物的屋顶,同时,提供一些砖块给这些猴子.如果猴子足够聪明,它应当能够通过合理的放置一些砖块建立一个塔,并爬上去吃他们最喜欢的香蕉.   ...

  10. 腾讯云直播生成推流链接node.js版

    /** * 获取推流地址 * 如果不传key和过期时间,将返回不含防盗链的url * @param domain 您用来推流的域名 * streamName 您用来区别不同推流地址的唯一流名称 * k ...