Sunteți pe pagina 1din 4

Biblioteci din Python pentru procesarea

semnalelor

Python un limbaj de programare high-level, dinamic, multi-paradigmă, cu scop general,


cross-platform. A fost creat in 1991 de Guido van Rossum . Datorită faptului că pune accent pe
lizibilitatea codului(blocurile programului sunt delimitate prin identare), a crescut în
popularitate și a ajuns unul din cele mai folosite limbaje de programare în aplicații WEB, dar și
în aplicații știintifice precum implementarea inteligenței artificiale și procesarea diferitelor
semnale.
Modelul de referință, software gratuit și administrat de Python Software Foundation,
este Cpython, care după cum sugerează numele acesta a fost dezvoltat folosind limbajul C.
Codul scris în python, nu este compilat ci interpretat la fel ca PHP sau Pearl, limbajul devenind
astfel foarte portabil, sistemele de operare necesitând doar interpretatorul CPython pentru a
rula cod scris în Python.
Comunitatea formată în jurul dezvoltării acestui limbaj de programare, lucrează prin
conceptul “Batteries Included”, adică dezvoltarea de diverse biblioteci care să ușureze munca
programatorilor.
Pentru procesarea semnalelor, python are foarte multe biblioteci care să vină în ajutor
de exemplu: SciPy(procesare de semnal), NumPy(calcule matematice exacte), Pyplot( afșsarea
2D, a diverselor grafice), SymPy(pentru diferite simboluri matematice), Pandas(structuri de
date și functii pentru procesare de semnal), Matplotlib(generarea de grafice 2D/3D). Acestea
sunt incluse în pachetul softwarea open-source “SciPy”
Biblioteca SciPy este organizată în subpachete, fiecare din ele corespunde unui anumite
colecții de algoritmi. Avem astfel algoritmi pentru clusterizare, transformări Fourier, integrale,
interpolări, algebră liniară, procesare de imagini, optimizare, procesare de semnal, structuri de
date spațiale, statistică.
Fiecare din aceste pachete trebuie importat separat. Exemplu:

>>> from scipy import signal


Subpachetul signal conține funcții și structuri de date pentru procesarea semnalelor, aici
regasim iarăși o subclasificare pe categorii.
Avem astfel funcții pentru:

 Convoluție
 Curbe B-splines
 Filtrare
 Simulare de filtre
 Simulare de filtre cu răspuns infinit la impuls
 Sisteme liniare în timp continuu
 Sisteme liniare în timp discret
 Reprezentări liniare, invariante în timp
 Forme de undă
 Aplicarea de ferestre în timp
 Wavelets
 Găsirea de vârfuri
 Analiza spectrală
Funcțiile din categoria Convoluție, realizează, după cum sugerează numele, convoluții și
corelații între două semnale. Semnalele sunt descrise cu ajutorul vectorilor nD. Cele mai
folosite funcții sunt:
 convolve(a1, a2,mod,metodă) – realizează convoluție între 2 vectori(a1 și a2) ce
coincid ca și dimensiuni în funcție de mod(full, valid, same) și metodă(direct, fft,
auto). Returnează un vector de aceeași dimensiune cu a1 și a2, ce reprezintă
convoluția discretă, liniară a acestora.
 correlate(a1,a2,mod,metodă) - realizează corelația între 2 vectori(a1 și a2) ce
coincid ca și dimensiuni în funcție de mod(full, valid, same) și metodă(direct, fft,
auto). Returnează un vector de aceeași dimensiune cu a1 și a2, ce reprezintă
produsul corelației lui a1 cu a2.
Familia de funcții B-splines construiesc curbe de intrapolare, bazate pe anumite puncte
de control. Cea mai cunoscută funcție dintre acestea este:
 bspline(x,n) – creează un obiect ce corespunde unei curbe spline de ordin n

Pentru implementarea diverselor filtre avem la dispoziție câteva funcții în librăria SciPy,
amintim urmatoarele:
 medfilt(volume, kernel_size) – realizează filtrarea mediană pe vectorul
multidimensional „volume”, cu o fereastră ale cărei dimensiuni sunt date de
kernel- size. Rezultatul va fi un vector de aceeasi dimensiune cu cel initial,
reprezentând produsul filtrării mediene pe acesta din urmă.
 lfilter(b, a, x, axis, zi) – realizare un filtru cu răspuns infinit la finit la impuls. b este
coeficientul de la numărător,a cel de la numitor. Ambii sunt vectori 1D. x
reprezintă semnalul, iar zi este un vector sau o matrice ce conține condițiile
inițiale.
Funcțiile din colecțiile pentrus simulare de filtre si filtre cu răspuns infinit la impuls
implementează și convertesc diverse filtre precum filtre FIR, IIR, pe care le și pot converti la
digitale, folosind transformata biliniară. Mai pot fi implementare filtre Cebîșev, Kaiser:
 bilinear(b, a[, fs]) – convertește un filtru IIR analogic în unul digital. a reprezintă
numărătorul funcției de transfer a filtrului analogic, iar b numitorul. Ca rezultat
primim 2 vectori care sunt numărătorul și numitorul funcției de transfer a
filtrului digital.
Altă familie importantă de funcții este cea pentru forme de undă(waveforms). Acestea
ajută la implementarea matematică a diverselor forme de undă(sinusoidale, pulsuri, etc.). De
exemplu:
 chirp(t, f0, t1, f1[, method, phi, vertex_zero]) – creează un cosinus cu frecvență
ce variază f0 si f1 ca valoare între momentele de timp t0 si t1. Phi reprezintă
faza, dacă nu e specificat altfel, aceasta are valoarea 0. Metoda(modul de
variație a frecvenței) poate fi ‘linear’, ‘quadratic’, ‘logarithmic’, ‘hyperbolic’ și e
un parametru opțional. In mod implicit e linear. Returnează un vector ce conține
valorile cosinusului in momente de timp.
 sawtooth(t[, width]) – returnează un semnal triunghiular/dinte de fierăstrău
bazat pe t(vector ce conține momente de timp) și pe width(lățimea pe care
crește pulsul)
 square(t[, duty]) – returnează un semnal dreptunghiular periodic, pe baza
valorilor lui t și a duty- factor de umplere.
Pentru obținerea de ferestre din semnal biblioteca SciPy conține funcția:
 get_window(window, Nx, fftbins=True) – window va da tipul ferestrei(ex: boxcar,
triang, hann), Nx va da numărul de eșantioane, fftbins e o variabila bool. Dacă e
TRUE, fereastră va fi periodică pentru a putea fi folosită în transformări Fourieri,
iar dacă e FALSE, fereastra obținută va fi una simetrică pentru folosirea
ulterioară în design-ul de filtre. Rezultatul va fi o fereastră cu Nx eșantioane de
forma window.
Familia wavelets produce “wavelets” – sunt funcții matematice ce preiau bucăți din
semnalul analizat, care sunt speciale, printr-un parametru( frecventă, periodicitate, vârfuri).
Analiza separată a acestora e mai rapidă decât prin metodele Fourier. Principiul de bază a
acestor este de a analiza datele la o scară potrivită.
Funcțiile pentru găsirea vârfurile, returnează vectori ce conțin minime, maxime, locale și
lațimea acestora în diverse semnale. Ca și exemplu putem vedea funcțiile:
 argrelmin(data[, axis, order, mode]) – aici data reprezintă semnalul, axis
reprezintă axa de la care se începe analiza semnalului, implicit e 0. Order e
numărul de puncte folosite pentru comparații. Modul poate fi wrap sau clip.
Implicit e clip(tratează depașirile ca pe primul/ultimul element). Returnează
tupluri de vectori n-dimensionali, cu minimele relative pe fiecare axă.
 argrelmax(data[, axis, order, mode]) - analog cu agrelmin, doar că vectorul
obținut conține maximele relative pentru fiecare axă.
Ultima familie de funcții din subpachetul signal al bibliotecii SciPy este cel pentru analiza
spectrală a semnalelor.
 periodogram(x[, fs, window, nfft, detrend, …]) – returnează un vector cu
eșantioane de frecvență și un vector n-dimensional ce reprezintă densitatea
spectrală de putere a lui x(valorile la momente de timp ale semnalului).
 spectrogram(x[, fs, window, nperseg, …]) – returnează o spectrogramă( ajută la
vizualizarea variațiilor de frecvență a unui semnal nestaționar în timp). Rezultatul
este alcătuit din 3 vectori. Primul conține eșantioane de frecvență, al doilea
segmete de timp, iar ultimul valorile Spectrogramei.
Acestea ar fi câteva din funcțiile subpachetului pentru procesarea semnalelor “signal”
din biblioteca SciPy, destinată limbajului de programare Python.

S-ar putea să vă placă și