Esempio n. 1
0
def polar_codes_mapping(metric, N=8, k=4, nb_pkts = 100, graph = 'BER',channel='BSC'):
  print('-------------------Polar Codes + Mapping-----------------------------')
  cont = 2
  if channel == 'AWGN':
    design_parameter = np.linspace(0.0, 10, cont)
  else:
    design_parameter = np.linspace(0.0001, 0.1, cont)

  for key in [0.5]:
    e_design = 0.1
    # print('===============Design================',key)
    G,infoBits = polar.polar_generator_matrix(64, k, channel, e_design)

    k = len(G)
    Nt = len(G[1])
    t = int(Nt /N)
    U_k = utils.symbols_generator(k)  # all possible messages
    X_m = utils.symbols_generator(t)  # all possible symbol sequences
    C = utils.matrix_codes(U_k, k, G, Nt)

    nx = 2**t*key
    # print('nx', nx, 't', t)
    x = utils.mapping2(C, X_m, t, nx)
    N = len(x[1])
    if graph == 'BLER':
      metric[f"P({e_design})+M({key})"] = utils.block_error_probability(N,k,x,e0,e1)
    else:
      metric[f"P({e_design})+M({key})"] = utils.bit_error_rate(k,x,nb_pkts,e0,e1)
def integrated_scheme(metric,
                      N=8,
                      k=4,
                      nb_pkts=100,
                      graph='BER',
                      channel='BSC'):
    print(
        '-------------------Integrated Scheme Code-----------------------------'
    )
    for key in [0.5]:
        G, infoBits = polar.polar_generator_matrix(64, k, channel, 0.1)
        k = len(G)
        Nt = len(G[1])
        t = int(Nt / N)

        U_k = utils.symbols_generator(k)  # all possible messages
        C = utils.integrated_function(infoBits, U_k, k, Nt, -1)

        X_m = utils.symbols_generator(t)  # all possible symbol sequences
        nx = 2**t * key
        # print('nx', nx, 't', t)
        x = utils.mapping(C, X_m, t, nx)
        N = len(x[1])
        if graph == 'BLER':
            metric[f"Int_P({key})"] = utils.block_error_probability(
                N, k, C, e0, e1)
        else:
            metric[f"Int_P({key})"] = utils.bit_error_rate(
                k, x, nb_pkts, e0, e1)
Esempio n. 3
0
def polar_codes(metric, N=8, k=4, nb_pkts = 100, graph = 'BER',channel='BSC'):
  print('-------------------Polar Code-----------------------------')
  for key in [0.1]:
    G, infoBits = polar.polar_generator_matrix(N,k, channel, key)
    k = len(G)
    N = len(G[1])
    U_k = utils.symbols_generator(k)  # all possible messages
    C = utils.matrix_codes(U_k, k, G, N)
    # print('Polar codebook', np.array(C))
    if graph == 'BLER':
      metric[f"Polar({key})"] = utils.block_error_probability(N,k,C,e0,e1)
    else:
      metric[f"Polar({key})"] = utils.bit_error_rate(k,C,nb_pkts,e0,e1)
    print(metric[f"Polar({key})"])
Esempio n. 4
0
def polar_codes_NN(metric, N=8, k=4, nb_pkts = 100, graph = 'BER',channel='BSC'):
  print('-------------------Polar Code + NN decoder -----------------------------')
  key = 'NN_dec'
  G,infoBits = polar.polar_generator_matrix(N, k, channel, 0.1)
  # print('G = ', np.array(G))
  k = len(G)
  N = len(G[1])
  U_k = utils.symbols_generator(k)  # all possible messages
  C = utils.matrix_codes(U_k, k, G, N)
  print('k ', k, 'N ', N)
  if graph == 'BLER':
    metric[key] = utils.block_error_probability(N, k, C, e0, e1)
  else:
    metric[key] = utils.bit_error_rate_NN(N, k, C, nb_pkts, e0, e1, channel)
#### Uncomment these lines and comment the def polar_no_mapping(): to use directly (remember the return at the end)
channel_type = sys.argv[3]
k = int(sys.argv[2])
N = int(sys.argv[1])
cont = 5
if channel_type == 'AWGN':
    design_parameter = np.linspace(0.0, 10, cont)
else:
    design_parameter = np.linspace(0.1, 0.5, cont)
legends = []
FER = {}
for e_design in design_parameter:
    print('===============================', e_design)
    legends.append(f"p = {e_design:.2f}")

    G, infoBits = polar.polar_generator_matrix(N, k, channel_type, e_design)
    # print(G)
    k = len(G)
    N = len(G[1])
    U_k = bac.symbols_generator(k)  # all possible messages
    Y_n = bac.symbols_generator(N)  # all possible symbol sequences
    C = bac.matrix_codes(U_k, k, G, N)

    e0 = np.linspace(0.1, 0.9, 9)
    e1 = np.linspace(0.1, 0.5, 5)

    # print("0.00", '|', ["{:.4f}".format(ep1) for ep1 in e1])
    # print('------------------------------------------------------------------')
    error_probability = {}
    for ep0 in e0:
        row = []
Esempio n. 6
0

def bler_metric(u_true, u_predict):
    return K.mean(K.not_equal(K.argmax(u_true, 1), K.argmax(u_predict, 1)))


#Parameters

###### \Python3\python.exe decoder.py BAC 8 4 10

channel = sys.argv[1]
N = int(sys.argv[2])
k = int(sys.argv[3])
epoch = int(sys.argv[4])

G = G, infoBits = polar.polar_generator_matrix(N, k, channel, 0.1)
k = len(G)  #Nombre de bits � envoyer
N = len(G[1])  #codeword length

rep = 500
train_epsilon = 0.1
S = 5

################### Coding
U_k = utils.symbols_generator(k)  # all possible messages
cn = utils.matrix_codes(U_k, k, G, N)
# print('codebook',np.array(cn))
print('size C: ', len(cn), 'size Cn: ', len(cn[0]))
c = np.array(cn)
print(type(c[0]))
import random as rd
import utils

cont = 5
if sys.argv[3] == 'AWGN':
    design_parameter = np.linspace(0.0, 10, cont)
else:
    design_parameter = np.linspace(0.1, 0.5, cont)
legends = []
BER = {}

for e_design in design_parameter:
    print('===============================', e_design)
    legends.append(f"p = {e_design:.2f}")
    G, infoBits = polar.polar_generator_matrix(int(sys.argv[1]),
                                               int(sys.argv[2]), sys.argv[3],
                                               e_design)
    # print(G)
    k = len(G)
    N = len(G[1])
    U_k = bac.symbols_generator(k)  # all possible messages
    Y_n = bac.symbols_generator(N)  # all possible symbol sequences
    C = bac.matrix_codes(U_k, k, G, N)
    B = 1000

    e0 = np.linspace(0.1, 0.9, 9)
    e1 = np.linspace(0.1, 0.5, 5)

    bep = {}
    ber = {}
    for ep0 in e0: