Advertisement
bitwise_gamgee

Untitled

Jun 27th, 2023
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.41 KB | None | 0 0
  1. #include <Arduino.h>
  2.  
  3. // Define the Hamming(7, 4) lookup table
  4. const byte hammingTable[16] = {
  5.   0b0000000, 0b0000111, 0b0001011, 0b0001100,
  6.   0b0010101, 0b0010010, 0b0011110, 0b0011001,
  7.   0b0100111, 0b0100000, 0b0101100, 0b0101011,
  8.   0b0110010, 0b0110101, 0b0111001, 0b0111110
  9. };
  10.  
  11. // Function to encode a 4-bit message using Hamming(7, 4) code
  12. byte hammingEncode(byte message) {
  13.   byte encodedMessage = 0;
  14.  
  15.   // Set the data bits in the encoded message
  16.   encodedMessage |= (message & 0x0F);
  17.  
  18.   // Calculate and set the parity bits
  19.   encodedMessage |= ((encodedMessage & 0x01) ^ ((encodedMessage >> 1) & 0x01) ^ ((encodedMessage >> 2) & 0x01)) << 4;
  20.   encodedMessage |= (((encodedMessage >> 1) & 0x01) ^ ((encodedMessage >> 3) & 0x01) ^ ((encodedMessage >> 4) & 0x01)) << 5;
  21.   encodedMessage |= (((encodedMessage >> 2) & 0x01) ^ ((encodedMessage >> 3) & 0x01) ^ ((encodedMessage >> 5) & 0x01)) << 6;
  22.  
  23.   return encodedMessage;
  24. }
  25.  
  26. // Function to decode a 7-bit received message using Hamming(7, 4) code
  27. byte hammingDecode(byte receivedMessage) {
  28.   byte syndrome = 0;
  29.  
  30.   // Calculate the syndrome bits
  31.   syndrome |= (((receivedMessage >> 1) & 0x01) ^ ((receivedMessage >> 3) & 0x01) ^ ((receivedMessage >> 5) & 0x01) ^ ((receivedMessage >> 7) & 0x01)) << 2;
  32.   syndrome |= (((receivedMessage >> 2) & 0x01) ^ ((receivedMessage >> 3) & 0x01) ^ ((receivedMessage >> 6) & 0x01) ^ ((receivedMessage >> 7) & 0x01)) << 1;
  33.   syndrome |= (((receivedMessage >> 4) & 0x01) ^ ((receivedMessage >> 5) & 0x01) ^ ((receivedMessage >> 6) & 0x01) ^ ((receivedMessage >> 7) & 0x01));
  34.  
  35.   // Check if the received message is valid
  36.   if (syndrome != 0) {
  37.     // Correct the bit with the error
  38.     receivedMessage ^= (1 << (7 - syndrome));
  39.   }
  40.  
  41.   // Extract and return the decoded 4-bit message
  42.   return receivedMessage & 0x0F;
  43. }
  44.  
  45. void setup() {
  46.   Serial.begin(9600);
  47.  
  48.   byte originalMessage = 0b1010;
  49.   byte encodedMessage = hammingEncode(originalMessage);
  50.  
  51.   Serial.print("Original Message: ");
  52.   Serial.println(originalMessage, BIN);
  53.  
  54.   Serial.print("Encoded Message: ");
  55.   Serial.println(encodedMessage, BIN);
  56.  
  57.   byte receivedMessage = encodedMessage;
  58.   byte decodedMessage = hammingDecode(receivedMessage);
  59.  
  60.   Serial.print("Received Message: ");
  61.   Serial.println(receivedMessage, BIN);
  62.  
  63.   Serial.print("Decoded Message: ");
  64.   Serial.println(decodedMessage, BIN);
  65. }
  66.  
  67. void loop() {
  68.   // Empty loop
  69. }
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement