Digitális jelfeldolgozó #1

Nem szeretném ezt a részt túlságosan hosszúra ereszteni, de úgy gondolom, hogy mindenképpen írnom kellene pár sor felvezetőt.

Rólam

A második évemet csinálom a BME-n és úgy gondoltam, hogy csinálni is kéne valamit azzal a sok mindennel, amit megmutattak.

A SEM-ben jelenleg ez az újoncprojektem. Tudom, hogy bármikor vehetnék egy DSP-t, letölthetnék egy .hex fájlt és már kész is lenne a digitális jelfeldolgozó, amit kirakhatnék a polcra mondván: “Ez jó mulatság, férfi munka volt!”

Ezzel szemben én szeretném körbejárni a projektet a tőlem telhető legjobb módon, hiszen nem az eszköznek fogom később hasznát venni, hanem azoknak a pillanatoknak, amikor problémába ütköztem és meg kellett azt oldanom több napos utánajárás segítségével.

Ebben a cikksorozatban naplószerűen szeretném megosztani a jelfeldolgozó fejlesztése közben átélt élményeimet. Előre vetítem, hogy az utánajárás egy töredékét a cikk megírásáig végeztem el, de az oroszlán része még hátra van a projektnek.

Egy pár szót az eszközről

Az alapgondolat az volt, hogy “bejön” a hasznos jel (mondjuk egy zenei hang) és én kicsit megbütykölöm, majd az így kapott jelet továbbítom. Első megközelítésben a színezetét szeretném vizsgálni és módosítani a bejövő jelnek. Gondolhatunk egy equalizerre, amit elég részletesen tudok szabályozni az erre a célra elkészített számítógépes programmal. Lehetne ez a program a Matlab is, de egy kicsit mélyebb ismeretekre vágyva úgy döntöttem írok egyet erre a célra.

Egyszerű áttekintésben a feladat, hogy a beérkező analóg jelet, (mostantól \(x_{C}(t)\)-vel jelölöm) digitalizáljuk és a kapott adatokat (mostantól \(x_{D}[k]\)-val jelölöm) továbbítjuk a számítógépes szoftver felé. Az ábrázolja, módosítja, majd visszaküldi az eszközre, ami ezek után újra analóg jelet állít elő belőle.

Mi köze az adatsornak a valósághoz?

Az első probléma amibe beleütközünk, hogy nem közvetlenül a valós jellel dolgozunk, hanem annak egy átalakítottjával. Tudnunk kell, hogy az átalakításnak milyen hatásai vannak a vizsgálatainkra. Ehhez az átalakítási folyamatot kell megismerünk egy kicsit részletesebben.

Kicsit alapozzunk!

Megpróbálom a lehető legkevesebb matematikával, dióhéjban összefoglalni azt, amire szükségünk lesz a folyamat áttekintéséhez. Az implementáláshoz szükséges ismereteket, majd egy későbbi részben írom le.

Egy egyszerű megközelítése a digitalizálási folyamatnak, hogy bizonyos időközönként feljegyezzük a bemeneten lévő jel értékét. Ezt a folyamatot mintavételezésnek nevezzük, azt az időtartamot, ami két minta között eltelik, mintavételi időnek nevezzük és \(T_{s}\)-sel jelöljük. A későbbiekben ennek a reciproka a mintavételi frekvencia (\(f_{s}\)), illetve az egyszerűség kedvéért a mintavételi körfrekvencia (\(\omega_{s}=2\pi f_{s}\)). A két mennyiség egy skálázásban tér el egymástól, de könnyebb használni a körfrekvenciát.

A digitalizálás egy másik lépése, hogy a nem jegyzünk fel akármekkora értéket. Előre meghatározott értékeket írunk csak fel, és amikor a bemeneten a mintavétel pillanatában nincs az általunk meghatározott értékek egyike sem, akkor a legközelebbi értéket írjuk fel. Ez a folyamat a kvantálás. Az előbbi miatt adódik egy kvantálási hiba (kvantálási zaj).

Madártávlatból tehát felosztjuk a függőleges és a vízszintes tengelyt. Amiről érdemesebb beszélni részletesebben az a mintavételezés. Amivel most nem fogunk foglalkozni az az, hogy ez időtartományban hogyan is néz ki?

dsp_article1_pic1

Egy darabig írogatjuk a bemenetre érkező adatokat, majd amikor összejött elég \(N\) darab, akkor már tudunk vele valamit kezdeni. Mint később látni fogjuk jobban járunk, ha az a bizonyos \(N\) szám kettőnek hatványa.

Ha a hangszínt is meg szeretnénk változtatni, akkor nem elegendő az időtartománybeli vizsgálat. Az időfüggvény a Fourier-transzformáció segítségével frekvenciafüggvénnyé alakítható. A frekvenciafüggvény a jel spektruma (a továbbiakban nem foglalkozunk a fázisspektrummal, csak az amplitúdóspektrummal). Ezzel megkaphatjuk, hogy a jelben az adott frekvenciák milyen súllyal vannak jelen. Kicsit nehezebb gondolat, hogy a mintavételezés eredményeként keletkezett adatsorban milyen frekvenciasúlyokról beszélünk. A diszkrét idejű jelek esetében a spektrum az adatsorban előforduló periodicitásoknak a frekvenciáját mutatja meg.

Mivel mi az adatsor spektrumával tudunk dolgozni, ezért jó lenne valamilyen kapcsolatot keresni a jel és az adatsor spektruma között.

Legyen a mintavételezési frekvencia \(f_{s}=\frac{\omega_{s}}{2\pi}=\frac{1}{T_{s}}\) , tehát \(T_{s}\) időközönként nézünk rá a bemenetre. A továbbiakban a diszkrét körfrekvenciát \(\vartheta\)-val fogom jelölni, illetve a frekvencia helyett a körfrekvenciát fogom használni. A bemeneti jel spektruma \(X_{C}(j\omega)=\mathcal{F}\lbrace x_{C}(t)\rbrace\) és az adatsor spektruma \(X_{D}\left(e^{j\vartheta}\right)=\mathcal{F}\lbrace x_{D}[k]\rbrace\). A kettő közötti kapcsolat (egy kis varázslat után):

\(X_{D}\left(e^{j\vartheta}\right)=\frac{1}{T_{s}}\sum_{p=-\infty}^{\infty}X_{C}\left(j\left(\frac{\vartheta}{T_{s}}-p\frac{2\pi}{T_{s}}\right)\right)\)

A diszkrét jelre jellemző, hogy a spektruma \(2\pi\)-vel periodikus, illetve a valós jelek spektruma szimmetrikus a függőleges tengelyre. A fenti képletnek van jelentősége azon túl, hogy eléggé tetszetős. A lényeg, hogy a diszktrét jel spektruma olyan, mint a folytonos jel spektruma csak „szellemképes”. Olyan, mintha fognánk a függőleges tengelyre szimmetrikus spektrumot és beillesztenénk \(\pm\omega_{s},\pm 2\omega_{s},\pm 3\omega_{s}\dots\) körfrekvenciákhoz. Természetesen számunkra a releváns a pozitív körfrekvencia.

dsp_article1_pic2

A fenti ábrából már látszik, hogy ha nem elég nagy frekvenciával vesszünk mintát, akkor a „szellemkép” belecsúszhat a hasznos spektrumba. Gondoljunk meg a következő példát! Tegyük fel, hogy a televízión a szellemkép az eredeti képtől jobbra és balra egy-egy méterrel jelenik meg. Ebben az esetben gond nélkül el tudjuk dönteni, hogy mi zajlik a képben. Ha csökkentem a szellemkép és az eredeti kép közötti távolságot (csökkentem a mintavételi frekvenciát), akkor egy idő után összecsúszik a kettő és nem tudjuk szétválogatni a képeket.

Ezt a jelenséget aliasing-nak nevezzük. Ebből az következik, hogy a jelet mintavételezés előtt meg kell szűrni, hogy elkerüljük a aliasing-ot. Többnyire a zenei spektrumot vizsgáljuk majd, így \(0..22\textrm{kHz}\)-ig kell a jelet szűrni. Arról, hogy ez miként történik, később beszélünk. Ha sikerült megfelelően megszűrni a spektrumot, akkor a Shannon-féle mintavételezési törvény szerint a sávkorlát (\(~22\textrm{kHz}\)) kétszeresével kell mintavételezni.

Kicsit szedjük össze!
(Most szorítkozzunk a pozitív frekvenciákra.)

  • A diszkrét jel spektruma kétszer tartalmazza a folytonos jel spektrumát, ezért csak a felét vizsgáljuk.
  • A diszkrét jel spektrumának a \(0..2\pi\) tartománya periodikusan ismétlődik.
  • A diszkrét jel spektrumát át kell skálázni a mintavételi idővel.
  • A diszkrét jel Fourier-transzformáltját a Fourier-sorával fogjuk közelíteni és a \(p\)-edik Fourier-együtthatóhoz tartozó fizikai frekvencia \(f_{p}=f_{s}\frac{p}{N}\) frekvenciához tartozik.

Mivel mi csak a spektrummal szeretnénk foglalkozni, ezért a transzformációt az eszközünk végzi el és az együtthatókat küldjük csak át a szoftvernek.

A következő részben azt fogjuk körbejárni, hogy a már meglévő időfüggvény mintákból hogyan lesz spektrum.