File f32_to_uq15_core.h¶
FileList > f32_to_uq15 > f32_to_uq15_core.h
Go to the source code of this file
Scale-and-saturate float-to-UQ15 (offset-binary uint16) converter. More...
#include "clib_common.h"#include "dp_state.h"#include "jm_perf.h"#include <math.h>
Classes¶
| Type | Name |
|---|---|
| struct | f32_to_uq15_state_t F32ToUQ15 state. |
Public Functions¶
| Type | Name |
|---|---|
| f32_to_uq15_state_t * | f32_to_uq15_create (float scale) Create a f32_to_uq15 instance. |
| void | f32_to_uq15_destroy (f32_to_uq15_state_t * state) Destroy a f32_to_uq15 instance and release all memory. |
| void | f32_to_uq15_get_state (const f32_to_uq15_state_t * state, void * blob) |
| void | f32_to_uq15_reset (f32_to_uq15_state_t * state) Reset f32_to_uq15 to its post-create state. |
| int | f32_to_uq15_set_state (f32_to_uq15_state_t * state, const void * blob) |
| size_t | f32_to_uq15_state_bytes (const f32_to_uq15_state_t * state) |
| JM_FORCEINLINE JM_HOT uint16_t | f32_to_uq15_step (f32_to_uq15_state_t * state, float x) Process one input sample. |
| void | f32_to_uq15_steps (f32_to_uq15_state_t * state, const float * input, uint16_t * output, size_t n) Process a block of float samples to UQ15 uint16. |
Macros¶
| Type | Name |
|---|---|
| define | F32_TO_UQ15_STATE_MAGIC [**DP\_FOURCC**](dp__state_8h.md#define-dp_fourcc) ('F','U','1','5') |
| define | F32_TO_UQ15_STATE_VERSION 1u |
Detailed Description¶
Converts a normalised float sample to offset-binary uint16 (UQ15 format). The Q15 quantised value is biased by +32768 so that the full unsigned range maps to the signed float domain: -1.0 → uint16 0 (0x0000) 0.0 → uint16 32768 (0x8000) +1.0 → uint16 65535 (0xFFFF)
Encoding:
This is the unsigned wire format used by some DAC and file-container conventions that cannot represent negative integer values. UQ15ToF32 performs the exact inverse. A sticky clipped flag is raised on saturation and cleared only by reset().
Lifecycle: create -> (step / steps / reset)* -> destroy
>>> from doppler.cvt import F32ToUQ15
>>> import numpy as np
>>> obj = F32ToUQ15(scale=32768.0)
>>> obj.step(0.0)
32768
>>> obj.step(-1.0)
0
>>> obj.clipped
False
>>> obj.step(1.0)
65535
>>> obj.clipped
True
>>> obj.reset()
>>> x = np.array([-1.0, 0.0, 1.0], dtype=np.float32)
>>> obj.steps(x).tolist()
[0, 32768, 65535]
Public Functions Documentation¶
function f32_to_uq15_create¶
Create a f32_to_uq15 instance.
Stores scale and initialises the sticky clipped flag to 0.
Parameters:
scaleMultiply factor applied before quantisation and saturation (default: 32768.0f). Use 32768.0 to convert normalised[-1, +1]floats to the full UQ15 range[0, 65535]. Must be > 0; returns NULL otherwise.
Returns:
Heap-allocated state, or NULL on invalid args or allocation failure.
Note:
Caller must call f32_to_uq15_destroy() when done.
function f32_to_uq15_destroy¶
Destroy a f32_to_uq15 instance and release all memory.
Parameters:
stateMay be NULL.
function f32_to_uq15_get_state¶
function f32_to_uq15_reset¶
Reset f32_to_uq15 to its post-create state.
Clears the sticky clipped flag. The scale is preserved.
Parameters:
stateMust be non-NULL.
function f32_to_uq15_set_state¶
function f32_to_uq15_state_bytes¶
function f32_to_uq15_step¶
Process one input sample.
Computes round(x * scale), clamps to [-32768, 32767], then adds 32768 to produce the offset-binary uint16 result. Sets clipped if saturation occurred before clamping.
Parameters:
stateMust be non-NULL.xNormalised float input sample.
Returns:
Offset-binary uint16 in [0, 65535]: x = -1.0 → 0x0000, x = 0.0 → 0x8000, x ≈ +1.0 → 0xFFFF.
function f32_to_uq15_steps¶
Process a block of float samples to UQ15 uint16.
void f32_to_uq15_steps (
f32_to_uq15_state_t * state,
const float * input,
uint16_t * output,
size_t n
)
Applies step() to every element. The clipped flag is updated cumulatively across the block. Accepts an optional pre-allocated output array; allocates a fresh one when output is NULL.
Parameters:
stateMust be non-NULL.inputInput float32 array; must contain at leastnelements.outputOutput uint16 offset-binary array; must contain at leastnelements.nNumber of samples to process.
>>> from doppler.cvt import F32ToUQ15
>>> import numpy as np
>>> F32ToUQ15().steps(np.array([-1.0, 0.0, 0.999], dtype=np.float32)).tolist()
[0, 32768, 65503]
Macro Definition Documentation¶
define F32_TO_UQ15_STATE_MAGIC¶
define F32_TO_UQ15_STATE_VERSION¶
The documentation for this class was generated from the following file native/inc/f32_to_uq15/f32_to_uq15_core.h