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.