これがここに当てはまるかどうかはわかりませんが、次のようになります。
Hamming Block Codeを使用してエンコードされたノイズの多いデータがあり、 Viterbi Decoderを使用してデコードしたいと考えています。
宿題を作ったので、Viterbi Block Decoder がどのように機能するかはわかりましたが、かなりの時間がかかり、最適ではない可能性があるため、すべてを自分で実装することは避けたいと思います。
私の質問は次のとおりです。Viterbi Block Decoder の matlab 関数を知っていますか? comm.ViterbiDecoderを見つけましたが、畳み込みエンコーディング専用です。
その間、将来必要になる可能性がある場合に備えて、エンコーダーからできるだけ多くの情報を取得しようとしました (以下のコードを参照)。
% Parameters
codewordLength = 31;
messageLength = 26;
data = randi([0, 1], 1, messageLength);
% Encoder 1
encoder1 = comm.BCHEncoder(...
'CodewordLength', codewordLength, ...
'MessageLength', messageLength);
% Encoder 2
M = ceil(log2(codewordLength+1));
primitivePolynomialDe = primpoly(M, 'nodisplay');
primitivePolynomialBi = fliplr(de2bi(primitivePolynomialDe));
SL = (2^M-1) - codewordLength;
generatorPolynomial = bchgenpoly(codewordLength + SL, ...
messageLength + SL, primitivePolynomialDe);
encoder2 = comm.BCHEncoder(...
'CodewordLength', codewordLength, ...
'MessageLength', messageLength, ...
'PrimitivePolynomialSource', 'Property', ...
'PrimitivePolynomial', primitivePolynomialBi, ...
'GeneratorPolynomialSource', 'Property', ...
'GeneratorPolynomial', generatorPolynomial);
dataEncoded1 = step(encoder1, data.').';
dataEncoded2 = step(encoder2, data.').';
sum(dataEncoded1~=dataEncoded2)