【MATLAB项目实战】LDPC-BP信道编码

2023-10-18 05:20

本文主要是介绍【MATLAB项目实战】LDPC-BP信道编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

除了Turbo码之外, Gallger于 1960年提出的低密度校验(Low Density ParityCheck,LDPC)码也能逼近香农界。本节介绍二进制LDPC码的仿真实现
请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

在这里插入图片描述
不同码元长度WER变化情况:
从图中可以看出,码长是影响LDPC码性能的一个重要因素,LDPC码译码性能随着码长的增长有显著的改善。码长为1024的编码比码长为512的编码在性能上约有0.5dB的提高
在这里插入图片描述

主程序:

clc;clear all;
SNRdB=0:0.25:3; %SNR in dB
k=512/4;
n=1024/4; % 码长
niter= 60;% 最大迭代此时
nb_err = zeros(1,length(SNRdB));
nb_code = zeros(1,length(SNRdB));
nb_err_max= 100 ;
nb_code_max= 1e4;
H= gen_h(n,6,3);% 产生H
[Hs,H]=gen_Hs(H); % 化为系统码
Q= Hs(:,1:k)'; % 生成矩阵的Qfor s= 1:length(SNRdB)sigma = 10^(-SNRdB(s)/20);% 其平方是噪声功率while nb_err(s)<nb_err_max && nb_code(s)<nb_code_maxnb_code(s) = nb_code(s)+1;b = rand(1,k)<0.5;c=[b,rem(b*Q,2)];% 系统码编码x=(-1).^c;% BPSK modulationnoise = sigma * randn(1,length(x));y = x+noise;lam_ch= 2*y/sigma^2;%软解调hat_c= msa(lam_ch,niter,H);err = any(hat_c~=c); %c是发送码字,hat_c是硬判决if errnb_err(s)= nb_err(s)+err;disp([nb_err;nb_code])endend
endWER= nb_err./nb_code;
EbN0dB= SNRdB+10*log10(n/k/2);%化成Eb/N0,参考式(1)
figure(1)
semilogy(EbN0dB, WER,'o-','LineWidth',2)
xlabel('Eb/N0')
ylabel('WER')
grid on;
hold onSNRdB=0:0.25:3; %SNR in dB
k=512/2;
n=1024/2; % 码长
niter= 60;% 最大迭代此时
nb_err = zeros(1,length(SNRdB));
nb_code = zeros(1,length(SNRdB));
nb_err_max= 100 ;
nb_code_max= 1e4;
H= gen_h(n,6,3);% 产生H
[Hs,H]=gen_Hs(H); % 化为系统码
Q= Hs(:,1:k)'; % 生成矩阵的Qfor s= 1:length(SNRdB)sigma = 10^(-SNRdB(s)/20);% 其平方是噪声功率while nb_err(s)<nb_err_max && nb_code(s)<nb_code_maxnb_code(s) = nb_code(s)+1;b = rand(1,k)<0.5;c=[b,rem(b*Q,2)];% 系统码编码x=(-1).^c;% BPSK modulationnoise = sigma * randn(1,length(x));y = x+noise;lam_ch= 2*y/sigma^2;%软解调hat_c= msa(lam_ch,niter,H);err = any(hat_c~=c); %c是发送码字,hat_c是硬判决if errnb_err(s)= nb_err(s)+err;disp([nb_err;nb_code])endend
endWER= nb_err./nb_code;
EbN0dB= SNRdB+10*log10(n/k/2);%化成Eb/N0,参考式(1)
figure(1)
semilogy(EbN0dB, WER,'s-','LineWidth',2)
xlabel('Eb/N0')
ylabel('WER')
grid on;
hold onSNRdB=0:0.25:3; %SNR in dB
k=512;
n=1024; % 码长
niter= 60;%最大迭代此时
nb_err = zeros(1,length(SNRdB));
nb_code = zeros(1,length(SNRdB));
nb_err_max= 100 ;
nb_code_max= 1e4;
H= gen_h(n,6,3);%产生H
[Hs,H]=gen_Hs(H); %化为系统码
Q= Hs(:,1:k)'; %生成矩阵的Qfor s= 1:length(SNRdB)sigma = 10^(-SNRdB(s)/20);%其平方是噪声功率while nb_err(s)<nb_err_max && nb_code(s)<nb_code_maxnb_code(s) = nb_code(s)+1;b = rand(1,k)<0.5;c=[b,rem(b*Q,2)];%系统码编码x=(-1).^c;%BPSK modulationnoise = sigma * randn(1,length(x));y = x+noise;lam_ch= 2*y/sigma^2;%软解调hat_c= msa(lam_ch,niter,H);err = any(hat_c~=c); %c是发送码字,hat_c是硬判决if errnb_err(s)= nb_err(s)+err;disp([nb_err;nb_code])endend
endWER= nb_err./nb_code;
EbN0dB= SNRdB+10*log10(n/k/2);%化成Eb/N0,参考式(1)
figure(1)
semilogy(EbN0dB, WER,'^-','LineWidth',2)
xlabel('Eb/N0')
ylabel('WER')
grid on;legend('n=256','n=512','n=1024')

代码链接(包括word文档):https://download.csdn.net/download/qq_45047246/86268695

这篇关于【MATLAB项目实战】LDPC-BP信道编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/230442

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实