硬汉嵌入式论坛

 找回密码
 立即注册
查看: 535|回复: 3
收起左侧

[DSP] 想问一下Q格式和浮点数是怎么互相转换的?

[复制链接]

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-3 11:35:09 | 显示全部楼层 |阅读模式

问了一下GPT,给的步骤是这样的:
在将Q格式的定点数转换为浮点数时,需要以下步骤:
  • 提取Q格式中整数部分和小数部分。
  • 计算定点数的值。
    • 将整数部分除以2^N,其中N是小数部分的位数。这将给出一个浮点数的整数部分。
    • 将小数部分除以2^N,并加到浮点数的整数部分上。

  • 在计算结果时,请确保考虑到符号位(如果有)。



要将浮点数转换为Q格式的定点数,可以按照以下步骤进行:
  • 确定所需的Q格式,包括整数部分和小数部分的位数。
  • 将浮点数乘以2^N,其中N是小数部分的位数。这将将浮点数转换为一个整数表示。
  • 对结果进行舍入操作,以保留Q格式中的小数部分位数。
  • 检查结果是否超出了Q格式的表示范围。如果超出范围,进行上溢或下溢处理。









比如这里有一个Q18.2,即整数位数为18,小数位数为2.
假设浮点数为3.14




则从浮点数到Q格式为 :
3.14* 2^2  = 12.56  , 四舍五入后为13,则 Q18.2格式下的值为13。

从Q格式转换到浮点数为:
整数部分是:  13/2^2 = 3.25 ,取整数为3,
小数部分是: (13&0x03) = 1, 1/2^2=0.25 ,
则最终转换的浮点数为 3+0.25 = 3.25。

请各位巨佬们看看,我这么理解对不对?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-8-3 12:42:04 | 显示全部楼层
Q18.2这种随意格式会影响你的理解。你应该用8bit,16bit或者32bit把数据范围先定了。

32bit Q18就是Q14.18
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-8-3 13:53:16 | 显示全部楼层
eric2013 发表于 2023-8-3 12:42
Q18.2这种随意格式会影响你的理解。你应该用8bit,16bit或者32bit把数据范围先定了。

32bit Q18就是Q14. ...

那比如Q14.18这种,

3.14 转换到Q14.18 就是3.14*2^18 = 3.14* 262144 = 823132.16 = 823132 .

823132转换到浮点数 就是 823132/2^18 = 3.1399 ,取整为3,小数部分是(823132&0x3ffff)/2^18 = 0.1399

3+0.1399 = 3.1399   
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-8-3 14:16:29 | 显示全部楼层
qq1646544 发表于 2023-8-3 13:53
那比如Q14.18这种,

3.14 转换到Q14.18 就是3.14*2^18 = 3.14* 262144 = 823132.16 = 823132 .

Q14.18的表达的范围是-8192 到 8191.9999x,3.14就在这个范围内。

浮点数转定点数是对的。
[C] 纯文本查看 复制代码
_IQ18(3.14)
#define _IQ18(A)                ((_iq18)((A) * ((_iq18)1 << 18)))

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 01:56 , Processed in 0.225570 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表