summaryrefslogtreecommitdiff
path: root/gr-fec/python/fec/polar/channel_construction_bsc.py
diff options
context:
space:
mode:
Diffstat (limited to 'gr-fec/python/fec/polar/channel_construction_bsc.py')
-rwxr-xr-xgr-fec/python/fec/polar/channel_construction_bsc.py67
1 files changed, 3 insertions, 64 deletions
diff --git a/gr-fec/python/fec/polar/channel_construction_bsc.py b/gr-fec/python/fec/polar/channel_construction_bsc.py
index 69acea861d..e16813fcb7 100755
--- a/gr-fec/python/fec/polar/channel_construction_bsc.py
+++ b/gr-fec/python/fec/polar/channel_construction_bsc.py
@@ -53,56 +53,6 @@ def bsc_channel(p):
return W
-def get_Bn(n):
- # this is a bit reversal matrix.
- lw = int(np.log2(n)) # number of used bits
- indexes = [bit_reverse(i, lw) for i in range(n)]
- Bn = np.zeros((n, n), type(n))
- for i, index in enumerate(indexes):
- Bn[i][index] = 1
- return Bn
-
-
-def get_Fn(n):
- # this matrix defines the actual channel combining.
- if n == 1:
- return np.array([1, ])
- F2 = np.array([[1, 0], [1, 1]], np.int)
- nump = int(np.log2(n)) - 1 # number of Kronecker products to calculate
- Fn = F2
- for i in range(nump):
- Fn = np.kron(Fn, F2)
- return Fn
-
-def get_Gn(n):
- # this matrix is called generator matrix
- if not is_power_of_two(n):
- print "invalid input"
- return None
- if n == 1:
- return np.array([1, ])
- Bn = get_Bn(n)
- Fn = get_Fn(n)
- Gn = np.dot(Bn, Fn)
- return Gn
-
-
-def mutual_information(w):
- '''
- calculate mutual information I(W)
- I(W) = sum over y e Y ( sum over x e X ( ... ) )
- .5 W(y|x) log frac { W(y|x) }{ .5 W(y|0) + .5 W(y|1) }
- '''
- ydim, xdim = np.shape(w)
- i = 0.0
- for y in range(ydim):
- for x in range(xdim):
- v = w[y][x] * np.log2(w[y][x] / (0.5 * w[y][0] + 0.5 * w[y][1]))
- i += v
- i /= 2.0
- return i
-
-
def solver_equation(val, s):
cw_lambda = codeword_lambda_callable(s)
ic_lambda = instantanious_capacity_callable()
@@ -315,27 +265,16 @@ def normalize_q(q, tpm):
def main():
print 'channel construction BSC main'
- n = 10
+ n = 8
m = 2 ** n
- k = m // 2
- design_snr = 0.5
- mu = 32
-
+ design_snr = 0.0
+ mu = 16
z_params = tal_vardy_tpm_algorithm(m, design_snr, mu)
print(z_params)
plt.plot(z_params)
plt.show()
- # q = discretize_awgn(mu, design_snr)
-
-
- # print('discretized:', np.sum(q))
- # qu = upper_convolve(q, mu)
- # print('upper_convolve:', np.sum(qu))
- # q0 = lower_convolve(q, mu)
- # print('lower_convolve:', np.sum(q0))
-
if __name__ == '__main__':
main()