基于MATLAB的多进制LDPC译码算法的仿真
Posted fpga&matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于MATLAB的多进制LDPC译码算法的仿真相关的知识,希望对你有一定的参考价值。
1.仿真预览
2.部分核心代码
clc;
clear;
close all;
warning off;
addpath 'functions\\'
q = 4; %定义伽罗达域,支持4,8,16
nbits = log2(q); %多进制符号值
EbNo = [0 0.5 1 1.5 2]; %信噪比
%以下两个值设置小点,这样仿真可以快点,值较大的时候,仿真速度非常慢,但性能较好
M = 24; %校验数
N = 32; %矩阵长度
t = 3; %权值
h = ldpc_generate(M,N,t,q,1); %产生矩阵H
[H,G] = ldpc_h2g(h,q); %产生矩阵G
for kk=1:length(EbNo)
kk
totalNumErr = 0;
count = 0;
SNR = 10^(EbNo(kk)/10);
sigma = 1/(sqrt(SNR));
while (totalNumErr < 40)%仿真越长,效果越OK
kk
totalNumErr
%产生一组随机数
x = floor(rand(1,size(G,1))*q);
%进行多进制准循环LDPC编码
y = func_Ldpc_enc(x,G,q);
%多进制信道处理
yb = (fliplr(de2bi(y,nbits)))';
yb = yb(:);
zb = 2*yb-1;
zb = zb + sigma*randn(size(zb));
f1=1./(1+exp(-2*zb/sigma^2));
f1 = f1(:);
f1 = reshape(f1,nbits,length(y));
f0=1-f1;
junk = ones(q,length(y));
[v0, v1, pp] = func_message_passing(f0,f1,junk);
[z_hat,success, k] = func_Ldpc_dec_log(pp,H,q);
x_hat = z_hat(size(G,2)+1-size(G,1):size(G,2));
x_hat = x_hat';
%统计误码率
totalNumErr = totalNumErr+(sum (x_hat~=x'));
count = count + 1;
end
BERs(kk)=totalNumErr/(count*length(x));
end
figure;
semilogy(EbNo,BERs,'r-o');
xlabel('EbN0');
ylabel('BER');
grid on;
if q == 4
save ERR4_log.mat EbNo BERs
end
if q == 8
save ERR8_log.mat EbNo BERs
end
if q == 16
save ERR16_log.mat EbNo BERs
end
C33
以上是关于基于MATLAB的多进制LDPC译码算法的仿真的主要内容,如果未能解决你的问题,请参考以下文章
误码率仿真基于matlab LDPC编译码误码率仿真含Matlab源码 2079期
误码率仿真基于matlab LDPC编译码误码率仿真含Matlab源码 2079期
LDPC-5译码迭代次数对LDPC译码性能的影响分析——以最小和译码算法为例进行matlab仿真