⛄一、获取代码方式
获取代码方式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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除