Foutdetectie en -correctie
Toepassingen die een lage latentie vereisen (zoals telefoongesprekken) kunnen geen gebruik maken van automatische herhaalde aanvraag (ARQ); zij moeten gebruik maken van voorwaartse foutcorrectie (FEC). Tegen de tijd dat een ARQ-systeem een fout ontdekt en opnieuw uitzendt, komen de opnieuw verzonden gegevens te laat aan om nog bruikbaar te zijn.
Toepassingen waarbij de zender de informatie onmiddellijk vergeet zodra deze is verzonden (zoals de meeste televisiecamera’s) kunnen geen ARQ gebruiken; zij moeten FEC gebruiken omdat bij een fout de oorspronkelijke gegevens niet meer beschikbaar zijn.
Toepassingen die ARQ gebruiken, moeten een retourkanaal hebben; toepassingen zonder retourkanaal kunnen geen ARQ gebruiken.
Toepassingen die extreem lage foutpercentages vereisen (zoals digitale geldoverdrachten) moeten ARQ gebruiken vanwege de mogelijkheid van niet te corrigeren fouten met FEC.
Betrouwbaarheid en inspectietechniek maken ook gebruik van de theorie van foutcorrigerende codes.
InternetEdit
In een typische TCP/IP-stack wordt foutcontrole op meerdere niveaus uitgevoerd:
- Elk Ethernet-frame maakt gebruik van CRC-32-foutdetectie. Frames met gedetecteerde fouten worden door de ontvangerhardware weggegooid.
- De IPv4-header bevat een controlesom die de inhoud van de header beschermt. Pakketten met onjuiste checksums worden in het netwerk of bij de ontvanger genegeerd.
- De checksum is uit de IPv6-header weggelaten om de verwerkingskosten bij de netwerkroutering te minimaliseren en omdat wordt aangenomen dat de huidige link layer-technologie voldoende foutdetectie biedt (zie ook RFC 3819).
- UDP heeft een optionele checksum die de payload en de adresseringsinformatie in de UDP- en IP-headers omvat. Pakketten met onjuiste checksums worden door de netwerk stack weggegooid. De controlesom is optioneel onder IPv4, en vereist onder IPv6. Indien weggelaten, wordt aangenomen dat de data-link laag het gewenste niveau van foutbescherming biedt.
- TCP biedt een controlesom voor het beschermen van de payload en adresseringsinformatie in de TCP en IP headers. Pakketten met onjuiste checksums worden door de netwerk-stack verworpen, en uiteindelijk opnieuw verzonden met ARQ, hetzij expliciet (zoals door triple-ack) of impliciet als gevolg van een time-out.
Telecommunicatie in de diepe ruimteEdit
De ontwikkeling van foutcorrectiecodes was nauw verbonden met de geschiedenis van diep-ruimtemissies als gevolg van de extreme verdunning van het signaalvermogen over interplanetaire afstanden, en de beperkte beschikbaarheid van energie aan boord van ruimtesondes. Terwijl de eerste missies hun gegevens ongecodeerd verstuurden, werd vanaf 1968 digitale foutcorrectie toegepast in de vorm van (suboptimaal gedecodeerde) convolutionele codes en Reed-Muller codes. De Reed-Muller-code was goed geschikt voor de ruis waaraan het ruimtevaartuig werd blootgesteld (ongeveer gelijk aan een belcurve), en werd toegepast op het Mariner-ruimtevaartuig en gebruikt op missies tussen 1969 en 1977.
De Voyager 1- en Voyager 2-missies, die in 1977 van start gingen, waren ontworpen om kleurenbeelden en wetenschappelijke informatie van Jupiter en Saturnus te leveren. Dit resulteerde in hogere coderingseisen, en daarom werden de ruimtevaartuigen ondersteund door (optimaal Viterbi-gecodeerde) convolutiecodes die konden worden samengevoegd met een buitenste Golay (24,12,8) code. De Voyager 2-tuigen ondersteunden bovendien een implementatie van een Reed-Solomon-code. De aaneengeschakelde Reed-Solomon-Viterbi (RSV) code maakte een zeer krachtige foutcorrectie mogelijk, en maakte de lange reis van het ruimtevaartuig naar Uranus en Neptunus mogelijk. Na upgrades van het ECC-systeem in 1989 gebruikten beide toestellen V2 RSV-codering.
Het Raadgevend Comité voor ruimtegegevenssystemen beveelt momenteel aan ten minste foutcorrectiecodes te gebruiken waarvan de prestaties vergelijkbaar zijn met die van de RSV-code van de Voyager 2. Gecombineerde codes raken steeds meer uit de gratie bij ruimtemissies, en worden vervangen door krachtigere codes zoals Turbo-codes of LDPC-codes.
De verschillende soorten diepe ruimte- en orbitale missies die worden uitgevoerd, suggereren dat het zoeken naar een one-size-fits-all foutcorrectiesysteem een blijvend probleem zal zijn. Voor missies dicht bij de aarde is de aard van de ruis in het communicatiekanaal anders dan die welke een ruimtevaartuig op een interplanetaire missie ondervindt. Bovendien wordt het probleem van het corrigeren voor ruis moeilijker naarmate een ruimtevaartuig zich verder van de aarde bevindt.
SatellietomroepEdit
De vraag naar satelliettransponderbandbreedte blijft groeien, gevoed door de wens om televisie (met inbegrip van nieuwe kanalen en hogedefinitietelevisie) en IP-gegevens te leveren. Transponderbeschikbaarheid en bandbreedtebeperkingen hebben deze groei beperkt. De capaciteit van de transponder wordt bepaald door het gekozen modulatieschema en het deel van de capaciteit dat door FEC wordt verbruikt.
GegevensopslagEdit
Error detection and correction codes worden vaak gebruikt om de betrouwbaarheid van gegevensopslagmedia te verbeteren. Een pariteitspoor waarmee single-bit fouten konden worden opgespoord, was aanwezig op de eerste gegevensopslag op magneetband in 1951. De optimale rechthoekige code die wordt gebruikt in gegroepeerde gecodeerde opnametapes detecteert niet alleen single-bit fouten, maar corrigeert deze ook. Sommige bestandsformaten, met name archiefformaten, bevatten een controlesom (meestal CRC32) om corruptie en truncatie op te sporen en kunnen redundantie of pariteitsbestanden gebruiken om gedeelten van beschadigde gegevens te herstellen. In compact discs worden Reed-Solomon-codes gebruikt om door krassen veroorzaakte fouten te corrigeren.
Moderne harde schijven gebruiken CRC-codes om kleine fouten bij het lezen van sectoren te detecteren en Reed-Solomon-codes om die fouten te corrigeren, en om gegevens van sectoren die “slecht zijn geworden” te herstellen en die gegevens in de reservesectoren op te slaan. RAID-systemen maken gebruik van verschillende foutcorrectietechnieken om fouten te corrigeren wanneer een harde schijf volledig uitvalt. Bestandssystemen zoals ZFS of Btrfs, alsook sommige RAID-implementaties, ondersteunen data scrubbing en resilvering, wat toelaat om slechte blokken te detecteren en (hopelijk) te herstellen voor ze gebruikt worden. De herstelde gegevens kunnen worden herschreven naar exact dezelfde fysieke locatie, naar reserveblokken elders op hetzelfde stuk hardware, of de gegevens kunnen worden herschreven op vervangende hardware.
Fout-corrigerend geheugenEdit
DRAM-geheugen kan een sterkere bescherming bieden tegen zachte fouten door te vertrouwen op fout-corrigerende codes. Dergelijk foutcorrigerend geheugen, bekend als ECC of EDAC-beschermd geheugen, is bijzonder wenselijk voor missiekritische toepassingen, zoals wetenschappelijke computerverwerking, financiële, medische, enz. alsmede deep-space toepassingen vanwege de verhoogde straling in de ruimte.
Error-correcting memory controllers gebruiken traditioneel Hamming codes, hoewel sommige drievoudige modulaire redundantie gebruiken.
Interleaving maakt het mogelijk om het effect van een enkele kosmische straal die mogelijk meerdere fysiek naburige bits verstoort over meerdere woorden te verdelen door naburige bits aan verschillende woorden te koppelen. Zolang een single event upset (SEU) de foutdrempel niet overschrijdt (b.v. een enkele fout) in een bepaald woord tussen de toegangen, kan het worden gecorrigeerd (b.v. door een single-bit error-correcting code), en de illusie van een foutvrij geheugensysteem kan worden gehandhaafd.
Naast de hardware die functies biedt die nodig zijn om ECC-geheugen te laten werken, bevatten besturingssystemen gewoonlijk gerelateerde rapportagefaciliteiten die worden gebruikt om meldingen te geven wanneer zachte fouten transparant worden hersteld. Een toenemend aantal soft errors kan erop wijzen dat een DIMM-module aan vervanging toe is, en dergelijke feedback-informatie zou niet gemakkelijk beschikbaar zijn zonder de gerelateerde rapportagemogelijkheden. Een voorbeeld is het EDAC-subsysteem van de Linux-kernel (voorheen bekend als Bluesmoke), dat de gegevens verzamelt van componenten in een computersysteem die op fouten controleren; naast het verzamelen en terugrapporteren van de gebeurtenissen met betrekking tot ECC-geheugen, ondersteunt het ook andere checksumming-fouten, waaronder fouten die worden gedetecteerd op de PCI-bus.
Een paar systemen ondersteunen ook memory scrubbing.