NR 物理层编码: 线性分组码

前言:

        OFDM 编码系列必讲的一个是viteribi 算法,这边以4篇

回顾一下编码的基础知识。

 参考:

    https://zhuanlan.zhihu.com/p/524717752  绪论
    https://zhuanlan.zhihu.com/p/524630347  线性码 分组码 以及线性分组码
    https://zhuanlan.zhihu.com/p/524745304   基本理论
     https://zhuanlan.zhihu.com/p/524924359   线性分组码(2)BCH码、RS码
     https://zhuanlan.zhihu.com/p/525899740  编制码

  【通信原理考研】线性分组码的基础计算——题目补充_哔哩哔哩_bilibili

  超哥通信原理线性分组码必考内容讲解_哔哩哔哩_bilibili 线性分组码

【讲题啦】【通信原理考研】北邮习题集第九章题目讲解,线性分组码译码_哔哩哔哩_bilibili

用代码实现的时候,矩阵相乘的时候,先做matmul(对应元素相乘),然后相乘后的结果求

模二加法

The OFDM Tutorial Series goes in depth into the theory and implementation of OFDM wireless communication systems. Starting with the treatment of multipath fading channels, OFDM is introduced as a bandwidth efficient robust communication system for multipath fading channels. Using IEEE 802.11a as a basis, a full OFDM system is described in both theory and implementation. In particular, detailed description of acquisition including packet detection, timing synchronization, carrier frequency offset estimation and correction and channel estimation and equalization is presented along with implementation details. For the Tutorial on OFDM and OFDMNA


一  线性分组码

NR 物理层编码: 线性分组码_第1张图片

1.1 概念:

        输入长度为k位一组的bit流,输出长度为n位一组的bit 流

         加入了 n-k 位的监督位

         经过编码后一般就码字codeword,c

   

 1.2 码重

      码组中1的数量

       例 c=[1001 000]

        w(c)=2

 1.3 码距(汉明距离)

            在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数

            例:如下两个符号

            a =[10101]

            b=[00110] 

             从第一位开始依次有第一位、第四、第五位不同,则海明距离为3

            d = w(a+b): 为a,b 异或运算(模二加法)后的码重

   1.4 编码效率

             r=\frac{k}{n}  

             k: 信息比特数

              n: 编码后长度

低信噪比区域,为什么编码系统的性能有时还不如未编码系统的性能?

编码的过程是给待编码的信息增加一些冗余位,以牺牲带宽来提升纠错能力,获得编码增益。在信噪比较低时,接收信号冗余所引起的能量损失的负面影响超过了其纠错带来的好处。因为信噪比太低,所产生的误码率超过其纠错码的纠错能力(此时纠错码也可能出错),且SNR较低时容易出现连续误码,对纠错码的纠错能力影响很大,所以越纠越错,导致误码率反而增大。

二  线性分组码性质

     2.1 封闭性

            码字集合C 对加法封闭,c_1 ,c_2 \in C, c_1+c_2 \in C

            例:

            设

              C= \begin{bmatrix} 00,01,10,11 \end{bmatrix}

              c_1=00,c_2=10, c_1+c_2=10 \in C

      2.2  全零序列是线性分组码中的一个码字

      2.3  除全零码字外,所有码字最小重量为该码组中最小汉明距离

          例:

          NR 物理层编码: 线性分组码_第2张图片  

            2.4 检错:

                    设要检测的错码个数为n,则要求最小码距为

                    d_{min}\geq n+1

           2.5 纠错:

                   要纠正的错码个数为m,则要求最小码距为

                   d_{min} \geq 2m+1

   例

  如下线性分组码

  d_{min}=4 ->n \leq 3,m \leq \frac{3}{2}

NR 物理层编码: 线性分组码_第3张图片


三  生成矩阵 G 和监督矩阵 H

     3.1 监督矩阵H [r,n]

         (n,k) 线性分组码的监督矩阵为 [r,n] r=n-k

          Hc^T=0

    3.2 生成矩阵 G[k,n]

         c=uG  

      例

 以 SPC码为例, 输入3个bit

G: 每一列对应一个编码过程

编码原理

\left\{\begin{matrix} p_1=u_1+u_2\\ p_2=u_1+u_3 \\ p_3 =u_2+u_3 \end{matrix}\right.

I 对应information 信息部分,Q对应奇偶校验编码

H: 每一行对应一个校验方程

 校验原理 :

 \left\{\begin{matrix} u_1+u_2+p_1=0\\ u_1+u_3+p_2=0 \\ u_2+u_3+p_3=0 \end{matrix}\right.

I 对应的是奇偶校验位, Q^T对应的是奇偶校验编码过程

NR 物理层编码: 线性分组码_第4张图片

例2 从G 生成H

NR 物理层编码: 线性分组码_第5张图片

   3.3 重要结论

    (n,k) 线性分组码最小距离等于d 的充要条件是

    任意H中d-1 列不相关,且d 列线性相关

   注:

    这里的线性相关是上面分组码的线性相关概念,不是线性代数的

NR 物理层编码: 线性分组码_第6张图片

     2个码字线性相关一定要一样

    3个码字组成的集合,要满足加法的封闭性

     就是找任意两列模二加法后,仍在原来集合中

  比如 

100+010=110 \in H

  所以d_{min}=3

  


四   练习题

    

    4.1  若线性分组码的监督矩阵

       H=\begin{bmatrix} 1 &1 & 1 &0 &1 &0 \\ 1& 1 & 0 & 1 &0 &1 \\ 1& 0 & 1 &1 &0 &0 \end{bmatrix}

      收到Y = [1 10000]

     求伴随式S

    解:

     S=yH^T

          NR 物理层编码: 线性分组码_第7张图片

         =[0,0,1]

        里面的加法为模二加法

  b  某线性分组码的生成矩阵

   G=\begin{bmatrix} 0 &0 &1 &1 & 1 & 0&1 \\ 0 &1 & 0 & 0& 1 & 1 &1 \\ 1 & 0 & 0& 1 & 1& 1 & 0 \end{bmatrix}

    Q1   写出系统码生成矩阵表达式

         作初等行变换,左边必须是一个3*3的单位矩阵

         G=[I,Q]

          NR 物理层编码: 线性分组码_第8张图片

         利用监督矩阵性质

      

     Q2  写出监督矩阵H

                    H=[Q^T,I]

     H= ([[1., 0., 1., 1., 0., 0., 0.],
            [1., 1., 1., 0., 1., 0., 0.],
            [1., 1., 0., 0., 0., 1., 0.],
            [0., 1., 1., 0., 0., 0., 1.]])

     Q3   写出编码的最小汉明距离

              d_{min}=4

            比如 【1,1,1,0】+【0,1,1,1】=[1,0,0,1] \notin H  线性无关

            但是【1,1,1,0】+【0,1,1,1】+[1,1,0,1]=[0,1,0,0]  \in H 线性无关

       任意4列一定线性相关。

    Q4  写出所有单个错误图样对应的伴随式

           s=Hc^T

        NR 物理层编码: 线性分组码_第9张图片

     写出对应信息序列101 ,输出码字c,写出Hc^T

Q5  输入U=[1,0,1] 求输出码字

         c=uG=[1,0,1,0,0,1,1]

# -*- coding: utf-8 -*-
"""
Created on Fri Aug 26 13:38:11 2022

@author: chengxf2
"""
import torch  as t

'''
模2加法
'''
def Modulo(a):
     num = t.count_nonzero(a) #非零元素个数
     
     if  num%2 ==0: #偶数
         return 0
     else:
         return 1


def Encode(u=[1,0,1]):
    
    
    g = [[1,0,0, 1,1,1,0],
         [0,1,0, 0,1,1,1],
         [0,0,1, 1,1,0,1]]
    
    G = t.tensor(g, dtype= t.int) #编码矩阵
    U = t.tensor(u, dtype= t.int)
    
    k = G.shape[0] #信息源个数
    n = G.shape[1] #码元长度
    r = n-k #监督元个数
    
    
    print("\n k: %d n: %d  r:%d"%(k,n,r))
    
    
    H = t.zeros((r,n)) #[4,7]
    Q = G[:,k:] #[4,4]
    
    print("\n Q ",Q)
    H[:,0:k]=Q.T
    
    I = t.eye(r)
    
    H[:,k:]=I
    
    print("\n 监督矩阵: ",H)
    
    C =[]
    for i in range(n):
        F = G[:,i] #编码方程
        
        c = t.mul(U,F) #校验结果
        s = Modulo(c) #模二运算
        C.append(s)
    print("\n 编码码字 ",C)
    

    
    
         

'''
奇偶校验方程
'''
def Decode():
    h = [[1,1,1,0,1,0],
         [1,1,0,1,0,1],
         [1,0,1,1,0,0]]
    
    
    y = [[1,1,0,0,0,0]]
    
    S = [] #伴随式
    H = t.tensor(h,dtype= t.int) #监督矩阵
    Y = t.tensor(y,dtype= t.int) #收到的信息
    m = H.shape[0] #校验方程的个数
  
    for i in range(m):
        
        f = H[i,:] #校验线性方程
        s = t.mul(Y,f) #校验结果
        s = Modulo(s) #模二运算
        S.append(s)
    print(S)
    


if __name__ =="__main__":
    Encode()
    #Test()
    

  

你可能感兴趣的:(芯片开发,通讯技术,java,数据库,前端)