Osnovne operacije nad signalima

Digitalna obrada signala, Vladimir Petrović

Ovaj notebook će predstaviti osnovne operacije nad diskretnim signalima: skaliranje i kašnjenje. Na osnovu njih ćemo definisati linearne, vremenski nepromenljive sisteme (LTI - linear time-invariant systems). Na kraju ćemo naučiti šta je impulsni odziv LTI sistema i kako izgleda odziv sistema na proizvoljnu pobudu - uvešćemo pojam konvolucije.

Skaliranje signala i kašnjenje

Skaliranje

Neka je dat diskretan signal $ x[n] $. On se može skalirati konstantom $ a $ ako se svaki odbirak signala pomnoži tom konstantom.

$$ y[n] = a x[n] $$

Signal praktično predstavlja vektor odbiraka i skaliranje je ništa drugo do množenje vektora skalarom.

$$ \mathbf{y} = a \mathbf{x} $$

Evo jednostavnog primera u Pajtonu.

Kašnjenje

Neka je dat diskretan signal $ x[n] $. Kašnjenje predstavlja pomeranje odbiraka signala u desno za određeni broj odbiraka $ n_0 $.

$$ y[n] = x[n - n_0] $$

U slučaju da je $ n_0 $ negativan broj, onda nije prirodno ovu operaciju nazvati kašnjenjem, pa je univerzalan naziv "pomeraj u vremenu". Primetimo da iako je dimenzija vremena nestala prilikom odabiranja i pomeraj je praktično promena indeksa odbiraka, pomeraj nazivamo pomeraj u vremenu radi analogije sa kontinualnim signalima.

Evo jednostavnog primera u Pajtonu. Poigrajmo se i sa različitim vrednostima pomeraja $ n_0 $.

Linearan vremenski nepromenljiv sistem (LTI)

Definicija LTI sistema

Sistem koji je linearan i vremenski nepromenljiv mora da zadovolji sledeće osobine:

U engleskoj literaturi se linearni, vremenski nepromeljivi sistemi skraćeno nazivaju LTI sistemima, od Linear Time-Invariant systems.

LTI sistemi se mogu okrakterisati impulsnim odzivom, tj. odzivom na pobudu u vidu Dirakovog impulsa. Impulsni odziv se najčešće obeležava sa $ h[n] $.

$$ \delta[n] = \begin{cases} 1 &\text{ za } n = 0 \\ 0 &\text{ inače} \end{cases} $$

Drugi način karakterizacije je korišćenjem diferencne jednačine kojom se zadaje veza između odziva i pobude. Na primer:

$$ y[n] = a_1 y[n-1] + b_0 x[n] + b_1 x[n-1], $$

gde su $a_1$, $b_0$ i $b_1$ konstante.

Konačno treći način da se karakteriše LTI sistem je pomoću prenosne funkcije u Z-domenu, o čemu će biti mnogo više reči kod tema koje se budu bavile projektovanjem filtara. Za primer ranije napisane diferencne jednačine, prenosna funckija bi bila:

$$ H(z) = \frac{ b_0 + b_1 z^{-1} }{ 1 - a_1 z^{-1} }. $$

Odziv LTI sistema na proizvoljnu pobudu

Sada kada smo definisali linearan, vremenski nepromenljiv sistem, postavljamo pitanje kakav je odziv tog sistema na proizvoljnu pobudu. Ako je poznata diferencna jednačina koja opisuje LTI sistem, onda se odbirak po odbirak lako može izračunati odziv. Međutim, ako je poznat samo impulsni odziv sistema, postavljamo pitanje da li je moguće na osnovu njega odrediti odziv na pobudu $ x[n] $. Odgovor sledi u narednim redovima.

Impulsni odziv, podsetimo, predstavlja odziv sistema na jedinični Dirakov impuls. LTI sistem je vremenski nepromenljiv, što znači da će na svom izlazu generisati isti impulsni odziv bez obzira na to u kom trenutku se pojavio Dirakov impuls. Dodatno, sistem je linearan, što znači da će odziv na skaliran Dirakov impuls, biti skaliran impulsni odziv. Takođe, odziv na zbir više skaliranih Dirakovih impulsa biće, zbog osobine linearnosti, zbir više skaliranih impulsnih odziva zakašnjenih onoliko koliko su pojedinačni Dirakovi impulsi bili zakašnjeni. Dakle, ako je proizvoljan signal moguće predstaviti kao niz skaliranih Dirakovih impulsa, onda je moguće, na osnovu osobine linearnosti i vremenske nepromenljivosti sistema, odrediti i odziv.

Dekompozicija signala

Zaista, svaki diskretan signal se može predstaviti kao zbir skaliranih Dirakovih impulsa koji su pomereni u vremenu jedan u odnosu na drugi.

$$ x[n] = \sum_{m=-\infty}^{+\infty} x[m]\delta[n-m]. $$

Razmortimo značenje prethodnog izraza:

Ilustrujmo ovo jednostavnim primerom u Pajtonu.

Konvolucija

Nakon prethodne analize, ostaje da vidimo kakav je odziv na pojedinačne impulse proizvoljnog signala $ x[n] $, a zatim i odziv na ceo signal $ x[n] $. S obzirom na to da analiziramo linearne, vremenski nepromenljive sisteme sa poznatim impulsnim odzivom $ h[n] $, odziv na pobudu $x[m]\delta[n-m]$ je $x[m]h[n-m]$.

Kao što smo videli, signal $x[n]$ se može zapisati kao suma skaliranih Dirakovih impulsa: $$ x[n] = \sum_{m=-\infty}^{+\infty} x[m]\delta[n-m]. $$

Korišćenjem osobine linearnosti, zaključujemo da je odziv LTI sistema na proizvoljnu pobudu $x[n]$ suma skaliranih impulsnih odziva pomerenih u vremenu:

$$ \boxed{\displaystyle{y[n] = \sum_{m=-\infty}^{+\infty} x[m]h[n-m] = (x*h)[n].}} $$

Ova relacija se zove konvolucija (convolution) signala $x[n]$ i $h[n]$.

Ilustrujmo konvoluciju diskretnih signala primerom u Pajtonu.

U prethodnom primeru smo iskoristili ugrađenu funkciju iz scipy biblioteke. Pokažimo sada da rezultat konvolucije odgovara sumi zakašnjenih i skaliranih impulsnih odziva, tako što ćemo uraditi dekompoziciju signala $x[n]$ na skalirane Dirakove impulse.

Srednja kvadratna razlika reda 10-37 zanemarljiva je i nastaje zbog različitog redosleda po kome se izvršavaju komutativne računske operacije.

Konvolucija kontinualnih signala

Slični zaključci vezani za odziv diskretnih sistema se mogu izvesti i za kontinualne signale i sisteme, a sume će zameniti integrali: $$ y(t) = \int_{\tau=-\infty}^{+\infty} x(\tau)h(t-\tau) = (x*h)(t). $$

Pogledajmo animaciju konvolucije kontinualnih signala.

Izvor: DSP Illustations

Vežba

Napišite program koji po definiciji računa konvoluciju dva diskretna signala. Najpre napisati funkciju koja računa konvoluciju dva niza

def conv(x, h):
        ...
        return y

Na kraju uporediti rezultate sa konvolucijama izračunatim korišćenjem numpy i scipy paketa.

Analizirajmo izraz za konvoluciju malo detaljnije. Sa tim ciljem, ponovićemo izraz:

$$ y[n] = \sum_{m=-\infty}^{+\infty} x[m]h[n-m] = (x*h)[n] $$

Primetimo da n-ti odbirak konvolucije predstavlja sumu dve pomnožene sekvence: jedne originalne sekvence ($x[m]$) i druge ($h[m]$) koja je invertovana u vremenu ($h[-m]$) i pomerena za n ($h[n-m]$). Ilustrujmo ove pomeraje na primeru:

Na osnovu prethodne analize, možemo napisati kod lepše. Funkcija napisana bez ugnježdenih for petlji je data u narednoj ćeliji.

Primena konvolucije u konvolucionom reverbu

Reverberacija je zvučni efekat koji nastaje kao rezultat interakcije zvuka sa okruženjem slušaoca. Najlakše ga je objasniti kao superpoziciju zvučnih signala koji nastaju odbijanjem od raznih površina unutar prostorije. Često se ovaj efekat postiže i veštački, obradom signala, čime se postiže da signali snimljeni u anehoičnoj sobi studija zvuče kao da su snimljeni u sportskoj hali, amfiteatru pozorišta i sl. Zanimljivo je da je za postizanje ovog efekta dovoljno uraditi jednu konvoluciju. Ako su na raspolaganju impulsni odzivi prostorija, konvolucijom originalnog signala i impulsnih odziva dobijaju se signali koji zvuče kao da su snimljeni u tim prostorijama. Impulsni odzivi se najčešće snimaju tako što se proizvede impulsni zvuk (pljesak, pucanj iz pištolja, udar filmske klapne) koji predstavljaju impulsnu pobudu.

Sledeći Pajton kod ilustruje konvolucioni reverb. Za više primera posetiti sajt.

Literatura