m基于matlab的里德-穆勒码Reed Muller(RM)编码译码误码率仿真分析

346 阅读3分钟

1.算法描述

       1948年,Bell实验室的C.E.Shannon(香农)发表了《通信的数学理论》,Shannon在该文中指出,任何一个通信信道都有确定的信道容量C,如果通信系统所要求的传输速率R小于C,则存在一种编码方法,当码长n充分大并应用最大似然译码(MLD:MaximumLikelihoodDecdoding)时,信息的错误概率可以达到任意小。

       Shannon指出了可以通过差错控制码在信息传输速率不大于信道容量的前提下实现可靠通信,但却没有给出具体实现差错控制编码的算法。

       1954,Muller提出一种差错控制编码的算法,此后Reed在Muller提出的分组码的基础上得到了一种新的分组码,称为 Reed-Muller码(雷德-穆勒),简记为 RM码。在1969年到1977年之间, RM码在火星探测方面得到了极为广泛的应用。其快速的译码算法非常适合于光纤通信系统。

 

        在Golay码提出之后最主要的一类分组码就是Reed-Muller码。它是Muller在1954年提出的,此后Reed在Muller提出的分组码的基础上得到了一种新的分组码,称为Reed-Muller码,简记为RM码。在1969年到1977年之间,RM码在火星探测方面得到了极为广泛的应用。即使在今天,RM码也具有很大的研究价值,其快速的译码算法非常适合于光纤通信系统。

 

       Reed-Muller(RM)码是一类经典的纠错编码,其编码和译码算法都拥有较低的复杂度,容易通过硬件电路实现。此外,RM码可以通过改变参数形成结构丰富的子类,能够适应不同信道。RM码自上世纪五十年代被Muller和Reed提出至今,已被应用在多种通信系统中,包括深空通信、蜂窝网络等.Reed-Muller(RM)码是一类经典的纠错编码,其编码和译码算法都拥有较低的复杂度,容易通过硬件电路实现。此外,RM码可以通过改变参数形成结构丰富的子类,能够适应不同信道。

1.png

2.png

3.png

   RM码由( r , m ) (r,m)(r,m)两个参数定义,记作RM(r,m)。其中满足0 ≤ r ≤ m 0\le r\le m0≤r≤m,含义为:

4.png

2.仿真效果预览

matlab2013b仿真如下:

  5.png

6.png

7.png

3.MATLAB核心程序 `%调制参数,2为bpsk,4为QPSK,8为8PSK

M = 2;

[mods,demods] = func_modulation(M);

 

%RM编码参数

r         = 2;

m         = 4;

SNR       = 0:9;

Errs      = zeros(1,length(SNR));

 

[V,N,K,I] = func_rm(r,m);

for k = 1:length(SNR)

    k

    Err = 0;

    Num = 0;

    Len = 10000;

    TL  = 500;  

    Rt  = 11/16;%code rate

    N0  = 10^(-SNR(k)/Rt/10);

    while(Err <= TL)

         k

         Err

         Num = Num + 1;

         %产生数据

         Signal    = randint(1,K,M,Len);

         %RM编码

         Signal_RM = func_Encode(Signal,V);

         %调制

         RM_mod    = modulate(mods,Signal_RM);

         %过信道

         RM_Noise  = RM_mod + sqrt(N0)*randn(size(RM_mod));

         %解调

         RM_demod  = demodulate(demods,RM_Noise);

         %RM译码

         Bhat = func_Decode(RM_demod,r,m,V,N,K,I);

         %计算误码率

         Err  = Err + sum(xor(Bhat,Signal));

    end

    Errs(k) = Err/Num/length(Signal);

end    

01_096_m`