【编码译码】LDPC编码和解码【含Matlab源码 2560期】

在这里插入图片描述

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源: 【编码译码】基于matlab LDPC编码和解码【含Matlab源码 2560期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab信号处理(初级版)

备注:
点击上面蓝色字体付费专栏Matlab信号处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab信号处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、部分源代码

clear all
close all
clc

%% 预定义变量
N = 2016;
K = 1008;
R = K/N;

%% 添加工作路径
addpath(‘Encoder’)
addpath(‘Decoder’)

%% H矩阵生成
[ H, Hp, Hs ] = HxMatrixGen();

%% 求四种算法随着Eb/N0变化得出的BER FER
alpha = 0.7; beta = 0.5;
Eb_N0_dB = -1:0.5:2;
BER = zeros(4, length(Eb_N0_dB));
FER = zeros(4, length(Eb_N0_dB));
recordStr = [’ SP’, ’ MS’, ’ NMS’, ’ OMS’];

% 日志记录到 mydiary.txt
diary ‘mylog.txt’
clock;

for Eb_N0_i = 1:1:length(Eb_N0_dB)
disp([‘Eb/N0=’ num2str(Eb_N0_dB(Eb_N0_i)) ‘dB is simulating…’]);
% 设定停止条件
if Eb_N0_dB(Eb_N0_i) <= 1
maxErrorBlocks = 50;
else
maxErrorBlocks = 3;
end

% 设定译码算法最大迭代次数
iterMax = 30;

%设定每个信噪比下最大仿真帧个数
maxBlocks = 10^6;

% 四种算法的总误码数ErrorBits 和 总误帧数ErrorBlocks 和 所有帧的总循环数blocks 在每个Eb/N0仿真前清零
ErrorBits_SP = 0; ErrorBits_MS = 0;
ErrorBits_NMS = 0; ErrorBits_OMS = 0;
ErrorBlocks_SP = 0; ErrorBlocks_MS = 0;
ErrorBlocks_NMS = 0; ErrorBlocks_OMS = 0;
blocks_SP = 0;blocks_MS = 0;
blocks_NMS = 0; blocks_OMS = 0;


% 编码 - BPSK - AWGN
for i = 1:1:maxBlocks
    
    recordStr = [];
    % 算法2编码(s --> x)
    s = randi([0, 1], 1, 1008);
    x = Encoder2(Hs, Hp, s);
    if sum(mod(H*(x'), 2)) > 0
        sprintf('the '+ num2str(i) + ' th encoding is not right');
        continue;
    end

    % BPSK调制
    d = 1 - 2.*x;

    % AWGN
    SNR_dB = Eb_N0_dB(Eb_N0_i) + 10*log10(R) - 10*log10(1/2);
    SNR_linear = 10^(SNR_dB/10);
    sigma = sqrt(1/SNR_linear);
    y = d + sigma*randn(size(d)); % 加噪声

    % 译码端接收
    LLR_y = 2*y/(sigma^2);

    %四种算法分别译码
    %四种算法在 某一Eb/N0下 某一帧传输中 的误比特数 errorbits
    %四种算法在某一Eb/N0下所有帧的总误比特数 ErrorBits
    %四种算法在某一Eb/N0下所有帧的总误帧数 ErrorBlocks
    %四种算法在某一Eb/N0下所有帧的总循环数 blocks
    if ErrorBlocks_SP <= maxErrorBlocks
        v_SP = LDPCDecoder_SP( H, LLR_y, iterMax );
        errorbits_SP = sum(s ~= v_SP);
        ErrorBits_SP = ErrorBits_SP + errorbits_SP;
        blocks_SP = blocks_SP + 1;
        if errorbits_SP ~= 0
            ErrorBlocks_SP = ErrorBlocks_SP + 1; 
        end
        recordStr = [recordStr ' SP'];
    end
    if ErrorBlocks_MS <= maxErrorBlocks
        v_MS = LDPCDecoder_MS( H, LLR_y, iterMax );
        errorbits_MS = sum(s ~= v_MS);
        ErrorBits_MS = ErrorBits_MS + errorbits_MS;
        blocks_MS = blocks_MS + 1;
        if errorbits_MS ~= 0
            ErrorBlocks_MS = ErrorBlocks_MS + 1;
        end
        recordStr = [recordStr ' MS'];
    end
    if ErrorBlocks_NMS <= maxErrorBlocks
        v_NMS = LDPCDecoder_NMS( H, LLR_y, alpha, iterMax );
        errorbits_NMS = sum(s ~= v_NMS);
        ErrorBits_NMS = ErrorBits_NMS + errorbits_NMS;
        blocks_NMS = blocks_NMS + 1;
        if errorbits_NMS ~= 0
            ErrorBlocks_NMS = ErrorBlocks_NMS + 1;
        end
        recordStr = [recordStr ' NMS'];
    end
    if ErrorBlocks_OMS <= maxErrorBlocks
        v_OMS = LDPCDecoder_OMS( H, LLR_y, beta, iterMax );
        errorbits_OMS = sum(s ~= v_OMS);
        ErrorBits_OMS = ErrorBits_OMS + errorbits_OMS;
        blocks_OMS= blocks_OMS + 1;
        if errorbits_OMS ~= 0
            ErrorBlocks_OMS = ErrorBlocks_OMS + 1;
        end
       recordStr = [recordStr ' OMS'];
    end
    
    disp(['    the ' num2str(i) '-th frame of encoding & decoding has finished based on Eb/N0 = ' num2str(Eb_N0_dB(Eb_N0_i)) ', ' recordStr ' is still running.']);
    
    if ErrorBlocks_SP > maxErrorBlocks && ErrorBlocks_MS > maxErrorBlocks && ErrorBlocks_NMS > maxErrorBlocks && ErrorBlocks_OMS > maxErrorBlocks
        break;
    end
end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 邱佳雪.基于Matlab编程的HDB3编码设计[J].计算机与网络. 2017,43(Z1)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值