Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- // Define the Hamming(7, 4) lookup table
- const byte hammingTable[16] = {
- 0b0000000, 0b0000111, 0b0001011, 0b0001100,
- 0b0010101, 0b0010010, 0b0011110, 0b0011001,
- 0b0100111, 0b0100000, 0b0101100, 0b0101011,
- 0b0110010, 0b0110101, 0b0111001, 0b0111110
- };
- // Function to encode a 4-bit message using Hamming(7, 4) code
- byte hammingEncode(byte message) {
- byte encodedMessage = 0;
- // Set the data bits in the encoded message
- encodedMessage |= (message & 0x0F);
- // Calculate and set the parity bits
- encodedMessage |= ((encodedMessage & 0x01) ^ ((encodedMessage >> 1) & 0x01) ^ ((encodedMessage >> 2) & 0x01)) << 4;
- encodedMessage |= (((encodedMessage >> 1) & 0x01) ^ ((encodedMessage >> 3) & 0x01) ^ ((encodedMessage >> 4) & 0x01)) << 5;
- encodedMessage |= (((encodedMessage >> 2) & 0x01) ^ ((encodedMessage >> 3) & 0x01) ^ ((encodedMessage >> 5) & 0x01)) << 6;
- return encodedMessage;
- }
- // Function to decode a 7-bit received message using Hamming(7, 4) code
- byte hammingDecode(byte receivedMessage) {
- byte syndrome = 0;
- // Calculate the syndrome bits
- syndrome |= (((receivedMessage >> 1) & 0x01) ^ ((receivedMessage >> 3) & 0x01) ^ ((receivedMessage >> 5) & 0x01) ^ ((receivedMessage >> 7) & 0x01)) << 2;
- syndrome |= (((receivedMessage >> 2) & 0x01) ^ ((receivedMessage >> 3) & 0x01) ^ ((receivedMessage >> 6) & 0x01) ^ ((receivedMessage >> 7) & 0x01)) << 1;
- syndrome |= (((receivedMessage >> 4) & 0x01) ^ ((receivedMessage >> 5) & 0x01) ^ ((receivedMessage >> 6) & 0x01) ^ ((receivedMessage >> 7) & 0x01));
- // Check if the received message is valid
- if (syndrome != 0) {
- // Correct the bit with the error
- receivedMessage ^= (1 << (7 - syndrome));
- }
- // Extract and return the decoded 4-bit message
- return receivedMessage & 0x0F;
- }
- void setup() {
- Serial.begin(9600);
- byte originalMessage = 0b1010;
- byte encodedMessage = hammingEncode(originalMessage);
- Serial.print("Original Message: ");
- Serial.println(originalMessage, BIN);
- Serial.print("Encoded Message: ");
- Serial.println(encodedMessage, BIN);
- byte receivedMessage = encodedMessage;
- byte decodedMessage = hammingDecode(receivedMessage);
- Serial.print("Received Message: ");
- Serial.println(receivedMessage, BIN);
- Serial.print("Decoded Message: ");
- Serial.println(decodedMessage, BIN);
- }
- void loop() {
- // Empty loop
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement