提取第一个8位定点数字

16个视图(30天)
你好,
我目前有困难与上述任务。基本上,这就是我想做的事:
真的,11日,x = fi(1300 0)(9位带符号整数)
x。本= 10100010100
c = fi(0,真正8 0)
c = x.bin (1:8)
c。本= 10100010
c = 162
换句话说:我想提取第一个8 x到另一个变量,它比显示的值。定点工具箱的任何函数,使之成为可能。我试过到目前为止的一切最终requantization的价值,我不想要。
感谢任何帮助!
非常感谢!
问候,
Lennart
1评论
Lennart
Lennart 2015年6月29日
给这个向上推。真的没有功能,能做到吗?

登录置评。

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2015年6月29日
1评论
Lennart
Lennart 2015年6月29日
一个问题我有剩下的函数。结果是一个无符号变量:我不能改变它签署变量没有matlab重铸的变量和做疯狂的事情……
任何建议将高度赞赏!
问候,
Lennart

登录置评。

更多的答案(2)

Lennart
Lennart 2015年6月29日
好了。非常感谢你。作品完美!

安迪·巴特利特
安迪·巴特利特 2021年4月5日
两个关键方面
有两个关键的方法来提取定点的比特数。
一种方法是使用bitsliceget沃尔特指出。
另一种方法是做一个操作配置为溢出来包装和舍入到地板上。
考虑下面的输入值。
= fi (-5.0625、1、8、4)
是下面的部分。
“10101111”
假设我们的目标是提取6最重要的比特从。这可以用bitsliceget如下。
3 b = bitsliceget (8)
做一个演员或使用。
fmWrapFloor = fimath (“RoundingMethod”,“地板”,“OverflowAction”,“包装”);
c = fi(2, 1, 6日,fmWrapFloor)
这两种方法产生相同的输出部分。
“101011”
但输出真实世界有不同的数据类型和不同的价值观。
术语bin_SI类型RealWorldValue
一个10101111numerictype (1、8、4)-5.0625
bitsliceget(101011 3), 8日numerictype 43 (0 6 0)
fi (1 6 2 fmWrapFloor) 101011年numerictype (1 6 2) -5.25
使用bitsliceget返回整数位存储在一个无符号类型没有扩展。
铸造用fi将保留比例适当的碎片。Signedness可以保存或discared。铸造通过fi现实世界还将试图保持输出值接近真实世界的输入值在某种程度上允许舍入和溢出。注意,在上面的例子中,输入实际值是-5.0625,下降后最重要的两位输出是圆形的现实世界中值-5.25。
随机生成的例子
随机附带的脚本创建一些例子显示差异。例子,一个运行这个随机产生输出的例子。
> > example_bitslice
术语bin_SI类型RealWorldValue
一个00001110numerictype (1、8、4)0.875
bitsliceget (8 2) 0000111 numerictype (0 7 0) 7
bitsliceget(000011 3), 8日numerictype (0 6 0) 3
bitsliceget(4), 8日00001 numerictype (0 5 0) 1
bitsliceget(6,1) 001110年numerictype (0 6 0) 14
bitsliceget (6 3) 0011 numerictype (0 4 0) 3
bitsliceget(3,1) 110年numerictype (0 3 0) 6
术语bin_SI类型RealWorldValue
一个00001110numerictype (1、8、4)0.875
fi (1 7 3 fmWrapFloor) 0000111 numerictype (1、7、3) 0.875
fi (1 6 2 fmWrapFloor) 000011年numerictype (1 6 2) 0.75
fi (1 5 1 fmWrapFloor) 00001年numerictype (1、5、1) 0.5
fi (1 6 4 fmWrapFloor) 001110年numerictype (1、6、4) 0.875
fi (1 4 2 fmWrapFloor) 0011年numerictype (1, 4, 2) 0.75
fi (1, 3, 4, fmWrapFloor) 110年numerictype -0.125 (1、3、4)
术语bin_SI类型RealWorldValue
一个10101111numerictype (1、8、4)-5.0625
bitsliceget (8 2) 1010111 numerictype (0 7 0) 87
bitsliceget(101011 3), 8日numerictype 43 (0 6 0)
bitsliceget(4), 8日10101 numerictype (0 5 0) 21
bitsliceget(6,1) 101111年numerictype(0 6 0) 47岁
bitsliceget (6 3) 1011 numerictype (0 4 0) 11
bitsliceget(3,1) 111年numerictype (0 3 0) 7
术语bin_SI类型RealWorldValue
一个10101111numerictype (1、8、4)-5.0625
fi (1 7 3 fmWrapFloor) 1010111 numerictype (1、7、3) -5.125
fi (1 6 2 fmWrapFloor) 101011年numerictype (1 6 2) -5.25
fi (1 5 1 fmWrapFloor) 10101年numerictype (1、5、1) -5.5
fi (1 6 4 fmWrapFloor) 101111年numerictype (1、6、4) -1.0625
fi (1 4 2 fmWrapFloor) 1011年numerictype (1, 4, 2) -1.25
fi (1, 3, 4, fmWrapFloor) 111年numerictype -0.0625 (1、3、4)
要使用哪种方法呢?
有时一个设计部分的目的是面向。例如,一组位可能代表几个独立的布尔标志。设计意图可能包这些位在一个更大的变量。在这种情况下,bitsliceget是一种更自然的符合设计意图。
其他时候,目的是面向数学操作。作为一个例子,假设一个变量代表一个角度传感器的输出单位是革命。有效地计算三角操作,像cos,这个变量,它是有用的执行模操作,这样的角是封闭的开区间[0,1)。使用革命一个很大的优势,而不是度或弧度,是这个模可以通过简单地删除所有的执行位二进制小数点左边的变量。提取二进制右边的点可以用bitsliceget但比例将丢失和现实世界的价值输出将不再是革命。相比之下,铸造通过fi保护革命的现实世界包装价值。面向数学的目的,提取一些使用包装楼fi演员通常是一个更自然健康。
uAngleRevolutions = fi(10) 3.2470703125, 0, 16日
fmWrapFloor = fimath (“RoundingMethod”,“地板”,“OverflowAction”,“包装”);
modOne_of_uAngleRevolutions = fi (uAngleRevolutions 0 10 10 fmWrapFloor);
modOne_of_uAngleRevolutions = removefimath (modOne_of_uAngleRevolutions)
这个输出
uAngleRevolutions =
3.2470703125
numerictype(0, 16日,10)
modOne_of_uAngleRevolutions =
0.2470703125
numerictype (0、10、10)
原角是圆三个完整的革命加约另一个季度的革命。模之一这个角是圆周围的约四分之一革命。使用包装fi,模块执行一个操作,保存良好的现实意义。

标签

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!