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.