필터 지우기
필터 지우기

convert one fixed point format to integer

조회 수: 25 (최근 30일)
Gary
Gary 2024년 6월 5일
편집: Andy Bartlett 2024년 6월 5일
I have a variable that varies from 0 to 1 and its format is 32 bit fixdt(1,32,30). I want to convert this number 0 to 1 as 0-4095. Help is required for converting fixdt(1,32,30) to 12 bits integer value ranging from 0 to 4095.

채택된 답변

Andy Bartlett
Andy Bartlett 2024년 6월 5일
편집: Andy Bartlett 2024년 6월 5일
I assume you have a signal in Simulink using the data type fixdt(1,32,30).
Just feed that signal as input to a data type conversion block and set the output of the that to be
Output: fixdt(0,12,12)
Overflow: Saturate
The real-world-value of the output will be in the closed interval [0, 0.999755859375].
The stored-integer-value of the output will be in the range 0 to 4095 as you desire.
Note if the input has real-world-value 1.0 it will saturate to the maximum representable value of this 12 bit type 0.999755859375.
Usually it's best to feed that fixed-point signal directly to the next blocks in your design. Those blocks will implement their math with knowledge of the signals real world value.
In less common cases, you may need to have stored integer value be on a Simulink signal with all the scaling information removed. To do this, insert a second data type conversion block into your model. Connect the output of the first data type converstion as the input of the second data type conversion, then configure the second conversion block to have
Output: fixdt( 0, 12, 0)
Input and output to have equal: Stored Integer Value (SI)
the output of the second data type conversion will have trivial scaling and just have integer values from 0 to 4095.
With trivial scaling, the real-world-value and stored-integer-value are always identical.

추가 답변 (1개)

Shivani
Shivani 2024년 6월 5일
Hi @Gary,
To convert a fixed-point number with a range of 0 to 1 (fixdt(1,32,30)) to a 12-bit integer value ranging from 0 to 4095 in MATLAB, you can follow a simple scaling process.
Since your variable ranges from 0 to 1 and you want to map this to a range of 0 to 4095, you need to scale it by multiplying by 4095. After scaling, use the floor or round function to convert the result to an integer. Finally, cast the integer to a 12-bit representation. MATLAB does not have a built-in 12-bit integer type, so you’ll need to ensure the value fits within the 12-bit range and use a 16-bit integer to store it. You can refer to the following code for an example on how this can be implemented in MATLAB. I am using the intial variable containing the fixed-point number to be var.
scaled_var = var * 4095;
int_var = round(scaled_var);
int_var = mod(int_var, 4096); % Ensure the value fits in a 12-bit range. This step is crucial to avoid overflow if 'var' is not strictly less than 1
int_var_16bit = uint16(int_var);
  댓글 수: 1
Gary
Gary 2024년 6월 5일
I want a simulink solution to the above problem

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Signal Attributes and Indexing에 대해 자세히 알아보기

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by