Matlab Fixed Point - Suggesting Fraction length larger than Word Length?
조회 수: 18 (최근 30일)
이전 댓글 표시
I am confused by how matlab is suggesting a Fixed point number of sfix32_En44. This means it has a word length of 32bits but a fraction length of 44. With standard Binary Point this is impossible. The fraction length is always less than the word length.
Is matlab trying to tell me my word size is not big enough?
댓글 수: 2
Walter Roberson
2011년 10월 14일
It is a _suggestion_ so you could override it (and take the precision hits involved). But yeah, I think my interpretation would be the same as yours, that it thinks you need a wider word.
I'm going by principles and documentation here, not experience.
채택된 답변
Rick Rosson
2011년 10월 14일
The fraction length does not have to be shorter than the word length if you allow for (implicit) leading zeros. So if it is suggesting a 32 bit word length with 44 bits fraction length, then that implies that with one bit for the sign, all 31 of the remaining bits are fraction; and in addition, there must be 13 leading zeros to the right of the binary point prior to the 31 significant binary digits.
So the word consists of 1 sign bit followed by the 31 significant binary digits, and 13 implicit leading zeros (or ones if the sign bit is negative) between the binary point and the first significant binary digit.
HTH.
Rick
댓글 수: 1
Walter Roberson
2011년 10월 14일
Rick, this is a point I cannot seem to find hinted at in the documentation. There appears to be no reference page for fixdt(), just the user guide. I cannot seem to find anything in the user guide that hints that the binary point might be to the "left" of the word completely.
I can see how the usage you have given would have some good uses, but one has to read the documentation fairly perversely to see that it doesn't actually forbid this situation.
As an analogy, this would be like noticing that an obscure page in the (non-normative!) user-guide talks about indexing without explicitly forbidding using negative numbers as indices, and extrapolating a whole range of behaviors from that.
What's with the Simulink Fixed-Point Reference pages showing only 4 functions, only one of which has anything at all to do with the construction or usage of fixed point numbers?
http://www.mathworks.com/help/toolbox/fixpoint/ref/brxj5qn.html
추가 답변 (2개)
Tom Bryan
2011년 10월 15일
Rick Rosson is right. Here is an example.
FractionLength defines the scaling of the StoredInteger value and relates to the RealWorldValue like this:
RealWorldValue = StoredInteger * 2 ^ -FractionLength
It is the binary equivalent of scientific notation. The WordLength limits the values the StoredInteger can attain, but does not limit the values FractionLength can attain.
For example, let
WordLength = 8
Signed = true (Signed)
FractionLength = 10
StoredInteger = 5
Then
RealWorldValue = 5 * 2 ^ -10 = 0.0048828125
In other words:
0.0048828125 (decimal) = x.xx00000101 (binary)
where "x" is a placeholder for implicit zeros.
You can experiment with fixed-point definitions using the fi object. The above example defined as a fi object is:
a = fi(0.0048828125, true, 8, 10)
Which returns
a =
0.0048828125
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 8
FractionLength: 10
To see the stored integer value, do
a.int
Which returns
ans =
5
To see the binary representation of the StoredInteger, do
a.bin
Which returns
ans =
00000101
The fixed-point definitions are described in the documentation here:
Simulink Fixed-Point > User's Guide > Data Types and Scaling > Fixed-Point Numbers http://www.mathworks.com/help/toolbox/fixpoint/ug/f20705.html
댓글 수: 2
Walter Roberson
2011년 10월 15일
That is a User's Guide, not a reference guide; and I have not been able to find anything in there that hints that the binary point might be to the left of the stored bits. It is not forbidden by the table of values, but it is a surprise facility.
I do not see anything in that User Guide that would forbid fl from being negative in a fixdt() call. Is negative fl allowed?
satheesh appukuttan
2020년 2월 26일
http://www.mathworks.com/help/toolbox/fixpoint/ug/f20705.html This link doesnt exist. Can you please help me to find this page ? I am trying to understand how FL can be more than WL in fixed point representation.
Rick Rosson
2011년 10월 15일
Hi Walter,
Please check the following links:
- http://www.mathworks.com/help/toolbox/simulink/slref/fixdt.html
- http://www.mathworks.com/help/toolbox/fixedpoint/ref/f20333.html
HTH
Rick
댓글 수: 2
Walter Roberson
2011년 10월 15일
Thank you.
If you google site:mathworks.com fixdt
then the first of those links does not appear within the first 20 pages of results. It does, however, I see now, appear as the first hit if one searches the documentation directly on mathworks.com
The reference page describes, for the format fixdt(Signed, WordLength, FractionLength), the permitted values for the Signed parameters, but does not discuss the type or permitted range for WordLength or FractionLength .
I still have not found anything in the documentation that indicates that implicit leading 0 bits are permitted, other than the fact that the chart in the User's Guide does not specifically forbid them. On the other hand, the chart in the User's Guide also does not specifically forbid the values from being negative or having fractional values -- e.g., log2(123) as a fraction length would appear to be as valid as using a fraction length larger than the word length.
To be clear: I am not at all saying that the toolbox is not implemented as Rick and Tom have indicated: I am pointing out that the documentation appears to say nothing about this. Users would have no more reason to expect this than they would to expect that log2(123) would be a valid fraction length.
Rick Rosson
2011년 10월 16일
If you opened a text book and came across a formula containing the expression a*2^x, would you have any reason to assume that x must be a positive number?
참고 항목
카테고리
Help Center 및 File Exchange에서 Create Fixed-Point Objects in MATLAB에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!