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 提高精度的作用不大。
百度网盘
Q 格式使用总结的更多相关文章
- 基于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 ...
- 【wpf】Path画扇形以及Path的Data属性的理解
<Path x:Name="PathFillColor" Fill="{TemplateBinding Property=Button.Background}&qu ...
- FPGA中浮点运算实现方法——定标
有些FPGA中是不能直接对浮点数进行操作的,仅仅能採用定点数进行数值运算.对于FPGA而言,參与数学运算的书就是16位的整型数,但假设数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一 ...
- 四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法
四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法 原创文章,欢迎转载,转载请注明出处 最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用, ...
- Sliverlight之 矢量绘图
目标:在两天内完成一个环形图的绘制 准备:第5章 矢量绘图 1,形状绘图(见Project11) (1)线条用什么标签表示,它有哪几个重要属性 说明: Line标签 x1 y1表示起始点x,y坐标 x ...
- STM32F4使用FPU+DSP库进行FFT运算的测试过程一
测试环境:单片机:STM32F407ZGT6 IDE:Keil5.20.0.0 固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 第一部分:使用源码文件的方式,使 ...
- 【转载】FPGA算法设计随笔
FPGA设计算法依次需要完成MATLAB浮点仿真 MATLAB定点仿真 verilogHDL定点运算以及数据对比的流程.其中浮点到定点的转换尤为重要,需要在数据表示范围和精度之间做出权衡.另外掌握定点 ...
- webRTC中音频相关的netEQ(二):数据结构
上篇(webRTC中音频相关的netEQ(一):概述)是netEQ的概述,知道了它主要是用于解决网络延时抖动丢包等问题提高语音质量的,也知道了它有两大单元MCU和DSP组成.MCU 主要是把从网络收到 ...
- WPF画图の利用Path画扇形(仅图形)
一.画弧 Path继承自Sharp,以System.Windows.Shapes.Shape为基类,它是一个具有各种方法的控件. 我们先看一段xaml代码: <Path Stroke=" ...
随机推荐
- 原生JS 和 JQ 获取滚动条的高度,以及距离顶部的高度
JQ:相对比较简便 获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度 ...
- Systemverilog for design 笔记(三)
转载请标明出处 用户自定义和枚举数据类型 1. 用户自定义类型(typedef) 局部typedef定义:只用于设计的特定部分时,typedef的定义可在module或interface中 共享typ ...
- 解题报告:luogu P5543 [USACO19FEB]The Great Revegetation S
题目链接:P5543 [USACO19FEB]The Great Revegetation S 好坑啊,都身败名裂了. 思路一: 考虑染色法,跑一遍搜所就好了,不给代码了. 思路二: 考虑并查集,我想 ...
- 63 滑动窗口的最大值 &&front(),back()操作前一定要判断容器的尺寸不能为0
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6, ...
- Azure DNS-
先看什么是DNS,通常来讲,DNS是将域名解析成IP的服务,例如www.azure.cn对应的IP地址是139.217.8.104 使用域名访问有如下好处: 1. 好记,使用特定的字母组合,代替ip地 ...
- redis集群命令及常规操作
集群命令 [root@redis06 etc]# redis-cli --cluster help Cluster Manager Commands: create host1:port1 ... h ...
- YII insert multiple records into a table
$values = array(array(1,2),array(3,4),array(5,6),); $nbValues = count($values); $sql = 'INSERT INTO ...
- 设计模式课程 设计模式精讲 9-2 原型模式coding
1 课堂演练 1.1 super.toString 作用 1.2 为什么要使用克隆方法呢 2 代码解析 2.1 代码解析1(使用原型模式之前) 2.2 代码解析2(使用原型模式默认方式(浅克隆)) 2 ...
- JS中的原始类型和判断方法
ECMAScript 中定义了 7 种原始类型: Boolean String Number Null Undefined Symbol(新定义) BigInt(新定义) 注意: 原始类型不包含 Ob ...
- Django线上部署代码修改失效问题
记一次django项目的线上部署维护问题,django+nginx 关于nginx反向代理服务器的介绍这里有一篇博客介绍的比较好:nginx的相关介绍 以及当一次客户端请求发出后,uwsig以及uWS ...