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

1.算法描述

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

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

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

 

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

 

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

 

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

 

2.仿真效果预览

matlab2013b仿真如下:

 

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

 

  

 

posted @ 2023-02-01 22:53  我爱C编程  阅读(210)  评论(0编辑  收藏  举报