A method for receiver operation, the method comprising: a) receiving a data block from a transmitter, the data block comprising P matrices, where P is a positive integer; b) determining whether or not operating conditions are met; c) in response to determining that operating conditions are not met, c1) computing a test position, wherein the test position comprises a matrix index to a matrix in the data block and a codeword index to a codeword in a set of codewords associated with the matrix corresponding by the matrix index, c2) selecting a codeword based on the test position, and c3) computing a metric based on matrices of the data block corresponding to matrix indices less than or equal to the matrix index and a solution set of codewords selected for matrices of the data block corresponding to matrix indices less than or equal to the matrix index, c4) if the metric is greater than an error constraint, repeating the steps b) and c), and c5) if the metric is not greater than the error constraint, c5a) if all test positions have been evaluated, saving a codeword indexed by the codeword index in the solution set, updating the error constraint, and repeating the steps b) and c), and c5b) if not all test positions have been evaluated, updating the matrix index to a next matrix, and repeating the steps b) and c); and d) in response to determining that operating conditions are met, outputting the solution set, and processing the outputted solution set. a) receiving a data block from a transmitter, the data block comprising P matrices, where P is a positive integer; b) determining whether or not operating conditions are met; c) in response to determining that operating conditions are not met, c1) computing a test position, wherein the test position comprises a matrix index to a matrix in the data block and a codeword index to a codeword in a set of codewords associated with the matrix corresponding by the matrix index, c2) selecting a codeword based on the test position, and c3) computing a metric based on matrices of the data block corresponding to matrix indices less than or equal to the matrix index and a solution set of codewords selected for matrices of the data block corresponding to matrix indices less than or equal to the matrix index, c4) if the metric is greater than an error constraint, repeating the steps b) and c), and c5) if the metric is not greater than the error constraint, c5a) if all test positions have been evaluated, saving a codeword indexed by the codeword index in the solution set, updating the error constraint, and repeating the steps b) and c), and c5b) if not all test positions have been evaluated, updating the matrix index to a next matrix, and repeating the steps b) and c); and c1) computing a test position, wherein the test position comprises a matrix index to a matrix in the data block and a codeword index to a codeword in a set of codewords associated with the matrix corresponding by the matrix index, c2) selecting a codeword based on the test position, and c3) computing a metric based on matrices of the data block corresponding to matrix indices less than or equal to the matrix index and a solution set of codewords selected for matrices of the data block corresponding to matrix indices less than or equal to the matrix index, c4) if the metric is greater than an error constraint, repeating the steps b) and c), and c5) if the metric is not greater than the error constraint, c5a) if all test positions have been evaluated, saving a codeword indexed by the codeword index in the solution set, updating the error constraint, and repeating the steps b) and c), and c5b) if not all test positions have been evaluated, updating the matrix index to a next matrix, and repeating the steps b) and c); and c5a) if all test positions have been evaluated, saving a codeword indexed by the codeword index in the solution set, updating the error constraint, and repeating the steps b) and c), and saving a codeword indexed by the codeword index in the solution set, updating the error constraint, and repeating the steps b) and c), and c5b) if not all test positions have been evaluated, updating the matrix index to a next matrix, and repeating the steps b) and c); and updating the matrix index to a next matrix, and repeating the steps b) and c); and d) in response to determining that operating conditions are met, outputting the solution set, and processing the outputted solution set. outputting the solution set, and processing the outputted solution set.