Tietoliikenteessä Forward error correction (FEC) on erityinen virheiden havaitsemiseen ja korjaamiseen tarkoitettu koodi. Lähettäjä lisää datan oheen ylimääräisiä, laskennallisesti muodostettuja bittejä tai symboleja — tätä lisäystä kutsutaan redundanssiksi. Kun vastaanotin saa viestin, se voi käyttää redundanssia havaitakseen ja usein myös korjatakseen siirrossa syntyneitä virheitä ilman, että vastaanotin joutuu pyytämään tietopakettien uudelleenlähetystä.

Miten FEC toimii lyhyesti

FEC-koodit muuntavat koodattavan viestin (esimerkiksi k bittistä dataa) pidemmäksi koodisymbolijonoksi (n symbolia). Koodin suhde eli code rate on yleensä ilmaistu muodossa k/n. Suurempi redundanssi (pienempi k/n) tarkoittaa parempaa virheenkorjauskykyä mutta myös suurempaa kaistanleveyden käyttöä.

Tyypilliset FEC-tekniikat

  • Pariteettibitit ja yksinkertaiset toistojärjestelmät — perusratkaisuilla kuten yhden bitin pariteetti tai toisto (esim. lähetetään sama bitti kolme kertaa) voidaan havaita ja rajoitetusti korjata virheitä.
  • Hamming-koodit — pystyvät korjaamaan yksittäisiä bittivirheitä blokkikoodeissa.
  • Reed–Solomon — paljon käytetty symbolipohjainen blokkikoodi (esim. CD-, DVD- ja QR-koodit sekä monissa tallennus- ja lähetysjärjestelmissä). Hyvä erityisesti pulssimaisiin tai ryppymäisiin (burst) virheisiin.
  • Konvoluutiokoodit ja Viterbi-dekoodaus — soveltuvat jatkuviin virtauksiin; Viterbi-algoritmi tekee tehokkaan kovapäätöksisen dekoodauksen.
  • Turbo-koodit ja LDPC (Low-Density Parity-Check) — nykyaikaisia tehokkaita koodityyppejä, joita käytetään mobiiliverkoissa (esim. 4G/5G), satelliittilinkeissä ja optisissa verkoissa. Ne tarjoavat hyvin lähelle Shannonin rajaa ulottuvaa suorituskykyä.

Decodauksen käytännön näkökulmia

  • Hard decision vs soft decision -dekoodaus: pehmeä päätelmä hyödyntää vastaanottimen luottamusarvoja (esim. signaalin voimakkuus) ja parantaa suorituskykyä verrattuna pelkkään bittitasoiseen päätökseen.
  • Viritäminen: dekoodaus voi olla laskennallisesti raskasta (erityisesti LDPC- ja Turbo-koodit vaativat iteratiivisia algoritmeja), joten laitteiston rajat ja viivevaatimukset vaikuttavat valintaan.
  • Interleaving (sekoitus) auttaa hajottamaan ryppymäisiä virheitä niin, että FEC-koodi voi korjata ne tehokkaammin.

Parametrit ja suorituskykymittarit

  • Koodin pituus n ja informaation pituus k — koodin pääteho riippuu näistä.
  • Hamming-etäisyys d kertoo pienimmän erotettavien koodisanojen bittimäärän; korjauskyky t = floor((d-1)/2).
  • Bit error rate (BER) ja frame error rate (FER) ovat yleisiä suorituskyvyn mittareita.
  • Kaistanleveyden ja viiveen kompromissi: enemmän redundanssia vähentää virheitä, mutta kasvattaa kapasiteetin tarvetta ja mahdollisesti latencya.

Käyttökohteet

  • Reaaliaikaiset sovellukset kuten ääni- ja videostreamaus — FEC vähentää uudelleenlähetystarvetta ja parantaa laatua huonossa verkossa.
  • Satelliitti- ja avaruusviestintä — pitkät viiveet tekevät ARQ-pohjaisista uudelleenlähetyksistä kalliita, joten FEC on välttämätön.
  • Tallennusjärjestelmät (kovalevyt, SSD, optiset levyt) — datan eheyden varmistaminen.
  • Langattomat verkot ja mobiiliteknologiat — mm. Wi‑Fi, LTE ja 5G hyödyntävät erilaisia FEC-menetelmiä signaalin luotettavuuden parantamiseksi.
  • Koodaus QR-koodeissa, DVB-lähetyksissä ja digitaalisessa televisiossa.

FEC vs ARQ — kumpi valita?

FEC korjaa virheitä ilman paluuviestejä (no retransmissions), mikä sopii hyvin järjestelmiin joissa viiveet tai paketinhäviöt eivät salli uudelleenlähetyksiä. ARQ (Automatic Repeat reQuest) pyytää puuttuvat paketit uudelleen, mikä voi olla tehokkaampaa, kun kanava on virhealtis mutta viive ei ole kriittinen. Usein käytetään yhdistelmää (hybrid ARQ), jossa FEC:llä korjataan useimmat virheet ja ARQ hoitaa jäljelle jääneet epäonnistuneet paketit.

Yhteenveto

FEC on keskeinen tekniikka tiedonsiirron ja tallennuksen luotettavuuden parantamiseksi. Se lisää redundanssia lähetettävään dataan, jolloin vastaanotin voi havaita ja useimmiten myös korjata virheitä ilman uudelleenlähetystä. Oikean FEC-ratkaisun valinta riippuu sovelluksen vaatimuksista: viiveestä, laskentaresursseista, kanavan virheterminologiasta ja kaistanleveyden saatavuudesta.