I am trying to implement the soft-output for my soft-decoder, however, the resulting log-likelihood ratios are not corresponding to the corrected hard bits. The soft-output regards the LLR-values for the bits in the codewords, so they are not related to the modulation symbols.

The paper I am using is: 'Low Complexity Soft-Input Soft-Output Hamming Decoder' LINK

First, I calculate the probabilities from the old LLR-values. Then I multiply the probabilities for the respected codeword with the error pattern for this code word. Followed by taking the products of each column, which results in the probabilties for each error pattern of correct decoding. Next step is to normalize these probabilities. For the actual calculation of the new probabilities, the columns of the error pattern matrix are compared to the distorted codeword, for the bits that are equal the respected probabilities are summed. Eventually these probabilities are the probability that a bit equals 0. These probabilities are converted to LLR-values again and this should be the result.

The text in code form:

        % Column-wise multiplication
        P = abs(E_pattern - repmat(probability(i,:), size(E_pattern,1), 1));
        P_prod = prod(P, 2).';
        % Normalize the probabilities row-wise
        P_sum = sum(P_prod,2);
        P_norm = P_prod ./ sum(P_sum,2);
        P_norm(P_sum == 0) = 1e-6;
        for k = 1:PPM
            % Weight
            Weight = mod(data_old(i,k) + E_pattern(:,k),2);
            % New probabilities codeword bits
            P_zero(k) = sum(P_norm(Weight(:) == 0));
        % New LLR values codeword bits
        LLR(i,:) = log(P_zero./(1-P_zero));

Somehow, this is going wrong and I don't know where. As a result my LLR-values are wrong, they don't equal at all to my corrected hard bits.

Could someone help me with this?

  • $\begingroup$ I don't know for the others but it is hard to undersdant what you are trying to do and what is the issue. Do you have a reference article or a block diagram, a code to illustrate? $\endgroup$
    – user51024
    Apr 16, 2021 at 7:11
  • $\begingroup$ Thank you for your reply! I have added the article I am using plus my try on the implementation. Today I ran some simulations with other code, and I am suspecting that the corrected hard bits in fact are not equal to the soft values, is this possible? $\endgroup$
    – Cooltafel
    Apr 16, 2021 at 17:43
  • $\begingroup$ That is good that you updated, maybe somone who had the same problem than you will help. Frankly it is at the limit of my skills. Are the soft outputs also wrong when no error inserted by channel? This could mean that your nodes are wrongly defined $\endgroup$
    – user51024
    Apr 18, 2021 at 16:25
  • $\begingroup$ I actually checked this and if there are no errors insterted there is no deviation between the LLRs and the hard bits. Could the problem lay in the input LLR values? $\endgroup$
    – Cooltafel
    Apr 20, 2021 at 8:12
  • $\begingroup$ So, I have found the problem, but I am not sure how to solve it. The problem is in the P_prod being equal to zero, because if that happens, I assign a very small probability to P_norm, however that is not resulting in the desired outcome. Do you perhaps know, what I should assign to the P_norm so the outcome is not total nonsense? $\endgroup$
    – Cooltafel
    Apr 23, 2021 at 7:47


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.