前言:
回顾一下,前面讲的互信息I(X,Y) 本质上和机器学习中.决策树里面的ID3,C4.5
划分子树的思想是一样的, 基于信息增益
通讯就像双方讲话,上一章通过理论上证明了 跟对方讲话的最大速率(信道容量C)
这里通过编码方式(Polar码)提高通讯的稳定性。
跟 讲话的方式很像:中文,普通话,英文等(编码)
参考文档:
目录
1: Polar 主要思想
2 总体流程
3:Basic transformation
4 Polar BEC 例子
一 Polar 主要思想
Polar 适用于二进制无记忆信道。
例如 BEC BSC。
传输N个bit, 通过极化后,
一类信道趋近于无噪声,用于传输信息
另一类为噪声信道, 用于传输冻结bit(frozen bits)
其中:
BEC 信道容量
BSC 信道容量
二 总体流程
1 编码过程 combining
生成新的信道:分为两类
噪声信道: :
: ,信道变得更差了
信息信道: :信道变得更好了
2 解码过程 Spliting
循序译码
--- 根据 ,译码出
--- 根据 译码出
,假设
译码正确
三 Basic transformation
这是Polar 的核心思想,如何极化的
2.1 基本结构(Basic transformation)
(模2加,异或运算)
这里W都是BEC信道
其中
信道:
我们发现只有
同时正确的时候,
才能正确解码
同时正确的概率为
,则信道erasure probality为
假设原始的BEC信道
,极化后,
出错概率明显变高了
这种场景:因为
传输的一般都是冻结bit,如固定为0.
只有
同时出错的时候,
才会解码出错,erasure probality 为
假设原始的BEC信道
,极化后,
出错概率明显变低了
通过上面发现一个信道erasure probality 变大了,
信道 erasure probality 小了
再看一下极化后的信道容量,能量不灭
四 Polar BEC 例子
3.1 如下: N=4 ,需要做basic transformation 2次()发送消息
3.2 erasure probality 更新过程
3.3 erasure probality 计算方法
其中
: erasure probality
: erasure probality
第二步:
多了一个sort 动作,把erasure probability 一样的,两两结合
再做一个 basic transformation
最终的目的是区分出好的信道,和烂的信道。
3.4 解码过程 splitting
从上面编码过程可以解码过程一个splitting 过程,依次解出U
四 combing 代码
N = 8,用下面代码算结果是一样的:
N= 1024 情况
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 7 11:58:26 2022
@author: chengxf2
"""
import numpy as np
import matplotlib.pyplot as plt
def DrawErasure(erasureList,N):
x = np.arange(0,N)
y = erasureList
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.scatter(x,y,c = 'r',marker = 'o')
plt.ylabel("erasure")
plt.xlabel("bit index")
plt.legend('erasure')
plt.show()
'''
basic transformation
BEC 信道
'''
def basic_transformation(e):
good_channel = np.power(e,2)
s = 1.0-e
bad_channel = 1.0 - np.power(s,2)
#print("\n good_probality %8.4f -----bad_probality %8.4f"%(good_channel,bad_channel))
return [good_channel,bad_channel]
'''
polar 码
erasure probability
'''
def Polar(N=4,erasureList=[0.5]):
n = np.log2(N)
if np.power(2,n) != N:
print("\n error: ",n,N)
n = int(n)
for i in range(n):
print("\n ----迭代次数----- %d "%i)
cur_erasure = []
for e in erasureList:
erasure = basic_transformation(e)
cur_erasure.extend(erasure)
cur_erasure.sort()
#for erasure in cur_erasure:
#print("\t errase: %8.4f"%erasure)
erasureList =cur_erasure
DrawErasure(erasureList,N)
#basic_transformation(0.5)
n= 11
N = np.power(2,n)
print("\n 输入bit 数",N)
Polar(N)
五 bit reverse
主要作用是对输入进行重排。 排序以后,使得在输入端
其中一半都是做的模二加法,另一半bit直接传过去。
1 N=8
bit reverse 过程