33 lines
1.2 KiB
Plaintext
33 lines
1.2 KiB
Plaintext
########################
|
|
######## H of LDPC --> read from alist --> helper functions for reading alist to H
|
|
######## Code from https://github.com/gnuradio/gnuradio/blob/master/gr-fec/python/fec/LDPC/Generate_LDPC_matrix_functions.py
|
|
########################
|
|
def parse_alist_header(header):
|
|
size = header.split()
|
|
return int(size[0]), int(size[1])
|
|
|
|
|
|
def read_alist_file(filename):
|
|
"""
|
|
This function reads in an alist file and creates the
|
|
corresponding parity check matrix H. The format of alist
|
|
files is described at:
|
|
http://www.inference.phy.cam.ac.uk/mackay/codes/alist.html
|
|
"""
|
|
|
|
with open(filename, 'r') as myfile:
|
|
data = myfile.readlines()
|
|
numCols, numRows = parse_alist_header(data[0])
|
|
H = np.zeros((numRows, numCols))
|
|
# The locations of 1s starts in the 5th line of the file
|
|
for lineNumber in np.arange(4, 4 + numCols):
|
|
indices = data[lineNumber].split()
|
|
for index in indices:
|
|
H[int(index) - 1, lineNumber - 4] = 1
|
|
# The subsequent lines in the file list the indices for where
|
|
# the 1s are in the rows, but this is redundant
|
|
# information.
|
|
|
|
return H
|
|
|