Summary: Channel encoding inserts additional information into a transmitted bit stream to facilitate error detection and error correction at the receiver. Block coding breaks up a bit stream into words of length k bits and appends check bits to form a codeword of length n bits. A corresponding channel decoder examines the complete codeword, and detects and even corrects certain types of erroneous bits caused by the channel. In the prerequisite project "Hamming Block Code Channel Encoder" you developed a channel encoder using a special class of block code called a Hamming code. In this project, develop the companion channel decoder, and then evaluate the performance of the complete encoder/decoder system.
Note: You are viewing an old version of this document. The latest version is available here.
![]() |
This module refers to LabVIEW, a software development environment that features a graphical programming language. Please see the LabVIEW QuickStart Guide module for tutorials and documentation that will help you: |
| • Apply LabVIEW to Audio Signal Processing | |
| • Get started with LabVIEW | |
| • Obtain a fully-functional evaluation edition of LabVIEW |
Channel encoding inserts additional information into a transmitted bit stream to facilitate error detection and error correction at the receiver. Block coding breaks up a bit stream into words of length k bits and appends check bits to form a codeword of length n bits. A corresponding channel decoder examines the complete codeword, and detects and even corrects certain types of erroneous bits caused by the channel.
In the prerequisite project Hamming Block Code Channel Encoder you developed a channel encoder using a special class of block code called a Hamming code. In this project, develop the companion channel decoder, and then evaluate the performance of the complete encoder/decoder system.
Refer to the following textbooks for additional background on the project activities of this module; see the "References" section below for publication details:
If you have not done so already, please complete the prerequisite module Hamming Block Code Channel Encoder. If you are relatively new to LabVIEW, consider taking the course LabVIEW Techniques for Audio Signal Processing which provides the foundation you need to complete this project activity, including: block diagram editing techniques, essential programming structures, subVIs, arrays, and audio.
Error control coding describes a class of techniques that prepare a digital message bitstream to pass through a noisy channel so that the receiver can detect and in some cases correct transmission errors. The prerequisite project Hamming Block Code Channel Encoder describes how to create a specific type of channel encoder based on the (n,k) Hamming code. The codeword length "n" and message length "k" are specific values calculated from the user-defined number of checkbits "q". As discussed in the prerequisite module, the code rate of the Hamming code approaches 1 (100% efficiency) as "q" increases, but the minimum Hamming distance "dmin" is fixed at 3. Therefore, the Hamming code can detect up to two bit errors in a received codeword, and can correct up to one bit error.
The channel decoder, a subsystem of the receiver, serves as a complement to the channel encoder in the transmitter. The channel decoder examines each received codeword, indicates detectable errors, fixes correctable errors, and extracts the message. Not all types of errors are detectable nor correctable, therefore the channel decoder can certainly emit garbled messages. Fortunately the channel noise must be rather severe before this becomes a problem.
The channel decoder developed in this project is called a table lookup syndrome decoder. View the Figure 1 screencast video to learn how to calculate the syndrome of a codeword, how to develop a lookup table of most-likely error patterns indexed by syndrome value, and how to use these results as the basic components of a channel decoder capable of detecting and correcting some types of error patterns.
Work through the syndrome calculation process by hand to lay a good foundation for developing a correct and understandable computer implementation. Write up this work on a separate page.
The end of the Figure 1 screencast video presents an example of a specific Hamming code generator matrix "G", a specific message vector "M" and associated codeword vector "X", and three received versions of the same transmitted codeword with varying severity of bit errors.
Build the subVIs listed below. You may already have some of these available from previous projects.
Demonstrate that each of these subVIs works properly before continuing to the next part.
Use your top-level application VI from the prerequisite channel encoder project as a starting point for this project.
Review again the background theory presented earlier for the Hamming block code channel decoder, then extend the top-level application VI to decode the output of the channel. Follow the block diagram described near the end of the Figure 1 screencast video.
Display Boolean array front-panel indicators for the following values:
Replace the random number generator in the transmit section with the text data source util_BitstreamFromText.vi. Use the companion subVI util_BitstreamToText.vi to display the receiver output. Experiment with short messages and long messages, making sure that the intermediate Boolean displays make sense.
Experiment with intelligibility in the received message as a function of bit error rate (BER). Determine specific BER values you associate with the following qualitative labels: excellent, good, barely acceptable, and unintelligible.