Fixed usage of n and k
This commit is contained in:
parent
f29c2e71de
commit
70bbe08bc4
@ -25,6 +25,7 @@ class MLDecoder:
|
|||||||
"""Generate a list of all possible codewords.
|
"""Generate a list of all possible codewords.
|
||||||
|
|
||||||
:return: Numpy array of the form [[codeword_1], [codeword_2], ...]
|
:return: Numpy array of the form [[codeword_1], [codeword_2], ...]
|
||||||
|
(Each generated codeword is an element of [0, 1]^n)
|
||||||
"""
|
"""
|
||||||
k, n = self._G.shape
|
k, n = self._G.shape
|
||||||
|
|
||||||
@ -44,7 +45,7 @@ class MLDecoder:
|
|||||||
|
|
||||||
:param y: Vector of received values. (y = x + w, where 'x' is element of [-1, 1]^n
|
:param y: Vector of received values. (y = x + w, where 'x' is element of [-1, 1]^n
|
||||||
and 'w' is noise)
|
and 'w' is noise)
|
||||||
:return: Most probably sent dataword (element of [0, 1]^k)
|
:return: Most probably sent codeword (element of [0, 1]^k)
|
||||||
"""
|
"""
|
||||||
correlations = np.dot(self._codewords_bpsk, y)
|
correlations = np.dot(self._codewords_bpsk, y)
|
||||||
|
|
||||||
|
|||||||
@ -73,7 +73,7 @@ class ProximalDecoder:
|
|||||||
|
|
||||||
:param y: Vector of received values. (y = x + w, where 'x' is element of [-1, 1]^n
|
:param y: Vector of received values. (y = x + w, where 'x' is element of [-1, 1]^n
|
||||||
and 'w' is noise)
|
and 'w' is noise)
|
||||||
:return: Most probably sent codeword (element of [0, 1]^k)
|
:return: Most probably sent codeword (element of [0, 1]^n)
|
||||||
"""
|
"""
|
||||||
s = np.zeros(self._n)
|
s = np.zeros(self._n)
|
||||||
x_hat = np.zeros(self._n)
|
x_hat = np.zeros(self._n)
|
||||||
|
|||||||
@ -4,7 +4,6 @@ Code from https://github.com/gnuradio/gnuradio/blob/master/gr-fec/python/fec/LDP
|
|||||||
|
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from enum import Enum
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -233,15 +232,15 @@ def get_systematic_H(G: np.array) -> np.array:
|
|||||||
:param G: Generator matrix of the systematic code
|
:param G: Generator matrix of the systematic code
|
||||||
:return: Parity check matrix H
|
:return: Parity check matrix H
|
||||||
"""
|
"""
|
||||||
n, k = G.shape
|
k, n = G.shape
|
||||||
|
|
||||||
I = G[:, :n]
|
I = G[:, :k]
|
||||||
assert np.array_equal(I, np.identity(n))
|
assert np.array_equal(I, np.identity(k))
|
||||||
|
|
||||||
P = G[:, n:]
|
P = G[:, k:]
|
||||||
|
|
||||||
H = np.zeros(shape=(k-n, n + k-n))
|
H = np.zeros(shape=(n-k, k + n-k))
|
||||||
H[:, :n] = P.T
|
H[:, :k] = P.T
|
||||||
H[:, n:] = np.identity(k-n)
|
H[:, k:] = np.identity(n-k)
|
||||||
|
|
||||||
return H
|
return H
|
||||||
|
|||||||
@ -18,7 +18,6 @@ def count_bit_errors(d: np.array, d_hat: np.array) -> int:
|
|||||||
return np.sum(d != d_hat)
|
return np.sum(d != d_hat)
|
||||||
|
|
||||||
|
|
||||||
# TODO: Fix uses of n, k, a everywhere
|
|
||||||
def test_decoder(x: np.array,
|
def test_decoder(x: np.array,
|
||||||
decoder: typing.Any,
|
decoder: typing.Any,
|
||||||
SNRs: typing.Sequence[float] = np.linspace(1, 4, 7),
|
SNRs: typing.Sequence[float] = np.linspace(1, 4, 7),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user