| 171 | |
| 172 | #ifdef USE_MAX_LOG_MAP |
| 173 | _DECISION CConvEncoder::SoftConvolution(const _BYTE byNewStateShiftReg, |
| 174 | CShiftRegister<_DECISION>& vecStateMem, |
| 175 | const int iGenPolyn) |
| 176 | { |
| 177 | _DECISION decSoftOut; |
| 178 | |
| 179 | /* Search for minimum norm value of input soft-informations. |
| 180 | Here we implement the convolution of the soft information independent of |
| 181 | the poylnoms stored in "byGeneratorMatrix[]"! When changing the polynoms, |
| 182 | it has to be changed here, too */ |
| 183 | switch (iGenPolyn) |
| 184 | { |
| 185 | case 0: |
| 186 | case 3: |
| 187 | /* oct: 0155 -> 1101101 */ |
| 188 | decSoftOut = Min(Min(Min(Min(vecStateMem[0], vecStateMem[2]), |
| 189 | vecStateMem[3]), vecStateMem[5]), vecStateMem[6]); |
| 190 | break; |
| 191 | |
| 192 | case 1: |
| 193 | /* oct: 0117 -> 1001111 */ |
| 194 | decSoftOut = Min(Min(Min(Min(vecStateMem[0], vecStateMem[1]), |
| 195 | vecStateMem[2]), vecStateMem[3]), vecStateMem[6]); |
| 196 | break; |
| 197 | |
| 198 | case 2: |
| 199 | /* oct: 0123 -> 1010011 */ |
| 200 | decSoftOut = Min(Min(Min(vecStateMem[0], vecStateMem[1]), |
| 201 | vecStateMem[4]), vecStateMem[6]); |
| 202 | break; |
| 203 | } |
| 204 | |
| 205 | /* Hard decision defines the sign, the norm is defined by the minimum of |
| 206 | input norms of soft informations using max-log approximation */ |
| 207 | if (Convolution(byNewStateShiftReg, iGenPolyn) == 0) |
| 208 | return -decSoftOut; |
| 209 | else |
| 210 | return decSoftOut; |
| 211 | } |
| 212 | #endif |
| 213 | |
| 214 | void CConvEncoder::Init(ECodScheme eNewCodingScheme, |