Communications Blockset | ![]() ![]() |
Puncturing
The Puncture block, in the Sequence Operations sublibrary of the Basic Comm Functions library, carries out the puncturing. The Puncture block periodically removes bits from the encoded bit stream, thereby increasing the code rate.
The puncture pattern is specified by the Puncture vector parameter in the mask. The puncture vector is a binary column vector. A one indicates that the bit in the corresponding position of the input vector is sent to the output vector, while a zero indicates that the bit is removed.
For example, to create a rate 3/4 code from the rate 1/2, constraint length 7 convolutional code, the optimal puncture vector is [1 1 0 1 1 0].'
(where the .'
after the vector indicates the transpose). Bits in positions 1, 2, 4 and 5 are transmitted, while bits in positions 3 and 6 are removed. Now, for every 3 bits of input, the punctured code generates 4 bits of output (as opposed to the 6 bits produced before puncturing). This makes the rate 3/4.
Note In frame-based processing, the length of the puncture vector must divide the length of the input frame. |
In this example, the output from the Bernoulli Binary Generator is a column vector of length 3. Since the rate 1/2 Convolutional Encoder doubles the length of each vector, the input to the Puncture block is a vector of length 6. Therefore, the length of the puncture vector must divide 6.
![]() | Convolutional Encoding | Transmitting Data | ![]() |