Exemple #1
0
 def __init__(self):
     self.PWPath = os.path.join(os.getcwd(), "reliable_sequence.txt")
     self.numAggregationLevel = 3
     self.numCandidates = 44
     self.numRNTIBits = 16
     self.numCandidatePerAggregationLevel = np.array([6, 6, 10])
     self.codewordLengthPerAggregationLevel = np.array([128, 256, 512])
     self.maxInformationLength = 140
     self.numInformationBits = np.array([16, 57])
     self.numCRCBits = 24
     self.crcPoly = [24, 23, 21, 20, 17, 15, 13, 12, 8, 4, 2, 1, 0]
     self.polarEncoders = []
     self.codeConstructor = PolarCodeConstructor(QPath=self.PWPath)
     self.crcEncoder = CRCEnc(self.numCRCBits, self.crcPoly)
     self.initialize_encoders()
                                       K,
                                       QPath=os.path.join(
                                           os.getcwd(),
                                           "../reliable_sequence.txt"))
frozenbits, messagebits, frozenbits_indicator, messagebits_indicator = codeConstructor.PW(
    N, K)
polarEncoder = PolarEnc(N, K, frozenbits, messagebits)
nodeIdentifier = NodeIdentifier(N, K, frozenbits, messagebits)
nodeType = nodeIdentifier.run()
DMetricCalculator = EPFLDMetricCalculator(N, K, nodeType, frozenbits,
                                          messagebits)

frozenbitsPesedo, messagebitsPesedo, _, _ = codeConstructor.PW(N, PesodoK)
polarPesedoEncoder = PolarEnc(N, PesodoK, frozenbitsPesedo, messagebitsPesedo)

crcEnc = CRCEnc(crc_n=numCRC, crc_polynominal=crcPoly)

# Try Complete Noise / Random Codewords / Regular Polar Codes
numSimulation = 2 * 10**4
DMetricsAnother = []
DMetricsRegular = []
pbar = tqdm(range(numSimulation))
for _ in pbar:
    choice = np.random.randint(low=0, high=2)
    if choice == 0:
        # two mode: pure random codeword / polar encoded but with different information bit length
        msg = np.random.randint(low=0, high=2, size=pesedoA)
        msg_crc = crcEnc.encode(msg)
        cword = polarPesedoEncoder.encode(msg)
        cword = cword.astype(np.int)
        bpsksymbols = 1 - 2 * cword
Exemple #3
0
# initialize Trace instance to maintain simulation hyper-parameters and results and images
if RUN_MDR == True:
    experiment_name = "MDR-L = {:d}".format(L)
else:
    experiment_name = "FAR-L = {:d}".format(L)
if os.path.isdir(os.path.join(os.getcwd(), "BD_Benchmark", experiment_name)):
    shutil.rmtree(os.path.join(os.getcwd(), "BD_Benchmark", experiment_name))
tracer = Tracer('BD_Benchmark').attach(experiment_name)
configure = {"L": L,
             "SNRdBTest":SNRdBTest}
tracer.store(Config(configure))

# Initialize PDCCH candidate generator and corresponding decoders
PDCCHGenerator = CandidateGenerator()
CRCEncoder = CRCEnc(PDCCHGenerator.numCRCBits, PDCCHGenerator.crcPoly)
CASCLDecoders = []
for i in range(PDCCHGenerator.numAggregationLevel):
    N = PDCCHGenerator.codewordLengthPerAggregationLevel[i]
    for m in range(2):
        A = PDCCHGenerator.numInformationBits[m]
        K = A +  PDCCHGenerator.numCRCBits
        frozenbits_indicator = PDCCHGenerator.frozenbits_indicator_set[i][m]
        messagebits_indicator = PDCCHGenerator.messagebits_indicator_set[i][m]
        SCLDec = CASCLDecoder(N=N, K=K, A=A, L=L, frozen_bits=frozenbits_indicator, message_bits=messagebits_indicator,
                              crc_n=PDCCHGenerator.numCRCBits, crc_p=PDCCHGenerator.crcPoly)
        CASCLDecoders.append(SCLDec)

if RUN_MDR:
    # Start Simulation MDR
    print("Simulation for MDR")
Exemple #4
0
parser.add_argument("--L1", type=int, default=1)
parser.add_argument("--L2", type=int, default=8)
parser.add_argument("--Omega", type=int, default=11)
parser.add_argument("--RUN_FAR", type=int, default=0)
args = parser.parse_args()

# Simulation Parameters
Omega = args.Omega # No. candidate after stage 1 SC decoding
L1 = args.L1
L2 = args.L2
RUN_FAR = args.RUN_FAR
RUN_MDR = 1 - RUN_FAR

# Initialize PDCCH candidate generator and corresponding decoders
PDCCHGenerator = CandidateGenerator()
CRCEncoder = CRCEnc(PDCCHGenerator.numCRCBits, PDCCHGenerator.crcPoly)
SCLOneDecoders = []
CASCLDecoders = []
for i in range(PDCCHGenerator.numAggregationLevel):
    N = PDCCHGenerator.codewordLengthPerAggregationLevel[i]
    for m in range(2):
        A = PDCCHGenerator.numInformationBits[m]
        K = A + PDCCHGenerator.numCRCBits
        frozenbits_indicator = PDCCHGenerator.frozenbits_indicator_set[i][m]
        messagebits_indicator = PDCCHGenerator.messagebits_indicator_set[i][m]
        SCLOneDec = CASCLDecoder(N=N, K=K, A=A, L=L1, frozen_bits=frozenbits_indicator, message_bits=messagebits_indicator,
                                crc_n=PDCCHGenerator.numCRCBits, crc_p=PDCCHGenerator.crcPoly)
        CASCLDec = CASCLDecoder(N=N, K=K, A=A, L=L2, frozen_bits=frozenbits_indicator, message_bits=messagebits_indicator,
                                crc_n=PDCCHGenerator.numCRCBits, crc_p=PDCCHGenerator.crcPoly)
        SCLOneDecoders.append(SCLOneDec)
        CASCLDecoders.append(CASCLDec)
Exemple #5
0
experiment_name = "CDF-N={:d}-K={:d}-SNR={:.1f}".format(N, K, SNR)
if os.path.isdir(os.path.join(os.getcwd(), "BD_DMetric_EPFL", experiment_name)):
    shutil.rmtree(os.path.join(os.getcwd(), "BD_DMetric_EPFL", experiment_name))
tracer = Tracer('BD_DMetric_EPFL').attach(experiment_name)

codeConstructor = PolarCodeConstructor(N, K, QPath=os.path.join(os.getcwd(), "reliable_sequence.txt"))
frozenbits, messagebits, frozenbits_indicator, messagebits_indicator = codeConstructor.PW(N, K)
polarEncoder = PolarEnc(N, K, frozenbits, messagebits)
nodeIdentifier = NodeIdentifier(N, K, frozenbits, messagebits)
nodeType = nodeIdentifier.run()
DMetricCalculator = EPFLDMetricCalculator(N, K, nodeType, frozenbits, messagebits)

frozenbitsPesedo, messagebitsPesedo, _, _ = codeConstructor.PW(N, PesodoK)
polarPesedoEncoder = PolarEnc(N, PesodoK, frozenbitsPesedo, messagebitsPesedo)

crcEnc = CRCEnc(crc_n=numCRC, crc_polynominal=[16, 15, 2, 0])


# Try Complete Noise / Random Codewords / Regular Polar Codes
numSimulation = 3*10**4
DMetricsRandom = []
DMetricsRegular = []
DMetricsNoise = []
pbar = tqdm(range(numSimulation))
for _ in pbar:
    choice = np.random.randint(low=0, high=3)
    # choice = 2
    if choice == 0:
        bpsksymbols = np.zeros(N, dtype=int)
    elif choice == 1:
        # two mode: pure random codeword / polar encoded but with different information bit length
Exemple #6
0
class CandidateGenerator():
    def __init__(self):
        self.PWPath = os.path.join(os.getcwd(), "reliable_sequence.txt")
        self.numAggregationLevel = 3
        self.numCandidates = 44
        self.numRNTIBits = 16
        self.numCandidatePerAggregationLevel = np.array([6, 6, 10])
        self.codewordLengthPerAggregationLevel = np.array([128, 256, 512])
        self.maxInformationLength = 140
        self.numInformationBits = np.array([16, 57])
        self.numCRCBits = 24
        self.crcPoly = [24, 23, 21, 20, 17, 15, 13, 12, 8, 4, 2, 1, 0]
        self.polarEncoders = []
        self.codeConstructor = PolarCodeConstructor(QPath=self.PWPath)
        self.crcEncoder = CRCEnc(self.numCRCBits, self.crcPoly)
        self.initialize_encoders()

    def initialize_encoders(self):
        self.frozenbits_set = []
        self.messagebits_set = []
        self.frozenbits_indicator_set = []
        self.messagebits_indicator_set = []
        for i in range(self.numAggregationLevel):
            N = self.codewordLengthPerAggregationLevel[i]
            encoder = []
            frozenbits_set = []
            messagebits_set = []
            frozenbits_indicator_set = []
            messagebits_indicator_set = []
            for A in self.numInformationBits:
                K = A + self.numCRCBits
                frozenbits, messagebits, frozenbits_indicator, messagebits_indicator = self.codeConstructor.PW(
                    N, K)
                frozenbits_set.append(frozenbits)
                messagebits_set.append(messagebits)
                frozenbits_indicator_set.append(frozenbits_indicator)
                messagebits_indicator_set.append(messagebits_indicator)
                encoder.append(PolarEnc(N, K, frozenbits, messagebits))
            self.polarEncoders.append(encoder)
            self.frozenbits_set.append(frozenbits_set)
            self.messagebits_set.append(messagebits_set)
            self.frozenbits_indicator_set.append(frozenbits_indicator_set)
            self.messagebits_indicator_set.append(messagebits_indicator_set)

    def generate_candidates(self, isRNTI):
        codewords = []
        information_bits = []
        if isRNTI:
            RNTIIndex = np.random.randint(low=0, high=self.numCandidates)
        else:
            RNTIIndex = -1
        RNTI = np.random.randint(low=0,
                                 high=2,
                                 size=self.numRNTIBits,
                                 dtype=np.int)
        cnt = 0
        for i in range(self.numAggregationLevel):
            for m in range(2):
                A = self.numInformationBits[m]
                for j in range(self.numCandidatePerAggregationLevel[i]):
                    msg = np.random.randint(low=0, high=2, size=A)
                    msg_crc = self.crcEncoder.encode(msg)
                    if cnt == RNTIIndex:
                        msg_crc[-self.numRNTIBits:] = np.mod(
                            msg_crc[-self.numRNTIBits:] + RNTI, 2)
                    codeword = self.polarEncoders[i][m].encode(msg_crc)
                    codeword = codeword.astype(np.int)
                    codewords.append(codeword)
                    information_bits.append(msg)
                    cnt += 1
        return information_bits, codewords, RNTI, RNTIIndex