Package pl.mkaczara.bch.decoder.worker

Source Code of pl.mkaczara.bch.decoder.worker.AbstractBCHDecoderWorker

package pl.mkaczara.bch.decoder.worker;

import java.math.BigInteger;
import java.util.concurrent.Callable;
import pl.mkaczara.bch.math.BinPolynomial;
import pl.mkaczara.bch.code.CyclicCode;
import pl.mkaczara.bch.exception.UncorrectableErrorsException;
import pl.mkaczara.bch.math.BinMonomial;

/**
* Klasa abstrakcyjna obiektow reprezentujacych workery dekodera kodu BCH
*
* @author Michał
*/
public abstract class AbstractBCHDecoderWorker implements Callable<BinPolynomial>{
    /**
     * Wielomian wejsciowy
     */
    private BinPolynomial input;
    /**
     * Kod
     */
    private CyclicCode code;
    /**
     * Maska danych (do wyciagania wektora informacji)
     */
    private BigInteger dataMask = BigInteger.ZERO;

    public AbstractBCHDecoderWorker(CyclicCode code) {
        this.code = code;
       
        for(int i = code.getN() - 1; i >= code.getN() - code.getK(); i--){
            this.dataMask = this.dataMask.setBit(i);
        }
    }

    /**
     * Dekoduje slowo kodu BCH
     *
     * @param input slowo kodu
     * @return zdekodowane slowo kodu
     */
    public abstract BinPolynomial decode(BinPolynomial input) throws UncorrectableErrorsException;
   
    /**
     * Pobiera "złożoność" dekodera
     * @return "złożoność" dekodera
     */
    public abstract Integer getComplexity();
   
    @Override
    public BinPolynomial call() throws Exception {
        if(null == input){
            throw new IllegalStateException("No input data given!");
        }
        return decode(input);
    }

    public BinPolynomial getInput() {
        return input;
    }

    public void setInput(BinPolynomial input) {
        this.input = input;
    }

    public CyclicCode getCode() {
        return code;
    }
   
    /**
     * Zwraca wielomian danych otrzymany z <b>poprawnego</b> wielomianu slowa kodu
     *
     * @param in <b>poprawny</b> wielomian slowa kodu
     * @return wielomian danych zakodowanych w slowie
     */
    protected final BinPolynomial getData(BinPolynomial in){
        BinPolynomial res = new BinPolynomial(in.getPolyVector().and(dataMask), getCode().getK() - 1);
        res = res.divideByMonomial(new BinMonomial(getCode().getN() - getCode().getK()));
        return res;
    }
   
    /**
     * Oblicza funkcje Hamminga dla wielomianu binarnego
     *
     * @param sx wielomian
     * @return liczba wspolczynnikow niezerowych wielomianu
     */
    protected final int getHammingWeight(BinPolynomial sx) {
        int w = 0;
        for(int i = 0; i < sx.getPolyVector().bitLength(); i++){
            if(sx.getPolyVector().testBit(i)){
                w++;
            }
        }
        return w;
    }
} // end AbstractBCHEncoderWorker
TOP

Related Classes of pl.mkaczara.bch.decoder.worker.AbstractBCHDecoderWorker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.