打印

关于C28x Fixed Point DSP Library.pdf 中的Q31

[复制链接]
2686|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hong7817|  楼主 | 2012-12-7 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI数字信号处理库,出现了一个Q31的格式,按照IQ格式的理解就是小数点在第31位上,那具体是什么意思呢?

手册里说需要转换成Q31格式,搞得我一头雾水 .

例程里,有这么一句 xn=(long)(2147483648*(sin(Rad) + cos(Rad*2.3567))/2);          //Q31从long的角度来看,第一位始终是1,也就是始终是负值. 具体请看附件
Q31,应该是一个什么样的通用解释呢?
我现在程序里是这样处理的: 变量a<10000,
a / 10000.0 * 2147483648  //Q31

页面提取自-C28x_Fixed_Point_Library_v1_01.pdf (17.61 KB)


相关帖子

沙发
aresc| | 2012-12-8 16:52 | 只看该作者
Q31表示的数的有效范围是[-1.0, 1.0).最高位为1表示负数,最高位为0表示正数, 其中-1.0对应为0x80000000, 1.0为0x7FFFFFFF,实际上0x7FFFFFFF = 0.5^1+0.5^2+0.5^3+...+0.5^31 是无限接近+1.0,但实际比1.0小.

如果数X的范围是在[-1.0, 1.0)之间,则其Q31(X) = X*power(2,31).  小于-1.0的数在DSP里都被当成0x80000000, 大于等于1.0的数都被当成0x7FFFFFFF.

比如有一个IIR 二阶的滤波器系数是[b0,b1,b2,a1,a2] = [2.0, 1.0, 0.5, 0.5, 0.5], 那么其中的b0必须要先除2变成1.0才能用Q31格式表示, 这个除2要在程序里再补回来,一般DSP里都有带8个保护位的长累加器,可以支持一定程度的中间运算结果的数值溢出.

算式xn=(long)(2147483648*(sin(Rad) + cos(Rad*2.3567))/2):

sin(Rad)和cos(Rad*2.3567)都是[-1.0, 1.0],所以(sin(Rad) + cos(Rad*2.3567))/2 的取值范围是[-1.0,1.0];用那个算式计算是没有错的, 特别需要注意的是在(sin(Rad) + cos(Rad*2.3567))/2 = 1.0的时候,
xn = long(2147483648) 应该转换成0x7FFFFFFF,而不应该转成0x80000000,其中的常数2147483648应该是隐含无符号的整数.

使用特权

评论回复
评论
hong7817 2012-12-12 09:06 回复TA
谢谢 
板凳
hong7817|  楼主 | 2012-12-10 14:57 | 只看该作者
aresc 发表于 2012-12-8 16:52
Q31表示的数的有效范围是[-1.0, 1.0).最高位为1表示负数,最高位为0表示正数, 其中-1.0对应为0x80000000, 1. ...

我的 X  聚会范围为(-2000,2000),为了转换成Q31,我这样处理  X / 10000.0 * 2147483648; 应该正确的吧?

使用特权

评论回复
地板
hong7817|  楼主 | 2012-12-10 14:59 | 只看该作者
aresc 发表于 2012-12-8 16:52
Q31表示的数的有效范围是[-1.0, 1.0).最高位为1表示负数,最高位为0表示正数, 其中-1.0对应为0x80000000, 1. ...

忘了感谢你的热心解答!!

使用特权

评论回复
5
石摊摊| | 2013-12-6 22:18 | 只看该作者
hong7817 发表于 2012-12-10 14:57
我的 X  聚会范围为(-2000,2000),为了转换成Q31,我这样处理  X / 10000.0 * 2147483648; 应该正确的吧? ...

最伟大的四个数学牛人:阿基米德, 牛顿, 欧拉, 高斯谁更牛? 我首先排除牛顿. 第一他沾了姓牛的光; 第二他竟然试图证明上帝存在,牛人不会干的.
以上的问题是谁提出来的啊?
首先我来 分析一下吧
阿基米德是古希腊的数学家,年代比较久远,古希腊对数学做出了很多的贡献。但是当时的数学大部分都集中在平面几何的研究上面。主要就是一些几何图像的研究,可以说阿基米德是当时古希腊数学家的一个代表吧。
牛顿 : 牛顿在物理界影响很大,特别是牛顿三大定律,牛顿的大部分的研究工作都是在他20岁左右完成的,至于后来好像就只是求出了地球的引力常数,而且这个 常数是他在20岁左右的时候求过的,当初之所以没有求出来是因为计算的时候计算出了一点错。牛顿晚年确实是没有什么贡献,也确实是在研究神学,晚年的贡献主要在于光学上面。牛顿在数学上面的贡献最牛X的就是微积分了,但是同时研究微积分的还有莱布尼兹。而且现在我们用的微积分的很多符号都是莱布尼兹发明的。
欧拉 : 这位老兄主要是在数论方面取得了很大的发展。欧拉大定理与欧拉小定理都很牛X。大定理提出之后很多的数学家都想证明它。在求解的过程中推动了数论的发展。虽然现在没有完全解决大定理,但是却使得数论得到了很系统的发展。而且后来欧拉失明了。可怜的老兄啊。
高斯 : 高斯十几岁就用尺规做出了正十七边形,对于当时来说屌爆了。高斯对数学的发展很大,他在很多方面都取得了成就,现在我们经常听到的一些就是高斯定理高斯滤波等等。而且高斯晚年收了一个徒弟叫黎曼,这个人后来发明了黎曼几何,同样屌爆了。只是黎曼研究的东西都比较高深,所以很少有人知道他。另一个负面的事情就是高斯 成名之后不怎么看的起一些年轻的人才。这里有两个很惋惜人物。一个是阿贝尔,一个是伽罗瓦。阿贝尔曾经把自己的论文给高斯看,希望得到伟大数学家高斯的认可。但是高斯最后给出的理由是不知道把他的论文丢去哪儿了。伟大数学家阿贝尔的数学研究一直未能的到数学界的公认,在27岁的是偶郁郁而终的死去,而在他死后很多年他的数学成果才的到数学界的认可。我想高斯对此也应该负责。另外一个伽罗瓦同样屌爆了。近代数学的开启人啊。但是他20岁就死了。几乎和阿贝尔同样的遭遇,由于他的死,世界数学的发展推迟了几十年。有兴趣的可以查查这两个年轻初学家的简历。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

108

帖子

2

粉丝