noll
Paritetsbit

Paritetsbit

3 mars 2023

Fel i binär kommunikation avser situationer där det mottagna meddelandet skiljer sig från det meddelande som var avsett att sändas. Detta kan inträffa av olika skäl, till exempel dålig signalintegritet, brus eller systemfel. Felen kan leda till felaktiga tolkningar av meddelandet och påverka noggrannheten och tillförlitligheten i en digital signalkommunikation. En lösning för att minska binära kommunikationsfel är att använda en paritetsbit.

Exempel på dataöverföringsfel orsakat av brus.


Vad är paritetsbit?

En paritetsbit, även kallad paritetskontroll, är en extra bit som läggs till en uppsättning binära databitar i syfte att upptäcka fel under dataöverföring. Paritetsbiten används för att kontrollera om antalet 1:or i en datasträng är jämnt eller udda, vilket resulterar i två typer: jämn paritetsbit och udda paritetsbit.

Binärfel

Ett fel i binär kommunikation uppstår när en 1 oväntat förvandlas till en 0 eller vice versa.

Läs mer: Standard för seriell datakommunikation RS232

Jämn paritet

I ett jämn paritetssystem sätts paritetsbiten till antingen 1 eller 0 så att det totala antalet 1-bitar, inklusive paritetsbiten, blir ett jämnt tal.

Hur man beräknar jämn paritet

Om antalet 1:or i datasträngen är udda, sätts paritetsbiten till 1 för att säkerställa att det totala antalet 1:or, inklusive paritetsbiten, är jämnt. Om antalet 1:or i datasträngen redan är jämnt, sätts paritetsbiten till 0.

Udda paritet

I ett udda paritetssystem sätts paritetsbiten till antingen 1 eller 0 så att det totala antalet 1-bitar, inklusive paritetsbiten, blir ett udda tal.

Hur man beräknar udda paritet

Om antalet 1:or i datasträngen är jämnt, sätts paritetsbiten till 1 för att säkerställa att det totala antalet 1:or, inklusive paritetsbiten, är udda. Om antalet 1:or i datasträngen redan är udda, sätts paritetsbiten till 0.

Exempel på paritetsbit

Datasträng på 7 bitar Antal 1-bitar 8 bitar inklusive paritetsbit
jämn paritet udda paritet
0000000 0 00000000 00000001
1100001 3 11000011 11000010
1100101 4 11001010 11001011
1111111 7 11111111 11111110

Paritetsbitkontroll används vanligtvis vid överföring av ASCII-tecken, där den åttonde biten reserveras som paritetsbit medan de återstående sju bitarna används för att koda tecknet.


Hur paritetsbit fungerar

Innan data överförs måste både sändaren och mottagaren komma överens om udda eller jämn paritet. Innan varje datapaket (bitsträng) skickas beräknar avsändaren dess paritetsbit (0 eller 1) för att säkerställa att den stämmer överens med den överenskomna pariteten (udda eller jämn). Vid mottagandet kontrollerar mottagaren pariteten för den mottagna datan mot den förväntade pariteten. Om de inte stämmer överens indikerar det ett fel, och datan kan kasseras eller korrigeras genom att begära en ny överföring.

Paritetsbiten används endast för att upptäcka fel, men den saknar förmågan att korrigera eventuella fel eftersom den inte kan identifiera den specifika skadade biten. Det enda alternativet för att åtgärda fel är därför att kasta hela datasträngen och begära en ny överföring från avsändaren.

Paritetsbitposition

Det finns ingen fast regel för paritetsbitens position, men enligt konventionen läggs den vanligtvis till i slutet av det binära strängmeddelandet.


Felupptäckt

Paritetskontroll hos mottagaren kan upptäcka fel genom att jämföra den mottagna signalens paritet med den förväntade pariteten. Om det finns en avvikelse kan mottagaren begära en ny sändning från sändaren.

Om antalet 1:or i en binär datasträng är jämnt eller udda kan beräknas med hjälp av modulo-operatorn. Modulo, eller "mod", är en matematisk operation som beräknar resten när ett heltal divideras med ett annat. Modulo-operationen representeras med symbolen %.

Med hjälp av Modulo kan vi avgöra om ett tal är jämnt om det kan delas med 2 utan rest. Om ett tal däremot ger en rest när det delas med 2 betraktas det som udda.

Följande C-program exempel illustrerar processen för att kontrollera paritet med hjälp av modulo:

#include 
int main() {
    unsigned char byte;
    int num_ones = 0;
    printf("Enter a byte (in decimal): ");
    scanf("%hhu", &byte);
    // Count the number of 1s in the byte
    for (int i = 0; i < 8; i++) {
        if ((byte >> i) & 1) {
            num_ones++;
        }
    }
    // Detect parity with mod 2 and print the parity type. 
    if (num_ones % 2 == 0) { //
        printf("Even parity\n");
    } else {
        printf("Odd parity\n");
    }
    return 0;
}

Programmet startar med att läsa in en byte från användaren. Därefter använder det en loop för att räkna antalet 1-bitar i byten. Detta görs genom att flytta byten åt höger för varje bitposition (0 till 7) och kontrollera om den resulterande biten är 1. Om så är fallet ökas antalet 1-bitar. Slutligen kontrollerar programmet om antalet 1-bitar är jämnt eller udda och skriver ut lämpligt meddelande.

Observera att programmet använder ett osignerat tecken för att lagra byten, vilket är ett 8-bitars heltal som kan innehålla värden mellan 0 och 255. Formatangivelsen %hhu används med scanf() för att läsa in ett bytevärde från användaren.


Hur man lägger till en paritetsbit

Låt oss titta på ett exempel där vi behöver överföra datasträngen 1100101. Först räknar vi antalet 1:or i datasträngen och avgör om antalet är jämnt eller udda med hjälp av mod-operatorn med 2 som divisor:

1100101
(1+1+0+0+1+0+1) mod 2
4 mod 2 = 0

Eftersom 4 dividerat med 2 inte ger någon rest, blir resultatet 0, vilket indikerar att vi har ett jämnt antal 1:or. Om vi har kommit överens om jämn paritet, lägger vi till en "0" som paritetsbit i slutet av meddelandet, vilket ger 11001010, som nu kan skickas. Alternativt, om vi har kommit överens om udda paritet, vänder vi på paritetsbiten och lägger till en "1" istället, vilket resulterar i 11001011 som det slutliga meddelandet som kan sändas.


Paritetsbitens användningsområden

  • Felupptäckt: En av de främsta användningsområdena för paritetsbitar är att upptäcka fel under dataöverföring.
  • Minneslagring: Paritetsbitar används också i datorminnessystem för att upptäcka fel när data lagras i minnet. När data lagras i minnet finns det alltid en risk för att fel uppstår på grund av olika faktorer, såsom elektromagnetisk störning, hårdvarufel etc.
  • RAID-system: Paritetsbit används även i Redundant Array of Inexpensive Disks (RAID). RAID kan även kallas för "Redundant Array of Independent Drives". RAID-system använder flera diskar för att lagra data redundant och skydda mot diskfel. De använder paritet för feltolerans.

Läs mer: EMI (elektromagnetisk störning)


Slutsats

Sammanfattningsvis är paritetsbiten en enkel men effektiv mekanism för felupptäckt som kan bidra till att säkerställa noggrannheten vid lagring och dataöverföring. Även om paritetsbitar inte är helt tillförlitliga och endast kan upptäcka vissa fel, är de fortfarande användbara för många tillämpningar inom binär datakommunikation.