Scipy Convolve

Scipy Convolve
Det grunnleggende konseptet med konvolvering er å kombinere to signaler ved å bruke en matematisk funksjon for å lage det tredje signalet. Det er den mest brukte digitale signalbehandlingsteknikken. Konvolusjonen av to signaler blir betraktet som integralen til det ene signalet som er sammen med et annet signal. Dette gjøres mens du multipliserer med skalarproduktet på hvert vektorpunkt som overlapper.

Det samme konseptet med konvolvering brukes i Python. Array. Scipy Convolve er en N-dimensjonal matrise. Det er vanligvis to eller flere 1-D-sekvenser. I denne artikkelen vil vi diskutere Scipy Convolve -funksjonen i detalj og prøve å lære bruken av konvolveringsfunksjonen ved hjelp av eksempler.

Scipy konvolver bruken og syntaks

Scipy Convolve brukes til å konvolvere to N-dimensjonale matriser. Her er syntaksen til Scipy Convolve -funksjonen:

# Scipy.signal.Convolve (INP1, INP2, MODE = 'FULL', METODE = 'Auto')

'INP1' er den første inngangsarrayen, 'INP2' er den andre inngangsarrayen, og den skal ha samme antall dimensjoner som 'INP1' -parameteren. "Mode" -parameteren er en strengparameter som bestemmer utgangsstørrelsen; Det er definert av tre alternativer, samme, gyldig eller full. Det er en valgfri parameter.

Den 'fulle' modus indikerer at den komplette diskrete lineære konvolusjonen av inngangene skal gis, og det er standardmodus; Hvis ingen modus er gitt, regnes 'full' modus som standard. Den 'samme' modusen returnerer utdataene som størrelsen som 'INP1' -parameter, sentrert i henhold til den 'fulle' utgangen.

Den siste modusen, også en 'gyldig' modus, returnerer elementer som ikke bare er avhengige av null-padding. "Metode '-parameteren er en annen valgfri parameter. Det er en strengparameter som indikerer hvilken metode som skal brukes til konvolusjon. Det tar også et av de tre argumentene; Auto, FFT og direkte. 'FFT' er Fourier-transformasjonen, brukt til å utføre konvolusjonen ved å kalle den innebygde FFTConvolve-funksjonen.

Det 'direkte' argumentet representerer den direkte konvolusjonen som er den grunnleggende definisjonen av konvolusjon. Og til slutt blir "auto" -argumentet gitt der automatisk valg av enten 'direkte' eller 'FFT' argument er påkrevd, avhengig av hva som er raskere. 'Auto' -argumentet er standard; Hvis ingenting blir gitt, regnes 'auto' som standardargumentet.

Utgangen fra konvolveringsfunksjonen vil være undergruppen av diskret lineær konvolusjon av INP1 med INP2. La oss se eksemplene nedenfor for å forstå hvordan vi kan implementere Scipy Convolve.

Eksempel 1:

Dette er det aller første eksemplet på denne artikkelen som vil bidra til å fjerne tankene om den teoretiske informasjonen som vi har nevnt ovenfor.

I dette eksemplet vil vi plotte en jevn puls i en firkantet form ved hjelp av et Hann -vindu. Programkoden bruker en NP -matrise (angitt som SIG_One) for å plotte kurven og signalet.konvolve () brukes til å konvolvere signalene.

Se hele koden vedlagt nedenfor. Her har vi importert de nødvendige bibliotekene først og erklært matrisen. Etter å ha ringt konvolveringsfunksjonen, har vi plottet pulsen. I resten av koden kan du se at vi har satt marginene og vist originalen så vel som filtrert impulsrespons og det filtrerte signalet på grafen.

fra scipy importsignal
Importer numpy som P
Importer matplotlib.Pyplot som MTP
SIG_One = p.Gjenta ([1., 0., 1.], 100)
windows_one = signal.vinduer.Hann (65)
Filtered_res = signal.Convolve (SIG_One, Window_One, Mode = 'Same') / Sum (Window_One)
Figur_one, (Axis_orig, Axis_win, Axis_Filt) = MTP.delplotter (3, 1, sharex = true)
Axis_orig.plot (sig_one)
Axis_orig.set_title ('Her er den originale pulsen')
Axis_orig.marginer (0, 0.1)
Axis_win.plot (windows_one)
Axis_win.set_title ('Her er filterimpulsresponsen')
Axis_win.marginer (0, 0.1)
AXIS_FILT.plot (filtrert_res)
AXIS_FILT.set_title ('Her er det filtrerte signalet')
AXIS_FILT.marginer (0, 0.1)
FIGUR_ONE.tight_layout ()
FIGUR_ONE.forestilling()

Merk at koden blir utført i Google Collab. Google-samarbeidet er et åpen kildekodeverktøy som brukes til å implementere Python-koder. Det er et gratis verktøy og lett tilgjengelig via Google eller en hvilken som helst annen nettleser.

Etter å ha utført koden, får du se bølgene. Se det vedlagte bildet nedenfor.

Eksempel 2:

Dette er det andre eksemplet på denne artikkelen, og her vil vi bruke NDImage -metoden for å demonstrere funksjonaliteten til Convolve -funksjonen.

I dette eksemplet tar 'modus' -parameteren til Ndimage et av de fem argumentene; pakk, speil, nærmeste, konstant og reflektere. Argumentet 'Reflect' representerer halvprøvesymmetrisk utvidet ved å mimre om kanten. Den 'konstante' brukes til å representere alle verdiene som er utenfor kanten, men med samme konstante verdi.

Den 'nærmeste' representerer en spesifikk verdi som utvides ved å gjenskape den endelige pikselen. 'Speilet' representerer sentrum av den siste pikselen, og 'wrap' -argumentet representerer innpakningen rundt til motsatt kant. Se koden gitt nedenfor:

fra scipy import ndimage
Importer numpy som P
One_arr = p.Array ([[1, 0, 2],
[1, 1, 0],
[1, 0, 0]])
to_arr = s.Array ([[0, 1, 0],
[1, 1, 0],
[0, 1, 0],
[0, 1, 1],
[0, 1, 0]])
trykk (Ndimage.Convolve (One_arr, Two_arr, Mode = 'nærmeste'))

Her er utdataene fra ovennevnte kode, som er den innviklede matrisen som du kan se.

Eksempel 3:

Følgende eksempel vil demonstrere en 2D -konvolveringsfunksjon. De to todimensjonale matriser er konvolvert ved hjelp av Convolve2D-funksjonen. Convolve2D bruker to ekstra valgfrie parametere 'FillValue' og 'Boundary'.

Parameteren 'grense' tar ett av tre argumenter; Fyll, innpakning og symm. Argumentet "Fyll" er standardverdien og Pad Input Arrays med FillValue. 'Wrap' -argumentet representerer de sirkulære grensebetingelsene. 'Symm' -argumentet representerer de symmetriske grensebetingelsene.

'FillValue' er representert med en skalarverdi som brukes til å fylle Pad -inngangsarrayen med, og standardverdien er 0. I den vedlagte koden vil vi beregne gradienten til et bilde.

fra scipy importsignal
Fra Scipy Import Misc
Importer numpy som P
Importer matplotlib.Pyplot som MTB
ASCENT_ONE = MISC.stigning()
scharr_one = p.Array ([[-3-3j, 0-10j, +3 -3j],
[-6 +0j, 1+ 0j, +6 +0j],
[-2 +2j, 0 +6j, +3 +2j]])
grad_one = signal.konvolve2d (Ascent_one, scharr_one, grense = 'symm', modus = 'samme')
Fig_one, (Axis_orig, Axis_Mag, Axis_ang) = MTB.Underplott (3, 1, FigSize = (7, 16))
Axis_orig.Imshow (Ascent_One, CMAP = 'Grå')
Axis_orig.set_title ('original')
Axis_orig.set_axis_off ()
AXIS_MAG.Imshow (s.Absolute (grad_one), cmap = 'grå')
AXIS_MAG.set_title ('gradientstørrelse resultat')
AXIS_MAG.set_axis_off ()
Axis_ang.Imshow (s.vinkel (grad_one), cmap = 'hsv')
Axis_ang.set_title ('gradientorientering resultat')
Axis_ang.set_axis_off ()
Fig_one.forestilling()

Her er utdataene fra ovennevnte kode:

Konklusjon

I denne artikkelen har vi lært Scipy Convolve -funksjonen ved hjelp av eksempler. For det første har vi diskutert det grunnleggende konseptet med konvolveringsfunksjon, og så har vi lært om syntaks for konvolveringsfunksjonen, og senere har vi undersøkt tre forskjellige eksempler for å se bruken av Scipy Convol Dection på en veldig annen måte.