ulab.utils — pomocné nástroje ulab

Podmodul ulab.utils poskytuje malou sadu pomocníků, kteří pracují s objekty numpy.ndarray, ale nacházejí se mimo standardní rozhraní NumPy / SciPy. Pomocníci jsou vyladěni pro streamovací vzory běžné na vestavěných cílech – periferní buffery širší než 16 bitů, magnitudová spektra bez alokace.

Převodníky bufferů

Standardní numpy.frombuffer() zpracovává pouze dtypy, které samotný numpy definuje (uint8, int8, uint16, int16, float). Pomocníci níže rozšiřují toto pokrytí na bajtové buffery int16 / uint16 / int32 / uint32 a v jednom průchodu vracejí float numpy.ndarray.

ulab.utils.from_int16_buffer(buffer: bytes, *, count: int = -1, offset: int = 0, out: numpy.ndarray | None = None, byteswap: bool = False) numpy.ndarray

Převede buffer vzorků int16 na float numpy.ndarray v jednom průchodu.

Parametry:
  • buffer – buffer typu bytes obsahující vzorky.

  • count – počet prvků ke čtení. -1 přečte celý buffer od offset do konce.

  • offset – počet bajtů, které se přeskočí na začátku bufferu.

  • out – volitelné předem alokované float numpy.ndarray, do kterého se zapíše výsledek. Pokud je zadáno, nealokuje se žádné nové pole.

  • byteswap – obrátí pořadí bajtů každého prvku před převodem – správné nastavení, pokud buffer pochází z periferie, která zapisovala v opačném pořadí bajtů než CPU kamery.

Vrací:

float numpy.ndarray délky count (nebo dostupného počtu vzorků, pokud je count roven -1).

ulab.utils.from_uint16_buffer(buffer: bytes, *, count: int = -1, offset: int = 0, out: numpy.ndarray | None = None, byteswap: bool = False) numpy.ndarray

Převede buffer vzorků uint16 na float numpy.ndarray v jednom průchodu.

Parametry:
  • buffer – buffer typu bytes obsahující vzorky.

  • count – počet prvků ke čtení. -1 přečte celý buffer od offset do konce.

  • offset – počet bajtů, které se přeskočí na začátku bufferu.

  • out – volitelné předem alokované float numpy.ndarray, do kterého se zapíše výsledek. Pokud je zadáno, nealokuje se žádné nové pole.

  • byteswap – obrátí pořadí bajtů každého prvku před převodem – správné nastavení, pokud buffer pochází z periferie, která zapisovala v opačném pořadí bajtů než CPU kamery.

Vrací:

float numpy.ndarray délky count (nebo dostupného počtu vzorků, pokud je count roven -1).

ulab.utils.from_int32_buffer(buffer: bytes, *, count: int = -1, offset: int = 0, out: numpy.ndarray | None = None, byteswap: bool = False) numpy.ndarray

Převede buffer vzorků int32 na float numpy.ndarray v jednom průchodu.

Parametry:
  • buffer – buffer typu bytes obsahující vzorky.

  • count – počet prvků ke čtení. -1 přečte celý buffer od offset do konce.

  • offset – počet bajtů, které se přeskočí na začátku bufferu.

  • out – volitelné předem alokované float numpy.ndarray, do kterého se zapíše výsledek. Pokud je zadáno, nealokuje se žádné nové pole.

  • byteswap – obrátí pořadí bajtů každého prvku před převodem – správné nastavení, pokud buffer pochází z periferie, která zapisovala v opačném pořadí bajtů než CPU kamery.

Vrací:

float numpy.ndarray délky count (nebo dostupného počtu vzorků, pokud je count roven -1).

ulab.utils.from_uint32_buffer(buffer: bytes, *, count: int = -1, offset: int = 0, out: numpy.ndarray | None = None, byteswap: bool = False) numpy.ndarray

Převede buffer vzorků uint32 na float numpy.ndarray v jednom průchodu.

Parametry:
  • buffer – buffer typu bytes obsahující vzorky.

  • count – počet prvků ke čtení. -1 přečte celý buffer od offset do konce.

  • offset – počet bajtů, které se přeskočí na začátku bufferu.

  • out – volitelné předem alokované float numpy.ndarray, do kterého se zapíše výsledek. Pokud je zadáno, nealokuje se žádné nové pole.

  • byteswap – obrátí pořadí bajtů každého prvku před převodem – správné nastavení, pokud buffer pochází z periferie, která zapisovala v opačném pořadí bajtů než CPU kamery.

Vrací:

float numpy.ndarray délky count (nebo dostupného počtu vzorků, pokud je count roven -1).

Spektrogram

ulab.utils.spectrogram(r: numpy.ndarray, imag: numpy.ndarray | None = None, *, scratchpad: numpy.ndarray | None = None, out: numpy.ndarray | None = None, log: bool = False) numpy.ndarray

Vrátí magnitudu diskrétní Fourierovy transformace vstupu, koncepčně ekvivalentní np.sqrt(real * real + imag * imag) po volání numpy.fft.fft() – bez alokace mezilehlých bufferů, které by explicitní forma vyžadovala.

Parametry:
  • r – reálná část vstupu jako 1-D float numpy.ndarray. Její délka musí být mocninou dvou.

  • imag – volitelná imaginární část vstupu, stejného tvaru jako r. Pokud je vynechána, vstup se považuje za čistě reálný.

  • scratchpad – volitelný pracovní buffer pro FFT. Pokud je zadán, nealokuje se žádné dočasné pracovní pole.

  • out – volitelný předem alokovaný cílový buffer pro magnitudové spektrum. Pokud je zadán, výsledek se zapisuje přímo do něj.

  • log – pokud True, vrátí přirozený logaritmus magnitudy místo samotné magnitudy.

Vrací:

float numpy.ndarray stejné délky jako r, obsahující magnitudu (nebo její logaritmus) v každém frekvenčním binu.