What is the proper way to use a Viterbi Decoder in continuous mode?

조회 수: 2 (최근 30일)
Dylan Ditta
Dylan Ditta 2024년 9월 26일
편집: Sivsankar 2024년 10월 7일
I'm trying to replicate the viterbi decoding operation in this example:
openExample('comm/DigitalVideoBroadcastingTerrestrialExample','supportingFile','commdvbt.slx')
It's doing okay, but I noticed that the Inner Decoder (Conv Encode) seems to be performing poorly compared to other blocks.
Example (comparing bits of input to output ):
OFDM Error rate: 1.000000
Mapping Error rate: 0.107143
Inner Int Error rate: 0.019761
Inner Dec Error rate: 0.029412
Iteration: 1
...
OFDM Error rate: 1.000000
Mapping Error rate: 0.074625
Inner Int Error rate: 0.003676
Inner Dec Error rate: 0.371936
Iteration: 28288
...
OFDM Error rate: 1.000000 (makes sense because no two input and output symbols will be exactly the same after noise)
Mapping Error rate: 0.058128
Inner Int Error rate: 0.012408
Inner Dec Error rate: 0.035539
Iteration: [last]
Resultant Error rate [all iterations]: 0.98776
If I use 'trunc' and 'hard' I get better results, but the viterbi decoder still sees consistent error rates between 0.01 - 0.50.
I believe the reason is because I'm somehow not achieving continuity between my iterations. What can I do?
trellis = poly2trellis(7,[171 133]); %Trellis for 3/4 encoder
puncpat = [1 0 1 0 1 1]'; %Puncturing Pattern
for i = 1: packets*ofdm_symbols + (2244/204)
[ Some operations]
....
....
%% Inner Coder (Conv Encode)
msg_encoded(startidx_out:endidx_out) = convenc(bin_interleaved(startidx_in:endidx_in), trellis,puncpat);
...
...
[ Some operations]
...
...
%% Inner Decoder (Vit Dec)
msg_decoded(startidx3_out:endidx3_out) = vitdec(Deinterleaved_packet(end-2175:end)', ...
trellis,length(msg),'cont','unquant',puncpat);
...
...
end
  댓글 수: 1
Dylan Ditta
Dylan Ditta 2024년 9월 26일
Oh yeah and my noise is based on:
ofdm_mod = awgn(ofdm_mod, 22,'measured')
22 dB of Signal/noise shouldn't screw up the signal this badly

댓글을 달려면 로그인하십시오.

답변 (1개)

Sivsankar
Sivsankar 2024년 10월 7일
편집: Sivsankar 2024년 10월 7일
In the example model, the Viterbi decoder has a traceback depth of 136. So, make sure that you employ that in your code. Changing to the correct traceback depth may reduce the error rates. As a general estimate, the Traceback depth value is approximately two to three times (k – 1)/(1 – r), where k is the constraint length of the code and r is the code rate
In the model, the output from the Viterbi decoder is carried forward to a delay block and that is considered as the decoded output message in the model. So maybe you could try to implement that in your code before comparing the input and output bits.
You can leverage the following documentation on how you can implement the vitdec function to decode punctured signals:
Try to see if the above implementation decreases the error rates.
Thanks

카테고리

Help CenterFile Exchange에서 Error Detection and Correction에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by