ruwan2
Member level 5
- Joined
- Nov 29, 2011
- Messages
- 90
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,286
- Activity points
- 2,141
Hi,
I once simulated Viterbi decoder (I programmed the code, not Matlab function or block) with Matlab without any problem. Now I implement Viterbi decoder in TI DSP with fixed point short date type. I have puzzled with the integer wrapped problem. I think I have some incorrect understanding on the implementation. TI has a DSP pdf application note talking about Viterbi decoder (There are some other open sources with similar ideas). The initial path metrics are 0 for state 0 and 8000h (-32768) for all other states. I use (133,171) convolutional code. The first butterfly is:
old states 00 new states
state 0 -------------- state 0
(0) \ /
11\ 11/
\
/ \
/ \
state 1 ---------------state 32
(-32768) 00
The above is described in TI application note: spra776a.pdf.
I assume 4 bits soft decision with range -8......7. For simplicity, I assume antipodal code: 0=====>7, 1=====>-7
In this case, SUM=14 for 00, then -SUM=-14 for 11.
old states 00 new states
state 0 -------------- state 0
(0) /
11/
/
/
/
state 1
(-32768)
If I discard the '-' sign in the original metric calculation, then it looks for the maximum metric. This seems that for the above butterfly works. That is, metric 14 is selected for 00.
The problem is for other metrics which have default metrics to '8000h'. If one of the metric (for add) is '800Eh', the other metric will be wrapped to '7FF2H' which is a very large positive number. This is a disaster to the implementation. In matlab, there is a similar default for the metrics. I.e. state 0 is '0' while other metrics are the lowest negative numbers. But there is no such overflow problem as in the fixed point case (16 bit integer in above). I do think that '0' and '8000H' are correct, but I do not know what else I am wrong with it. Could you explain it to me?
Thanks a lot.
I once simulated Viterbi decoder (I programmed the code, not Matlab function or block) with Matlab without any problem. Now I implement Viterbi decoder in TI DSP with fixed point short date type. I have puzzled with the integer wrapped problem. I think I have some incorrect understanding on the implementation. TI has a DSP pdf application note talking about Viterbi decoder (There are some other open sources with similar ideas). The initial path metrics are 0 for state 0 and 8000h (-32768) for all other states. I use (133,171) convolutional code. The first butterfly is:
old states 00 new states
state 0 -------------- state 0
(0) \ /
11\ 11/
\
/ \
/ \
state 1 ---------------state 32
(-32768) 00
The above is described in TI application note: spra776a.pdf.
I assume 4 bits soft decision with range -8......7. For simplicity, I assume antipodal code: 0=====>7, 1=====>-7
In this case, SUM=14 for 00, then -SUM=-14 for 11.
old states 00 new states
state 0 -------------- state 0
(0) /
11/
/
/
/
state 1
(-32768)
If I discard the '-' sign in the original metric calculation, then it looks for the maximum metric. This seems that for the above butterfly works. That is, metric 14 is selected for 00.
The problem is for other metrics which have default metrics to '8000h'. If one of the metric (for add) is '800Eh', the other metric will be wrapped to '7FF2H' which is a very large positive number. This is a disaster to the implementation. In matlab, there is a similar default for the metrics. I.e. state 0 is '0' while other metrics are the lowest negative numbers. But there is no such overflow problem as in the fixed point case (16 bit integer in above). I do think that '0' and '8000H' are correct, but I do not know what else I am wrong with it. Could you explain it to me?
Thanks a lot.