注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

highspeedlogic

FPGA/MATLAB/Simulink

 
 
 

日志

 
 

【案例13】多进制LDPC编译码仿真  

2017-03-25 15:32:56|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
多进制LDPC编译码仿真

LDPC编码分为随机LDPC和准循环LDPC;而准循环LDPC(QC-LDPC)码是一类具有低复杂度编码的构造码,它可以利用简单的移位寄存器完成编码,其复杂度与生成矩阵有关。所以准循环LDPC的编码中的H矩阵主要是通过对一个基础矩阵的移位扩展得到的。此外,在构造QC-LDPC的时候,通常使用的方法是进行高斯消元法进行实现的。这里,还得明确一个概念,QC-LDPC指的是你所构造的H矩阵的性质为准循环结构,而高斯消元法是指的时候构造这种准循环结构的一种方法,所以这里并不矛盾。准循环结构式相对于随机校验结构而言的。

clc;
clear;
close all;
warning off;
addpath 'functions\'

q         = 4;                      %定义伽罗达域,支持4,8,16
nbits     = log2(q);                %多进制符号值
EbNo      = [0  0.5  1  1.5 2];   %信噪比

%以下两个值设置小点,这样仿真可以快点,值较大的时候,仿真速度非常慢,但性能较好
M         = 24;              %校验数
N         = 32;             %矩阵长度
t         = 3;               %权值                 
h         = ldpc_generate(M,N,t,q,1); %产生矩阵H
[H,G]     = ldpc_h2g(h,q);                    %产生矩阵G

for kk=1:length(EbNo)
    kk
    totalNumErr = 0;
    count       = 0;
    SNR         = 10^(EbNo(kk)/10);
    sigma       = 1/(sqrt(SNR));    

    while (totalNumErr < 100000)%仿真越长,效果越OK
        kk
        totalNumErr
        
        %产生一组随机数
        x  = floor(rand(1,size(G,1))*q); 
        
        %进行多进制准循环LDPC编码
        y  = func_Ldpc_enc(x,G,q);   
        
        %多进制信道处理
        yb = (fliplr(de2bi(y,nbits)))';      
        yb = yb(:);                          
        zb = 2*yb-1;                      
        zb = zb + sigma*randn(size(zb));      

        f1=1./(1+exp(-2*zb/sigma^2));        
        f1 = f1(:);                         
        f1 = reshape(f1,nbits,length(y));                    
        f0=1-f1;
        junk = ones(q,length(y));           
        [v0, v1, pp] = func_message_passing(f0,f1,junk);    
        
        [z_hat,success, k] = func_Ldpc_dec_log(pp,H,q);
        x_hat = z_hat(size(G,2)+1-size(G,1):size(G,2));
        x_hat = x_hat';    
        
        %统计误码率
        totalNumErr = totalNumErr+(sum (x_hat~=x'));
       
        count = count + 1;
    end
    
    BERs(kk)=totalNumErr/(count*length(x));
end

figure;
semilogy(EbNo,BERs,'r-o');
xlabel('EbN0');
ylabel('BER');
grid on;

if q == 4
   save ERR4_log.mat EbNo BERs
end
if q == 8
   save ERR8_log.mat EbNo BERs
end
if q == 16
   save ERR16_log.mat EbNo BERs
end



非中介,所有课题均由本团队自己完成,承接课题不转包,可以淘宝交易,
 
技术类问题可语音或电话交流,大型课题可当面交易,确保技术实力真实可靠。
 
业内唯一一家专业代做MATLAB/FPGA方面的团队,技术专业可靠。
 
联系方式QQ    :1224848052
联系邮箱Email:1224848052@qq.com
技术网站          :http://www.hslogic.com
 
matlab硕士代做|matlab博士代做|非中介|淘宝交易|MATLAB SCI代写|MATLA期刊代写
FPGA硕士代做|FPGA博士代做|非中介|淘宝交易|FPGA SCI代写|FPGA期刊代写
Simulink硕士代做|Simulink博士代做|非中介|淘宝交易|Simulink SCI代写|Simulink期刊代写
  评论这张
 
阅读(40332)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017