<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250742</link>
    <title>MATLAB Central Newsreader - Fixed point number conversion</title>
    <description>Feed for thread: Fixed point number conversion</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Wed, 06 May 2009 16:55:46 -0400</pubDate>
      <title>Fixed point number conversion</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250742#647897</link>
      <author>Sheng</author>
      <description>Hi&lt;br&gt;
&lt;br&gt;
I have a problem about fixed point conversion.&lt;br&gt;
&lt;br&gt;
I know that use fi toolbox I can convert a dec. number into a hex.&lt;br&gt;
format, like this&lt;br&gt;
&lt;br&gt;
&amp;gt;&amp;gt; format hex&lt;br&gt;
&amp;gt;&amp;gt; fi(pi, 1,32,29)&lt;br&gt;
&lt;br&gt;
ans =&lt;br&gt;
&lt;br&gt;
6487ed51&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTypeMode: Fixed-point: binary point scaling&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Signed: true&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WordLength: 32&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FractionLength: 29&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RoundMode: nearest&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OverflowMode: saturate&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProductMode: FullPrecision&lt;br&gt;
&amp;nbsp;&amp;nbsp;MaxProductWordLength: 128&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SumMode: FullPrecision&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MaxSumWordLength: 128&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CastBeforeSum: true&lt;br&gt;
&lt;br&gt;
But how do I convert back from 6487ed51 to pi?&lt;br&gt;
For positive number, I can do hex2dec('6487ed51')/2^29, result is pi.&lt;br&gt;
But when the number is negative, the hex number is 2's complement, so&lt;br&gt;
I can't use hex2dec.&lt;br&gt;
&lt;br&gt;
Any suggestion?</description>
    </item>
    <item>
      <pubDate>Wed, 06 May 2009 17:58:15 -0400</pubDate>
      <title>Re: Fixed point number conversion</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250742#647916</link>
      <author>Tom Bryan</author>
      <description>Create a fi object with any value (say, 0), and the numerictype that you &lt;br&gt;
want, then load the value in hex as a string using the &quot;hex&quot; property, &lt;br&gt;
like this:&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;gt;&amp;gt; a = fi(0, 1,32,29);&lt;br&gt;
&amp;nbsp;&amp;gt;&amp;gt; a.hex = 'e0000000'&lt;br&gt;
&lt;br&gt;
a =&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-1&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTypeMode: Fixed-point: binary point scaling&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Signedness: Signed&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WordLength: 32&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FractionLength: 29&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;gt;&amp;gt; a.hex = '6487ed51'&lt;br&gt;
&lt;br&gt;
a =&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.1416&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTypeMode: Fixed-point: binary point scaling&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Signedness: Signed&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WordLength: 32&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FractionLength: 29&lt;br&gt;
&lt;br&gt;
Best wishes,&lt;br&gt;
Tom Bryan&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Sheng wrote:&lt;br&gt;
&amp;gt; Hi&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I have a problem about fixed point conversion.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I know that use fi toolbox I can convert a dec. number into a hex.&lt;br&gt;
&amp;gt; format, like this&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;&amp;gt;&amp;gt; format hex&lt;br&gt;
&amp;gt;&amp;gt;&amp;gt; fi(pi, 1,32,29)&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; ans =&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; 6487ed51&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;           DataTypeMode: Fixed-point: binary point scaling&lt;br&gt;
&amp;gt;                 Signed: true&lt;br&gt;
&amp;gt;             WordLength: 32&lt;br&gt;
&amp;gt;         FractionLength: 29&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;              RoundMode: nearest&lt;br&gt;
&amp;gt;           OverflowMode: saturate&lt;br&gt;
&amp;gt;            ProductMode: FullPrecision&lt;br&gt;
&amp;gt;   MaxProductWordLength: 128&lt;br&gt;
&amp;gt;                SumMode: FullPrecision&lt;br&gt;
&amp;gt;       MaxSumWordLength: 128&lt;br&gt;
&amp;gt;          CastBeforeSum: true&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; But how do I convert back from 6487ed51 to pi?&lt;br&gt;
&amp;gt; For positive number, I can do hex2dec('6487ed51')/2^29, result is pi.&lt;br&gt;
&amp;gt; But when the number is negative, the hex number is 2's complement, so&lt;br&gt;
&amp;gt; I can't use hex2dec.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Any suggestion?</description>
    </item>
    <item>
      <pubDate>Wed, 06 May 2009 18:00:59 -0400</pubDate>
      <title>Re: Fixed point number conversion</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/250742#647918</link>
      <author>Ashok Charry</author>
      <description>Hi Sheng,&lt;br&gt;
&lt;br&gt;
You may use the fi object in the Fixed-Point Toolbox to help you out &lt;br&gt;
with this.&lt;br&gt;
&lt;br&gt;
To set a hex value into a fi object there are a couple of ways of doing it:&lt;br&gt;
&lt;br&gt;
1) Using the fi constructor:&lt;br&gt;
a = fi(0,1,32,39,'hex','6487ed51');&lt;br&gt;
will give you a s32,29 fi object with a value pi&lt;br&gt;
&lt;br&gt;
It the same steps to set a negative value using a hex value:&lt;br&gt;
b = fi(0,1,32,29,'hex','9b7812af');&lt;br&gt;
will give you a fi object with value -pi&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
You may also see the hex value of a fi object by calling the hex method &lt;br&gt;
of the fi object:&lt;br&gt;
&lt;br&gt;
hex(b); % will give you '9b7812af'&lt;br&gt;
&lt;br&gt;
2) You may also set the hex property of the fi object:&lt;br&gt;
a.hex = '9b7812af';&lt;br&gt;
This will result in a having value of -pi&lt;br&gt;
&lt;br&gt;
Now if you do not want to work with fi objects and rather just work with &lt;br&gt;
doubles (like you hex2dec workflow) you may use the quantizer object &lt;br&gt;
that is also in the Fixed-Point Toolbox (where you find fis):&lt;br&gt;
&lt;br&gt;
q = quantizer([32 29],'nearest','saturate');&lt;br&gt;
% see help quantizer for more information&lt;br&gt;
&lt;br&gt;
Now use the hex2num method of the quantizer:&lt;br&gt;
hex2num(q,'9b7812af')&lt;br&gt;
will return a value: -pi&lt;br&gt;
&lt;br&gt;
To get the quantized hex value from a double value:&lt;br&gt;
&lt;br&gt;
hexStr = num2hex(q,-pi)&lt;br&gt;
&lt;br&gt;
and hexStr will be 9b7812af&lt;br&gt;
&lt;br&gt;
I hope this helps you solve your problem.&lt;br&gt;
&lt;br&gt;
Thanks,&lt;br&gt;
&lt;br&gt;
Ashok Charry&lt;br&gt;
Fixed-Point Engineer&lt;br&gt;
The MathWorks&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Sheng wrote:&lt;br&gt;
&amp;gt; Hi&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I have a problem about fixed point conversion.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; I know that use fi toolbox I can convert a dec. number into a hex.&lt;br&gt;
&amp;gt; format, like this&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;&amp;gt;&amp;gt; format hex&lt;br&gt;
&amp;gt;&amp;gt;&amp;gt; fi(pi, 1,32,29)&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; ans =&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; 6487ed51&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;           DataTypeMode: Fixed-point: binary point scaling&lt;br&gt;
&amp;gt;                 Signed: true&lt;br&gt;
&amp;gt;             WordLength: 32&lt;br&gt;
&amp;gt;         FractionLength: 29&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;              RoundMode: nearest&lt;br&gt;
&amp;gt;           OverflowMode: saturate&lt;br&gt;
&amp;gt;            ProductMode: FullPrecision&lt;br&gt;
&amp;gt;   MaxProductWordLength: 128&lt;br&gt;
&amp;gt;                SumMode: FullPrecision&lt;br&gt;
&amp;gt;       MaxSumWordLength: 128&lt;br&gt;
&amp;gt;          CastBeforeSum: true&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; But how do I convert back from 6487ed51 to pi?&lt;br&gt;
&amp;gt; For positive number, I can do hex2dec('6487ed51')/2^29, result is pi.&lt;br&gt;
&amp;gt; But when the number is negative, the hex number is 2's complement, so&lt;br&gt;
&amp;gt; I can't use hex2dec.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Any suggestion?</description>
    </item>
  </channel>
</rss>

