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ů
int16na floatnumpy.ndarrayv jednom průchodu.- Parametry:
buffer – buffer typu
bytesobsahující vzorky.count – počet prvků ke čtení.
-1přečte celý buffer odoffsetdo 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.ndarraydélkycount(nebo dostupného počtu vzorků, pokud jecountroven-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ů
uint16na floatnumpy.ndarrayv jednom průchodu.- Parametry:
buffer – buffer typu bytes obsahující vzorky.
count – počet prvků ke čtení.
-1přečte celý buffer odoffsetdo 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.ndarraydélkycount(nebo dostupného počtu vzorků, pokud jecountroven-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ů
int32na floatnumpy.ndarrayv jednom průchodu.- Parametry:
buffer – buffer typu bytes obsahující vzorky.
count – počet prvků ke čtení.
-1přečte celý buffer odoffsetdo 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.ndarraydélkycount(nebo dostupného počtu vzorků, pokud jecountroven-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ů
uint32na floatnumpy.ndarrayv jednom průchodu.- Parametry:
buffer – buffer typu bytes obsahující vzorky.
count – počet prvků ke čtení.
-1přečte celý buffer odoffsetdo 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.ndarraydélkycount(nebo dostupného počtu vzorků, pokud jecountroven-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.ndarraystejné délky jako r, obsahující magnitudu (nebo její logaritmus) v každém frekvenčním binu.