„SDR algoritmus: keverés” változatai közötti eltérés

Innen: HamWiki
Ugrás a navigációhoz Ugrás a kereséshez
(Kezdet+kategória)
 
a (bevezető javítása)
1. sor: 1. sor:
A szoftverrádiónál a digitalizált jelet az analóghoz hasonlóan gyaktan keverjük a digitális térben.
+
A szoftverrádiónál a digitalizált jelet az analóghoz hasonlóan gyakran keverjük a digitális térben. Szorzókeverés alatt értjük ez esetben azt a műveletet, amelynek célja, hogy a frekvenciatartományban eltoljuk a jelet.
  
 
== Gyors keverés processzorral ==
 
== Gyors keverés processzorral ==

A lap 2016. április 10., 09:16-kori változata

A szoftverrádiónál a digitalizált jelet az analóghoz hasonlóan gyakran keverjük a digitális térben. Szorzókeverés alatt értjük ez esetben azt a műveletet, amelynek célja, hogy a frekvenciatartományban eltoljuk a jelet.

Gyors keverés processzorral

A sin() és cos() függvények lassan számolhatóak, főleg ha nincs ezt gyorsító hardveres számoló a processzorban. Ezért próbáljuk meg kihagyni az állandó számítását. Nézzük az alábbi összefüggéseket:

<source lang=C> // origp: eredeti fázisszög // diffp: fáziseltérés

x_uj = amplitudo * cos ( origp + diffp ) = amplitudo * (cos origp * cos diffp - sin origp * sin diffp ); y_uj = amplitudo * sin ( origp + diffp ) = amplitudo * (sin origp * cos diffp + cos origp * sin diffp ); </source>

A fenti összefüggést tovább gondolva a 0 fokos i és a 90 fokos q jellel a keverés:

<source lang=C> out.i = in.i * osc.i - in.q * osc.q; out.q = in.q * osc.i + in.i * osc.q; </source>

Az oszcillátor minden minta esetén más fázisszöget mutat, hiszen f_osc frekvenciával forog a komplex fazorja. Ezt se sin(ujfazis) és sin(ujfazis) módszerrel Taylor-sorral számoljuk, hanem ugyanúgy szorzóforgatással.

<source lang=C> osc_uj.i = osc_orig.i * osc_faziselteres.i - osc_orig.q * osc_faziselteres.q; osc_uj.q = osc_orig.q * osc_faziselteres.i + osc_orig.i * osc_faziselteres.q; </source>

ahol a faziselteres.i csak a frekvenciaváltásnál változik, így csak ekkor számolandó újra mint cos(2*pi*frekvencia/mintavételitempó), a faziselteres.q pedig a fázis szinuszaként.

Megjegyzés: az oszcillátornál az akkumulálódó hibák elkerülése miatt double pontosságú változó javasolt.

Gyors keverés FPGA-val

FPGA esetén egy másik megoldással, a Cordic algoritmussal lehet nagyon hatékony keverést elérni. A Cordic algoritmus shiftelésen és összeadáson alapuló közelítő módszer, amely meglepően hatékony. További előnye, hogy az FPGA-ban elkerüli a sokkal költségesebben megvalósító szorzást.

Bővebben az algoritmusról:

Fontos megjegyezni, hogy a Cordic keverésnél használt bemenetei:

  • I jel
  • Q jel
  • fázisszög, amely minden új mintára tovább lesz léptetve 2*pi*frekvencia/mintavételitempó lépéssel.