Simulink: 4 bytes to float
조회 수: 34 (최근 30일)
이전 댓글 표시
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!
댓글 수: 0
답변 (2개)
Jonas
2021년 2월 16일
편집: Jonas
2021년 2월 16일
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
Jonas
2021년 2월 16일
@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.
Jonas
2021년 2월 16일
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.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Messages에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!