8. Konvolúció a Fourier térben
Miután megismerkedtünk a diszkrét Fourier transzformációval és az azt megvalósító FFT-vel, a mesterséges hangzás létrehozásának elvét tárgyaljuk. Ahogy előzőleg említettem, erre a konvolúciót fogjuk használni. Nézzük meg először az elvét, illetve algoritmusát alapján és a megvalósítást végző program kódját [6] alapján.
8.1. Folytonos függvények konvolúciója
A konvolúció fogalmát egy egyszerű elektromos hálózat példáján keresztül fogjuk levezetni. Legyen adott egy áramkör, amely ellenállásokból és kondenzátorokból áll. A kondenzátorok miatt a hálózat bementére adott jel késéssel és némileg torzult formában jut el a kimenetre. Vezessünk be egy egyezményes mérőjelet, amelyet a hálózat bementére juttatunk és mérjük kimenetét, vagyis a bemenetre adott válaszát. E mérőjel legyen egy elég keskeny Dt szélességű feszültség impulzus. Az impulzus integrálja legyen egységnyi. Következésképp 1/Dt magas lesz. A Dt szélességű mérőimpulzusra adott rDt(t) válasz független Dt tényleges értékétől. Ez annál inkább tapasztalható, minél kisebb a Dt idő a válasz-impulzus lefutásának teljes tartamához képest. Ebből következik, hogy a Dt időt a hálózat tulajdonságait figyelembe véve kell megválasztani, mindig úgy, hogy Dt igen kicsi legyen a hálózat tranziens időihez képest. (Lásd F.21.)
F.21. Elektromos hálózat impulzusválasza
Természetesen a mérőjelet függetlenné tehetjük az adott hálózattól, mégpedig a Dirac-d gerjesztés bevezetésével. Ez esetben Dt kicsi bármely hálózat tranziens időihez képest, tehát Dt->0, vagyis mérőjelünk végtelenül keskeny, de ugyanakkor egységnyi területű impulzus, tehát végtelen magas is egyben. A hálózatnak a Dirac-d bemenetre adott válasz-függvénye a hálózat súlyfüggvénye. Ha tehát Dt tart zérushoz, a Dt szélességű impulzusra adott válasz tart a súlyfüggvényhez:
(8.1)
Dirac-d tulajdonságai a követezőek:
- Értéke minden t értéknél zérus, kivéve a t=0 pillanatot, amikor végtelen,
- Integrálja egységnyi.
Látható, hogy válasz csak a gerjesztés követően jön létre, vagyis míg a bemeneti Dirac-d a t=0 pillanatban jelentkezik, addig a súlyfüggvény csak a t>=0 pillanatokban lehet zérustól eltérő.
Ahhoz, hogy megértsük a hálózat tetszőleges gerjesztésére adott válasz számolását, tekintsük a következő példát. A bemenő függvényünket bontsuk fel Dt szélességű szakaszokra és közelítsük a függvényt a szakasz elején felvett értékével. Eredményként a gerjesztő függvényt, mint impulzus sorozatot kapjuk meg. Egyetlen Dt szélességű impulzusra ismerjük a hálózat válaszát: rDt(t). Jelen esetben pedig több, különböző magasságú, különböző időpontban jelentkező bemenő impulzusunk van. (Lásd F.22.)
F.22. Tetszőleges gerjesztő függvény felbontása Dt szélességű impulzusokra
Az i-edik impulzus a t=0 időponthoz képest iDt-vel később jelentkezik és magassága nem 1/Dt, hanem g(iDt). Tehát a válasz több rDt(t) formájú függvény összege lesz, amelyek a gerjesztő impulzus időbeni eltolásának és változó magasságának megfelelően eltolva és konstanssal szorozva jelentkeznek:
(8.2)
Ne felejtsük el, hogy lineáris hálózatról van szó, így több gerjesztés együttes hatása egyenlő az egyenkénti gerjesztések hatásának összegével.
Finomítsuk most végtelenül a gerjesztő függvény impulzusokra bontását, azaz Dt tartson zérushoz. Ekkor (8.2) summája alatt az rDt(t) válaszfüggvény az s(t) súlyfüggvényhez tart. Maga a summa egy integrál közelítő összege, ami Dt->0 határátmenettel a t=iDt szerinti integrálba megy át a következő módon:
(8.3)
A fenti képlet a hálózatelméletből ismeretes, lineáris rendszerekre vonatkozó Duhamel tétel alapján vezethető le. A képlet maga pedig az úgynevezett konvolúciós integrál.
Az integrálási határok abból adódnak, hogy az integrálásnak csak azon t tartományra kell kiterjednie, amelyen az integrandus nullától eltérő lehet. Mivel feltételezzük, hogy
s(t)=0 ha t<0,
g(t)=0 ha t<0 (8.4)
a t<0 esetben g(t) biztosan zérus, a t>t esetben s(t-t) biztosan zérus.
A v(t) válaszfüggvény tehát a g(t) gerjesztési- és az s(t) súlyfüggvény konvolúciója szerint számolható:
v(t)=g(t) X s(t) (8.5)
A gyakorlatban a konvolúciós integrál értelmezése igen érdekes: a g(t) függvényre rárajzoljuk az s(t)-t, a negatív t értékek felé áttükrözve és az origóját t pontba eltolva. Majd a közös szakaszon szorzatukat integráljuk, vagyis nem teszünk mást, mint vesszük g(t) függvénynek az s(t) súlyfüggvénnyel súlyozott integrálját. A v(t) függvény t paraméterét változtatva az s(t) függvény kezdőpontja eltolódik, s az s(t) szinte végigcsúszik a g(t)-n, miközben mindig más szakaszon képződik a súlyozott átlag.
Meg kell említeni, hogy a konvolúciós szűrés átalában információveszteséggel jár. Ennek vizsgálatához ismét egy egyszerű elektromos hálózatot választunk. (Lásd F.23.)
F.23. Integráló tag és súlyfüggvénye
Az integráló tag súlyfüggvénye a következőképpen alakul:
s(t)=(1/t)e-t/t ha t<=0
s(t)=0 ha t<0 (8.6)
Az ezzel való konvolúció durván t nagyságú időtartományra való átlagolásnak felel meg. Ha t igen nagy a vizsgált jel tartamához képest, akkor ez a konvolúció közelítőleg a jel integrálját adja. Az átlagolás miatt a magasabb frekvencia összetevők egyre kisebb amplitúdóval jutnak át a rendszeren. Ha a szűrés hatását semlegesíteni szeretnénk, megpróbálhatjuk alkalmazni a konvolúció inverz műveletét, a dekonvolúciót, azonban számolnunk kell azzal, hogy a kimeneten véletlenszerű feszültségingadozás, vagyis zaj jelenik meg. Ha a jel magas frekvenciájú összetevői annyira legyengülnek, hogy a zajszint alá esnek, akkor a kiegyenlítő visszaerősítés már nem az eredeti komponenseket, hanem hozza vissza, hanem a zajt.
Hozzászóláshoz be kell jelentkezni!