NR 物理层编码6 - slide 卷积码

前言

        卷积码 4G Turbo码就是卷积码

这个模型复杂点要深入理解HMM,这边重点讲一下卷积码定义,编码方案,viterbi译码

,4,5,6是HMM的参考部分可以忽略。

     Short description of the Viterbi Algorithm without equations using a trip planning example. Correction: Viterbi first published this in 1967, not 1968 as stated in the video. Here is the original reference: Andrew J. Viterbi, "Error Bounds for Convolutional Codes and an Asymptotically Optimum Decoding Algorithm," IEEE Trans. Information Theory, vol. 13, pp. 259-260, April 1967. Also see the seminal paper by David Forney showing several applications of the Viterbi Algorithm: G. D. Forney, Jr., "The Viterbi Algorithm," Proc. IEEE, Mar. 1973, pp. 268-278.

参考:

   【小白也能看懂】信道编码---卷积码等相关内容_哔哩哔哩_bilibili

     快速画出卷积码的状态图、码树图与网格图_哔哩哔哩_bilibili

目录:

   1:  定义

   2:  常用编码方案

  3:   译码

  4:  HMM 回顾

  5: 概率计算问题

  6:   预测问题(Viterbi)


一  定义

      卷积码将n个信息码元编码成长度为n的码字,这个n码字不仅仅与k个信息元有关

    也与前面N-1段信息元有关

    使用(n,k,N)表示卷积编码器

     k: 输入的k个bit

     n:  编码输出的n 个bit

     N:  编码约束度(移位寄存器个数)

     码率

     R=\frac{k}{n}


二  常用编码方案

 

 2.1 框图

    以(3,1,3)为例,如下图

  输入:

     每次输入1个bit a

     移位寄存器b右移1位

 输出

        c_1=b_1

        c_2=b_1+b_3

         c_3=b_1+b_2+b_3

 

          例: 输入信息元为1011

                   移位寄存器初始化状态为000

                  

2.2 码树图

      后面的网格图就是基于码数图的原理生成的。

      根据当前移位寄存器b_2,b_3的内容定义4种状态:

       a[00],  b[10],  c[01],  d[11]

     

      根据上面的码树图如下

      

     原理

     假设输入后,当前状态为C:  b_2=0,b_3=1

    那么移位寄存器状态有两种[001] [101]

   当为001[ b_1=0,b_2=0,b_3=1]

   编码后 

        c_1=b_1=0,c_2=b_1+b_3=1,c_3=b_1+b_2+b_3=1[011]

        因为下一次输入后,寄存器要移位所以寄存器状态变成X00,即状态a

 依次类推得到上面的码树图

   

2.2 树状图

  分支代表当前输入,节点代表当前输出

# -*- coding: utf-8 -*-
"""
Created on Thu Sep 29 10:57:01 2022

@author: chengxf2
"""
import numpy as np

class turbo():
    
    
    def __init__(self,n=3,k=1,N=3):
        
        self.n = n #编码后长度
        self.k = k #输入信息长度
        self.N = N #寄存器个数
        
   
    '''
    移位寄存器移位
    '''
    def  shift(self, bit):

        for i in reversed(range(1,self.N)):
            self.Reg[i]=self.Reg[i-1]
        self.Reg[0]= bit
        
    
    def  modules(self):
        
         c1 =self.Reg[0]
         c2 = self.Reg[0]+self.Reg[2]
         c3 = self.Reg[0]+self.Reg[1]+self.Reg[2]
         
         
         c2 = int(c2%2)
         c3 = int(c3%2)
         
         return [c1,c2,c3]
        
        
    def Encode(self,bits):
        
        
        num = len(bits)
        self.Reg =  [0]*self.N
        
        
        for i  in range(num):
            
             bit = bits[i] #每次只进一位bit
             self.shift(bit)
             
             c= self.modules()
             print(c)
        
    
if __name__ =="__main__":
    
    bits= [1,1,0,1]
    
    demon = turbo()
    
    demon.Encode(bits)
    

2.3 网格图

   根据前面的码树图很容易得到网格图

 每个分支代表一条路径


三  Viterbi 译码

      维特比译码是根据接收序列,在网格图上找出一条与接收序列汉明距离最小的

算法。

   viterbi 思想:   

   如果最优路径在时刻t通过结点i_t^*,那么这一路径从结点i_t^*

 到终端i_T^{*}的部分路径,对于i_t^{*}i_T^{*}的所有可能的部分路径,必须是最优的。

 假如不是这样,那么从i_t^{*}i_T^{*} 就会有另外一条更好的路径存在,如果把它和

i_1^*i_t^*的部分路径连接起来,就会形成一条比原来更优的路径,这是矛盾的。

       

     如上图c_0B_0,B_1点的距离都是3,但是到起始点的最短路径是4

    A_0-B_0-C_0

假设最短路径经过B_i,则必然经过B_i到起始点的最短路径

 例:

   

      

 最后最短路径为

  O-A_2-B_4-C_3-D_2:2

  111-110 -010-100

 Turbo 码更加复杂一点,后面会单独章节讲解Turbo 码


四  HMM(隐马尔可夫模型)

 3.1 模型

     Hidden Markov model 是统计学里面最基础的一个模型,应用非常广泛.

描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由

各个状态生成一个观测而产生观测随机序列的过程。

     隐藏马尔科夫链随机生成的状态序列,称为状态序列(state sequence)

     每一个状态产生一个观测,由此产生了观测随机序列,称为观测序列(obeservation sequence)

      Q 是所有可能的状态集合

            Q=\begin{Bmatrix} q_1 & q_2 &... &q_N \end{Bmatrix}

     V 是所有可能的观测集合

            V=\begin{Bmatrix} v_1 & v_2 &... &v_M \end{Bmatrix}

     A 是状态转移概率矩阵

            A=[a_{ij}]_{N*N} 

            a_{ij}=P(i_{t+1}=q_j|i_{t}=q_i)

   B  观测概率矩阵

            B=[b_j(k)]_{N*N}

            b_j(k)=P(o_t=v_k|i_t=q_j)

              i_t \in Q, o_k \in V

    \pi 是初始状态概率向量

            \pi_{i}=P(i_1=q_i),i=1,2,..N

             

  隐马尔科模型可以用

              \lambda=(A,B,\pi) 表示

 3.2  状态序列生成过程

  观测序列生成过程:

  输入

        隐马尔可夫模型HMM\lambda=(A,B,\pi),观测序列长度T

  输出

        观测序列   O=(o_1,o_2,...o_T)

流程

       1    按照初始分布 \pi,产生状态序列i_1

       2  令 t =1

       3  按照状态i_t的观测概率分布b_{i_t}(k) 生成o_t

       4  按照状态i_t的状态转移概率分布a_{i_t,i_{t+1}} 产生新的状态i_{t+1}

       5   令t=t+1; 如果t<T 转步3,否则终止

3.3  HMM 3个基本问题

     1 概率计算问题:

      1 概率计算问题

         给定模型和观测序列O,计算P(O|\lambda) 

     2  学习问题:

         已知观测序列O=(o_1,o_2,..o_T),估计模型参数

          \lambda=(A,B,\pi)使得p(o|\lambda)最大

     3  预测问题  decoding 解码问题: 

         已知模型\lambda=(A,B,\pi) 

        和观测序列O=(o_1,o_2,..o_T),求对给定观测条件概率P(I|O)

         最大的状态序列 I=(i_1,i_2,...i_T),即给定观测序列,最有可能的状态序列

         我们前面讲的卷积码

          因为c_1=b_1,可以把它当初观测序列

          [c_1,c_2,c_3] 是状态序列


五  概率计算问题

     4.1 直接计算法

          给定模型\lambda=(A,B,\pi) 和 t时刻的观测序列 O=(o_1,o_2,..o_T)

          计算O 出现的概率P(O|\lambda)

     

          1:  计算状态序列的概率

              P(I|\lambda)=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}..a_{i_{T-1}i_{T}}

          2    计算观察序列概率

                  P(O|I,\lambda)=b_{i_1}(o_1)b_{i_2}(o_2)...b_{i_T}(o_T)

          3   计算联合概率

                   P(O,I|\lambda)=P(O|I,\lambda)P(I|\lambda)

          4    对所有可能的状态序列求和,得到观察序列O的概率P(O|\lambda)

                    P(O|\lambda)=\sum_{I}P(O|I,\lambda)P(I|\lambda)

   4.2  前向算法

      定义:

      给定HMM的模型\lambda,定义到时刻t部分观测序列为o_1,o_2,..,o_t且状态为

q_i的概率为前向概率,记作

        \alpha_t(i)=P(o_1,o_2,...o_t,i_t=q_i|\lambda)

      可以递推求得前向概率\alpha_t(i),以及观测序列p(o|\lambda)

      算法2:(观测序列概率的前向算法)

      输入:

              HMM模型\lambda,观测序列O

     输出:

              观测序列概率P(O|\lambda)

     初值:

                \alpha_t(i)=\pi_ib_i(o_1),i=1,2...N

     递推

                 \alpha_{t+1}=\begin{bmatrix} \sum_{j=1}^{N}\alpha_t(j)a_{ji} \end{bmatrix}b_i(o_{t+1})

    终止:

                  p(O|\lambda)=\sum_{i}^{N}\alpha_T(i)

   4.3  后向算法

        给定HMM模型\lambda,定义在时刻t状态为q_i的条件下,从t+1到T的部分观测序列为o_{t+1},o_{t+2},...o_T

的概率为后向概率

       \beta_t(i)=P(o_{t+1},o_{t+2},....,o_T|i_t=q_i,\lambda)

       算法3: 观测序列概率的后向算法

      输入:

             HMM模型\lambda,观测序列O

     输出:

              观测序列概率P(O|\lambda)

     初始化

         \beta_T(i)=1,i=1,2.,,,N

    递归

          t= T-1,T-2,...,1

       \beta_t(i)=\sum_j^Na_{ij}b_j(o_{t+1})\beta_{t+1}(j),i=1,2..N

      P(O|\lambda)=\sum_{i=1}^{N}\pi_ib_i(o_1)\beta_1(i)

 4.4  常用概率与期望计算

        \alpha_t(i)=p(o_1,o_2,o_t,i_t=q_i) (\lambda 简化掉)

       \beta_t(i)=p(o_{t+1},..o_T|i_t=q_i)

      1: 给定模型和观测序列O,在时刻t处于状态q_i的概率

          r_t(i)=P(i_t=q_i|O)

          根据贝叶斯公式

         p(i_t=q_i|O)=\frac{P(i_t=q_i,O)}{P(O)}

         其中

         p(i_t=q_i,O)=\alpha_t(i)\beta_t(i)

       P(O)=\sum_{j=1}^{N}\alpha_t(j)\beta_t(j)

    2   给定模型和观测序列O,在时刻t处于状态q_i,且在时刻t+1处于状态q_j的概率,记

        \delta_t(i,j)=P(i_t=q_i,i_{t+1}=q_j|O)

        =\frac{P(i_t=q_{i},i_{t+1}=q_j,O)}{\sum_i\sum_j P(i_t=q_{i},i_{t+1}=q_j,O)}

     P(i_t=q_{i},i_{t+1}=q_j,O)=\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)


六  预测算法

 

        已知模型\lambda=(A,B,\pi)和观测序列 O=(o_1,o_2,...o_T),求对给定观测序列条件概率

P(I|O) 最大的状态序列I=(i_1,i_2,..i_T)

    动态规划原理

                  最优路径具有以下特征:

     如果最优路径在时刻t通过结点i_t^*,那么这一路径从结点i_t^*

 到终端i_T^{*}的部分路径,对于i_t^{*}i_T^{*}的所有可能的部分路径,必须是最优的。

 假如不是这样,那么从i_t^{*}i_T^{*} 就会有另外一条更好的路径存在,如果把它和

i_1^*i_t^*的部分路径连接起来,就会形成一条比原来更优的路径,这是矛盾的。

   

  定义

      在时刻t状态为i的所有单个路径(i_1,i_2,...i_t)中的概率最大值

       \delta_t(i)=max_{i_1,i_2,..i_{t-1}}P(i_t=i,i_{t-1},...i_1,o_t,..o_1),i=1,2,..,N

      \delta_{t+1}(i)=max_{i_1,i_2,..i_t}P(i_{t+1}=i,i_t...,i_1,o_{t+1},...o_1)

                   =max_{1\leq j\leq N}\delta_t(j)a_{ji}b_{i}(o_{t+1})

      定义在时刻t状态为i的单个路径(i_1,i_2,...i_{t-1},i)中概率最大的路径的第

t-1个结点为:

       \psi_t(i)=arg max_{1\leq j\leq N}\delta_{t-1}(j)a_{ji},i=1,2,..N

   输入:

            给定模型\lambda=(A,B,\pi),和 观测 O=(o_1,o_2,...o_T)

   输出:

             最优路径 I^{*}=(i_1^*,i_2^*,...,i_T^*)

   初始化

             \delta_1(i)=\pi_ib_i(o_1),i=1,2...,N

             \psi_1(i)=0,i=1,2,..N

  递推 t=2,3...T

              \delta_t(i)=max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji} ]b_{i}(o_t)

             \psi_t(i)=arg max_{1\leq j\leq N}\delta_{t-1}(j)a_{ji},i=1,2,..N

 终止

             P^*=max_{1\leq i \geq N} \delta_T(i)

             i_T^{*}=argmax [\delta_T(i) ]

 最优路径回溯:

           t=T-1,T-2,..1

          i_t^*=\psi_{t+1}(i_{t+1}^{*})

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值