SDR algoritmus: keverés

Innen: HamWiki
Ugrás a navigációhoz Ugrás a kereséshez

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:

// 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 );

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

out.i = in.i * osc.i - in.q * osc.q;
out.q = in.q * osc.i + in.i * osc.q;

Az oszcillátor minden minta esetén más fázisszöget mutat, hiszen f_osc frekvenciával forog a komplex fazorja. Ehhez sem érdemes a szögfüggvények Taylor sorához nyúlni, helyette inkább szorzóforgatást érdemes processzor esetén alkalmazni.

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;

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.