文档采用MATLAB发布,仿真没有跑完。

CCSDS标准的LDPC编译码仿真

本脚本完成了CCSDS标准(o1)版本中适用于深空通信任务的LDPC编译码过程的仿真, 同时给出了在信息位长度为1024,码率为1/2时的误码率仿真结果

撰写人:曹文慧

最后修改日期:2015-03-07

软件版本:MATLAB(R) 2014a

和之前版本(LDPC_Simulation.m)对比,本程序添加功能包括

完成了校验矩阵构造(ccsdscheckmatrix.m)

通过校验矩阵构造(准循环)生成矩阵 (ccsdsgeneratematrix.m)

按照ccsds所述,对编码后数据进行截取,完成符合ccsds文档的ldpc编译码仿真

程序修改包括

之前文件夹内的译码函数均不能对全0项进行正确的处理

问题将得到合适的修正,同时优化了输出显示

Contents

初始设置

清空工作区,数据,关闭所有窗口

clc;clear all;close all;

仿真参数设置

EbN0_dB = 1; % EbN0_dB 误码率范围,向量;

FRAMES_NUM = 1; % FRAMES_NUM 最大仿真帧数目;

MAX_ITER_NUM = 30; % MAX_ITER_NUM 算法最大迭代次数;

MAX_ERROR_FRAME = 200; % MAX_ERROR_FRAME 仿真最大错误帧数目;

bitError = zeros(1,length(EbN0_dB)); % bitError 误码数目统计,向量;

BER = bitError; % BER 误码率,向量;

frameError = bitError; % frameError 误帧数目;

iterNumTotal = zeros(1,length(EbN0_dB)); % iterNumTotal 总迭代次数统计,向量;

INFO_LENGTH = 1024; % INFO_LENGTH 信息位长度

RATE = 1/2; % RATE 码率

SIZE_M = 512; % M矩阵大小(参考CCSDS文档)

打开(新建)文件,保存运行数据

FILE_NAME = [‘LDPC_CCSDS_‘ datestr(now,‘yyyymmdd‘) ‘.txt‘];

fid = fopen(FILE_NAME,‘at+‘);

fprintf(fid,‘日期 %s\n‘,datestr(now,‘yyyymmdd‘));

fprintf(fid,‘%s\n‘,‘CCSDS的LDPC标准中section3中的码,06年版‘);

fprintf(fid,‘信息位长度 = %d, ‘,INFO_LENGTH);

fprintf(fid,‘码率 = %d, ‘,RATE);

H为校验矩阵;G为生成矩阵。通过调用函数实现

H = ccsdscheckmatrix(SIZE_M,RATE);

G = ccsdsgeneratematrix(H,SIZE_M,RATE);

译码准备

[r_mark,c_mark] = find(H~=0);

HColNum = sum(H);

HRowNum = cell(1,size(H,1));

for rowH = 1:size(H,1)

HRowNum{rowH} = find(r_mark==rowH);

end

误码率仿真

在不同EbN0下,对误码率进行仿真

for nEbN0 = 1:length(EbN0_dB)

多帧取统计平均

for nF=1:FRAMES_NUM

编码过程

message = randi([0 1],1,INFO_LENGTH);

encodeData = mod(message*G,2);

调制

transmitSignal = 2*encodeData - 1; %映射 0—-1; 1—+1

transmitSignalPower = sqrt(var(transmitSignal));

transmitSignal = transmitSignal/transmitSignalPower;%归一化

AWGN 信道,SNR和EbN0换算关系

SNR_dB = EbN0_dB((nEbN0)) + 10*log10(2)+10*log10(RATE);

SNR = 10^(SNR_dB/10);

noise = randn(1,length(transmitSignal));

noise = noise/sqrt(SNR); %SNR换算,加噪声

receiveSignal = transmitSignal + noise;

根据CCSDS文档实际上有M个符号没有被传送,此处取其值为0,做仿真上的等效

receiveSignal(end-1*SIZE_M+1:end-0*SIZE_M) = 0;

译码,可调用不同的函数

[iterNum,recoverData] = ...

ldpcdecoderllr(H,HRowNum,HColNum,receiveSignal,SNR,MAX_ITER_NUM);

%ldpcdecoderbp1(H,HRowNum,HColNum,receiveSignal,SNR,MAX_ITER_NUM);

%ldpcdecoderminsum(H,HRowNum,HColNum,receiveSignal,SNR,MAX_ITER_NUM);

% 文件输出

if(nEbN0==1 && nF==1)

fprintf(fid,‘译码程序为ldpcdecoderllr\n‘);

fprintf(fid,‘最大迭代次数 = %d, ‘,MAX_ITER_NUM);

fprintf(fid,‘\n-------------------------------\n‘);

fprintf(fid,‘EbN0\t 总帧数\t 误帧数\t 误比特数\t 平均迭代次数\t 误比特率\t 误帧率\n‘);

% MATLAB的readtable笨笨的不认识中文,所以打一行给他看

fprintf(fid,‘EbN0\t T_Frame\t E_Frames\t E_Bits\t A_IterNums\t BER\t FER\n‘);

end

误比特数,误帧数,迭代次数统计

bitError(nEbN0) = bitError(nEbN0) + ...

sum(abs(message - recoverData(1:length(message))));

frameError(nEbN0) = frameError(nEbN0) + ...

(sum(abs(encodeData - recoverData(1:length(encodeData))))~=0);

iterNumTotal(nEbN0) = iterNumTotal(nEbN0) + iterNum;

停止条件和文件输出

if ( frameError(nEbN0)>=MAX_ERROR_FRAME || nF==FRAMES_NUM)

BER(nEbN0) = bitError(nEbN0)/nF/length(message);

fprintf(fid,‘%3.2g\t %5d\t %4d\t ‘,EbN0_dB(nEbN0),nF,frameError(nEbN0));

fprintf(fid,‘%8d\t %8.6g\t ‘,bitError(nEbN0),iterNumTotal(nEbN0)/nF);

fprintf(fid,‘%e\t %e\n‘,BER(nEbN0),frameError(nEbN0)/nF);

break;

end

if (mod(nf,100)==0)

BER(nEbN0) = bitError(nEbN0)/nF/320;

fprintf(fid,‘\n-------------------------------\n‘);

fprintf(‘Eb/No = %e \n‘,EbN0_dB(nEbN0));

fprintf(‘总帧数 = %d, ‘,nF);

fprintf(‘误帧数 = %d, ‘,frameError(nEbN0));

fprintf(‘误比特数 = %d, ‘,bitError(nEbN0));

fprintf(‘最大迭代次数 = %d, ‘,MAX_ITER_NUM);

fprintf(‘平均迭代次数 = %e, ‘,iterNumTotal(nEbN0)/nF);

fprintf(‘误码率 = %g, ‘,BER(nEbN0));

fprintf(‘误帧率 = %g \n‘,frameError(nEbN0)/nF);

end

end

end

仿真结果

通过编码后实际误码率对比图,不要看下面的图,图没有仿真出来的,太慢了

fclose(fid);

readtable(FILE_NAME,‘HeaderLines‘,6,‘Delimiter‘,‘\t‘)

semilogy(EbN0_dB,BER,‘r‘);

xlabel(‘Eb/N0(dB)‘); ylabel(‘BER‘);

grid on;

ans =

EbN0 T_Frame E_Frames E_Bits A_IterNums BER FER

____ _______ ________ ______ __________ ___ ___

1 1 0 0 27 0 0

原文:http://www.cnblogs.com/sea-wind2/p/4320943.html

ccsds ldpc matlab,CCSDS标准的LDPC编译码仿真相关推荐

  1. 基于matlab编译码器的设计,基于MATLAB循环码编译码仿真

    基于MATLAB循环码编译码仿真(论文11000字) 摘要:在具体了解循环码的编码理论的基础上,使用 M ATLA B 软件设计了循环码编译码器. 通过 M ATLAB 软件实现循环码的编译码 ,通过 ...

  2. 【编码译码】基于matlab HDB3编译码仿真【含Matlab源码 1961期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[编码译码]基于matlab HDB3编译码仿真[含Matlab源码 1961期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  3. 【毕业设计/Matlab系列】基于PCM编译码和2ASK调制解调的通信系统仿真

    Date:2022.5.22 文章目录 前言 1.算法过程 2.仿真效果图 3.核心matlab代码 前言 在大学毕业设计的时候,课题要求实现<基于PCM编译码和2ASK调制解调的通信系统仿真& ...

  4. 基于MATLAB的LDPC编译码仿真,调制为64QAM

    部分源码: % 首先加载G , H clear all load G.mat; load H.mat; max_iter=50; L_frame=size(G,1); n_frame=100; sta ...

  5. 基于matlab的RS编译码仿真,从底层原理分析RS编译码的实现过程

    欢迎订阅<FPGA学习入门100例教程>.<MATLAB学习入门100例教程> 目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础

  6. 5G NR LDPC码(1)—— LDPC码设计原理

    5G NR中规定了控制消息和广播信道用Polar码,数据传输用LDPC码的方案. LDPC属于线性分组码,常用校验矩阵或者Tanner图来描述. 用校验矩阵来描述LDPC码,可以清晰的看到信息比特和校 ...

  7. 码长6075的qc-ldpc编译码的MATLAB误码率仿真

    1.算法简介 为满足高的数据需求,提出一种新的QC-LDPC码.该校验矩阵的校验部分为近似下三角结构,上对角线下面的非零元素可以任意放置,因此是一种半确定的结构.这种结构的码设计灵活,性能也极高.通过 ...

  8. 了解线性分组码的编码原理并编程实现C语言,线性分组码的编译码(DOC).doc

    ****************** 实践教学 ****************** 兰州理工大学 计算机与通信学院 2013年秋季学期 计算机通信 课程设计 题 目: 线性分组码(7,3)码的编译码 ...

  9. LDPC的信道编译码的matlab仿真——LDPC译码最小和和归一化最小和

    1.问题描述: LDPC的信道编译码的matlab仿真--LDPC译码最小和和归一化最小和 2.部分程序: clc; clear all; load H; D=H(1:675,5401:6075); ...

最新文章

  1. 阿里手机小号,测试用
  2. 每次新版本build时,让软件的版本号自增
  3. mvn 打包可执行包_如何用Maven打包可执行jar包
  4. JVM 对象状态判断01
  5. 将Excel数据导入SQL Server数据库
  6. 2020年十大数据中心行业趋势
  7. 网络——Cisco Packet Tracer 思科模拟器组网实验
  8. NOSQL系列-Redis精简版安装与Ruby测试
  9. ASP.NET Core Docker部署
  10. 数据安全架构设计与实战~如何加密结构化数据
  11. python中奖号_Python分析彩票记录并预测中奖号码过程详解
  12. java web html5区别_html5和html有什么区别啊?
  13. 解读netty3.9的数据处理流程(一)
  14. dpdk中文-dpdk虚拟机出错
  15. 电脑上win10的mysql软件老闪退,技术编辑应对win10系统Mysql闪退的修复办法
  16. petalinux 安装
  17. 30 系列显卡是新一代架构,新驱动不支持 cuda 9 以及 cuda 10,所以必须安装 cuda 11
  18. 运行服务器(Tomcat)但是到JDBC这一步,一直报错java.lang.NoClassDefFoundError: Could not initialize class DruidDemo
  19. Java如何生成彩色二维码(利用zxing包)
  20. Unity3D学习 ③ 摄像机视角跟随

热门文章

  1. Ftp下载文件超时处理
  2. java服务器下载jpg等静态资源方法
  3. 工业通讯 | STM32F4xx应用控制器与SoM集成
  4. 让nodeJS支持ES6的词法----babel的安装和使用
  5. JAVA公路车几何图_争当老司机 深入解读自行车几何图表
  6. 广二师的计算机专业好不,惠州学院专业_广东第二师范学院和惠州学院非师范专业哪个比较好...
  7. html5手机不能自动播放音乐,H5案例---解决H5中背景音乐无法自动播放问题
  8. jsp自定义标签的问题Unable to load tag handler class
  9. outlook 无法打开
  10. 新品发布 | 极海半导体工业级互联型APM32F107/F105系列MCU,拓展通信外设助力产品应用创新