ulab.utils — pomocnicze narzędzia ulab

Podmoduł ulab.utils udostępnia niewielki zestaw funkcji pomocniczych, które operują na obiektach numpy.ndarray, lecz znajdują się poza standardowym zakresem NumPy / SciPy. Funkcje pomocnicze są dostrojone do wzorców strumieniowych typowych dla urządzeń wbudowanych – buforów peryferyjnych szerszych niż 16 bitów oraz widm amplitudowych bez alokacji.

Konwertery buforów

Standardowa numpy.frombuffer() obsługuje wyłącznie dtypy, które numpy sam definiuje (uint8, int8, uint16, int16, float). Poniższe funkcje pomocnicze rozszerzają to pokrycie na bufory bajtowe int16 / uint16 / int32 / uint32 i zwracają numpy.ndarray typu float w jednym przebiegu.

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

Konwertuje bufor próbek int16 na numpy.ndarray typu float w jednym przebiegu.

Parametry:
  • buffer – bufor przypominający bytes zawierający próbki.

  • count – liczba elementów do odczytania. -1 odczytuje cały bufor od offset do końca.

  • offset – liczba bajtów do pominięcia na początku bufora.

  • out – opcjonalna, wstępnie zaalokowana numpy.ndarray typu float, do której zostanie zapisany wynik. Gdy jest podana, nie jest alokowana nowa tablica.

  • byteswap – odwraca kolejność bajtów każdego elementu przed konwersją – właściwe ustawienie, gdy bufor pochodzi z urządzenia peryferyjnego, które zapisało dane w odwrotnej kolejności bajtów niż CPU kamery.

Zwraca:

numpy.ndarray typu float o długości count (lub o dostępnej liczbie próbek, gdy count wynosi -1).

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

Konwertuje bufor próbek uint16 na numpy.ndarray typu float w jednym przebiegu.

Parametry:
  • buffer – bufor przypominający bytes zawierający próbki.

  • count – liczba elementów do odczytania. -1 odczytuje cały bufor od offset do końca.

  • offset – liczba bajtów do pominięcia na początku bufora.

  • out – opcjonalna, wstępnie zaalokowana numpy.ndarray typu float, do której zostanie zapisany wynik. Gdy jest podana, nie jest alokowana nowa tablica.

  • byteswap – odwraca kolejność bajtów każdego elementu przed konwersją – właściwe ustawienie, gdy bufor pochodzi z urządzenia peryferyjnego, które zapisało dane w odwrotnej kolejności bajtów niż CPU kamery.

Zwraca:

numpy.ndarray typu float o długości count (lub o dostępnej liczbie próbek, gdy count wynosi -1).

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

Konwertuje bufor próbek int32 na numpy.ndarray typu float w jednym przebiegu.

Parametry:
  • buffer – bufor przypominający bytes zawierający próbki.

  • count – liczba elementów do odczytania. -1 odczytuje cały bufor od offset do końca.

  • offset – liczba bajtów do pominięcia na początku bufora.

  • out – opcjonalna, wstępnie zaalokowana numpy.ndarray typu float, do której zostanie zapisany wynik. Gdy jest podana, nie jest alokowana nowa tablica.

  • byteswap – odwraca kolejność bajtów każdego elementu przed konwersją – właściwe ustawienie, gdy bufor pochodzi z urządzenia peryferyjnego, które zapisało dane w odwrotnej kolejności bajtów niż CPU kamery.

Zwraca:

numpy.ndarray typu float o długości count (lub o dostępnej liczbie próbek, gdy count wynosi -1).

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

Konwertuje bufor próbek uint32 na numpy.ndarray typu float w jednym przebiegu.

Parametry:
  • buffer – bufor przypominający bytes zawierający próbki.

  • count – liczba elementów do odczytania. -1 odczytuje cały bufor od offset do końca.

  • offset – liczba bajtów do pominięcia na początku bufora.

  • out – opcjonalna, wstępnie zaalokowana numpy.ndarray typu float, do której zostanie zapisany wynik. Gdy jest podana, nie jest alokowana nowa tablica.

  • byteswap – odwraca kolejność bajtów każdego elementu przed konwersją – właściwe ustawienie, gdy bufor pochodzi z urządzenia peryferyjnego, które zapisało dane w odwrotnej kolejności bajtów niż CPU kamery.

Zwraca:

numpy.ndarray typu float o długości count (lub o dostępnej liczbie próbek, gdy count wynosi -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

Zwraca amplitudę dyskretnej transformaty Fouriera wejścia, pojęciowo równoważną np.sqrt(real * real + imag * imag) po wywołaniu numpy.fft.fft() – bez alokowania buforów pośrednich, które wymagałaby postać jawna.

Parametry:
  • r – część rzeczywista wejścia jako 1-wymiarowa numpy.ndarray typu float. Jej długość musi być potęgą dwójki.

  • imag – opcjonalna część urojona wejścia, o tym samym kształcie co r. W przypadku pominięcia wejście traktowane jest jako czysto rzeczywiste.

  • scratchpad – opcjonalny bufor roboczy dla FFT. Gdy jest podany, nie jest alokowana tymczasowa tablica robocza.

  • out – opcjonalny, wstępnie zaalokowany bufor docelowy dla widma amplitudowego. Gdy jest podany, wynik jest zapisywany bezpośrednio do niego.

  • log – gdy True, zwraca logarytm naturalny amplitudy zamiast samej amplitudy.

Zwraca:

numpy.ndarray typu float o tej samej długości co r, zawierająca amplitudę (lub jej logarytm) w każdym prążku częstotliwości.