Simulink: 4 bytes to float

Hello!
I am sending with a microcontroller a float value (i.e. 145.2322308) as 4 bytes over Serial. I get the data in Simulink with " Serial Receiver" but I don't know how to combine the 4 bytes I am receiving in one variable of 32 bits and be able to scope the value 145.2322308.
With each serial package I send three values [float , float , long \CR]. I have tried different approaches but I can only scope the value of the bytes:
Thank you in advance for your help!

Answers (2)

Jonas
Jonas on 16 Feb 2021
Edited: Jonas on 16 Feb 2021
Another way is to construct your output manually with 'Shift Arithmetic' blocks and perform bitshifts:
The input to the left you see is a vector of 4 bytes of type uint8.
Inside the MATLAB function is the following code, since no block exists to perform a typecast:
function single_value = typecast_int32_to_single(int32_value)
single_value = typecast(int32_value,'single');

3 Comments

If you are going to use a MATLAB Function block, then you can just typecast() the block of 4 bytes into single() directly; you might need to swapbytes() afterwards.
@Walter Roberson Yes, also works! I tested and found that the swapbytes() was necessary as you mentioned.
So the MATLAB Function becomes:
function single_value = typecast_int32_to_single(uint8_buffer)
single_value = swapbytes(typecast(uint8_buffer,'single'));
I do find the generated code of my first suggestion a bit nicer:
compared to the integrated MATLAB Function:
So personally I am going to keep using my implementation with the bitshifts because I generate code from it.
Thank you very much. It works!

Sign in to comment.

Jonas
Jonas on 16 Feb 2021
Use the Byte Unpack block and feed those 4 bytes into it after you have muxed them. Set Output port data type to {'single'} if you want to reconstruct a 32-bit float.

Categories

Products

Release

R2020b

Asked:

on 15 Feb 2021

Commented:

on 16 Feb 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!