SDR algoritmus: keverés

Innen: HamWiki
A lap korábbi változatát látod, amilyen HG2ECZ (vitalap | közreműködések) 2016. április 10., 09:19-kor történt szerkesztése után volt.
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
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:

<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. Ehhez sem érdemes a szögfüggvények Taylor sorához nyúlni, helyette inkább szorzóforgatást érdemes processzor esetén alkalmazni.

<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.