首页 > 其他分享 >基于LDPC编译码的长距离SC-OFDM通信链路matlab仿真

基于LDPC编译码的长距离SC-OFDM通信链路matlab仿真

时间:2022-10-19 20:44:33浏览次数:87  
标签:OFDM 迭代 iter 译码 算法 SNR matlab LDPC SC

目录

一、理论基础

二、MATLAB仿真程序

三、仿真结果

一、理论基础

VPI光通信系统模拟软件支持灵活的多速率传输系统,通过这个软件,用户可以从基本的光子元素向上层建立模型,如有源和无源波导、定向耦合器、分路器、MMIs、星型耦合器及微环谐振器等。VPI可应用于新型无源集成电路、可调谐激光器及多层半导体器件等应用的模拟设计,新的功能引入了无源PIC元素模块。最新版本的VPI软件可设计高速光传输系统,同时可以选择MPSK,MQAM及 OFDM等调制格式。为了更加充分的研究LDPC性能,将使用VPI光通信模拟平台模拟更加符合实际情况的光通信信道,在VPI中构建如下的测试平台:

 

 

LDPC(low-density parity-check codes)码,即低密度奇偶校验码,其主要原理是通过构造一个系数校验矩阵进行编译码,其最早由Gallager于1962年提出的,但是主要从1995年才开始广泛使用,其中MacKay教授于1995年通过迭代译码的方式,证明了LDPC码具有比Turbo更好的纠错能力。LDPC码具有非常好的编码纠错性能,其可以更接近香浓误码率极限,虽然LDPC纠错码具有优异的性能,但是其理论并不复杂,其译码的复杂度相对于Turbo译码而言更低,而且LDPC编译码,从结构上可以,可以通过并行的处理方式进行,从而大大提高算法译码的吞吐量,适合实际硬件的实现。同时,LDPC纠错码具有非常好的抗突发错误的能力,而光通信系统中,经常会出现连续的突发错误,这个特性使得LDPC在超长距离的光通信系统中具有良好的通信性能,因此LDPC编译码正越来越受到业内的关注。

信道编码的译码算法也决定着LDPC码能否广泛地实际应用。基于置信传递的译码算法,也就是BP算法是最基本、应用最广泛的算法。最小和译码算法是BP算法简化改进的结果这是目前最为常用的两种译码算法。 置信传递的译码算法是一种基于迭代方式的概率译码算法,基本方法如下:

 

 

 

 

 

 根据这个判决式,得到每个比特的概率,分别为0或1。组成一个临时的判决值的矩阵集合y,若满足HT y=0或者迭代次数达到最大的次数,结束迭代;否则从第2步开始继续迭代,直到返回有效的结果。

二、MATLAB仿真程序

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

R = 0.5;%设置码率为1/2;
N = 512;%设置奇偶校验矩阵大小 
M = N*R;
SNR = 0:1:4; %设置Eb/N0;*
Max_iter = 50; %最大迭代次数*
%产生奇偶校验矩阵
H = mackay(M,N);
TJL = 10000;
for i=1:length(SNR)
i
Bit_err(i) = 0; %设置误码率参数
Num_err = 0; %蒙特卡洛模拟次数
Numbers = 0; %误码率累加器
iter_moy_temp = [];%叠加寄存器
while Num_err <= TJL 
fprintf('Eb/N0 = %f\n', SNR(i));
Num_err
Trans_data = round(rand(N-M,1)); %产生需要发送的随机数
[ldpc_code,newH] = func_Enc(Trans_data,H); %LDPC编码
u = [ldpc_code;Trans_data]; %LDPC编码
Trans_BPSK = 2*u-1; %BPSK
%通过高斯信道
N0 = 2*10^(-SNR(i)/10);
Rec_BPSK = Trans_BPSK+sqrt(N0/2)*randn(size(Trans_BPSK));
%LDPC译码 
[vhat,nb_iter] = func_Dec(Rec_BPSK,newH,N0,Max_iter);
iter_moy_temp(end+1) = nb_iter;

[nberr,rat] = biterr(vhat',u);
Num_err = Num_err+nberr;
Numbers = Numbers+1;
end
Bit_err(i) = Num_err/(N*Numbers);
end

figure;
semilogy(SNR,Bit_err,'o-');
xlabel('Eb/N0(dB)');
ylabel('BER');
grid on;
hold on;


if Max_iter == 1
save data1.mat SNR Bit_err
end
if Max_iter == 5
save data5.mat SNR Bit_err
end
if Max_iter == 20
save data20.mat SNR Bit_err
end
if Max_iter == 50
save data50.mat SNR Bit_err
end

三、仿真结果

 

 

 

 

随着迭代次数的增加,LDPC的误码率性能不断增加,但是当迭代次数大于20的时候,其性能增加有限,因此在实际中,我们只要设置一个合理的迭代次数即可,这样不仅可以获得较好的性能,而且可以减少算法仿真的速度。当迭代次数大于50的时候,随着迭代次数的增加,系统的误码率指标并没有显著的降低,这是由于LDPC译码算法其译码迭代过程随着迭代次数的增加而显著收敛,因此无法进一步的提升性能。所以在在本文的后面分析讨论中,我们将选择LDPC迭代次数为50。
 A14-13

标签:OFDM,迭代,iter,译码,算法,SNR,matlab,LDPC,SC
From: https://www.cnblogs.com/matlabfpga/p/16807685.html

相关文章

  • Javascript中的反射机制(五)
    一:什么是反射机制反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。二:在JavaScript中利用for(…in…)语句实现......
  • Javascript事件设计模式(七)
    一:事件设计概述事件机制可以使程序逻辑更加符合现实世界,在JavaScript中很多对象都有自己的事件,例如按钮就有onclick事件,下拉列表框就有onchange事件,通过这些事件可......
  • 前端程序员常用的VScode插件推荐
    前端程序员VScode几款好用的插件推荐   Chinese(Simplified)(简体中文)LanguagePack                  将VScode汉化,对于......
  • VSCode搭建C和C++环境
    @目录前言下载安装设置.vscodec_cpp_properties.jsonlaunch.jsonsettings.json下载CodeRunner插件运行代码VSCode我个人的配置项设置前言说明下如何在VSCode下面搭建C/......
  • 青少年CTFmisc-间谍的录音
    一个压缩包一段录音直接用MMsstv或者qsstv都可以解得到图片百度识图找名字图片里没有找到信息以为名字是flag可能是某种工具加密先看下面的一开始以为是异或结果是......
  • OpenCV cv::Scalar、cv::Mat::zeros
    1cv::Scalar        cv::Scalar是opencv的一个结构体,其定义如下:(c++中的结构体如下,可以存放1~4个数值。)1//!variousconstructors2Scalar_();3......
  • 青少年CTFmisc简单的送分题
    实话实说这不是一般人能做的可能我菜打开flag密码记事本密码平台名字就是qsnctf或多试试其他组合然后维吉尼亚解密接着base64我感觉这个有问题得到密码解flag2一张图......
  • 傻瓜式一键把音乐文件mscz文件转换成midi!
    昨天有个朋友给小编发了一个mscz格式的文件,说是想要把这个mscz格式的音频当做背景音乐添加到视频片段中,然而大部分视频编辑软件操作视频加背景音乐都是不支持mscz格式的,并......
  • 青少年CTFmisc光头强小分队1wp
    逆序base64然后再转图片得到666的密码666的属性有base64Base64一直解得到密码解压key.zip得到key.wav一段是手机拨号一段是转图片使用手机上的Robot36然后再用两边的拨......
  • 解决谷歌浏览器 Added non-passive event listener to a scroll-blocking 'touchsta
    1.问题描述:vue项目中使用ElementUI的表单form校验单的时候,出现以下警告:虽然他不会直接影响项目出现报错或者无法正常运行,但是这系列警告的存在就会为以后项目运行出现未......