My LDPC BER curve is bad

8 次查看(过去 30 天)
Rishi Balasubramanian
评论: Rahul Raj 2023-8-16
Hello,
For my Masters Thesis, I am trying to simulate Quasi Cyclic Low-density Parity-Check Codes (QC - LDPC) codes on Matlab. Here are the details regarding it.
Parity Matrix - Quasi Cyclic LDPC (93 x 155)
Encoder - Approximate Lower Triangular Encoding (rearrange matrix to ALT form)
Decoders - Sum-Product and Min Sum Decoders.
Message Size - 62 bits
Modulation - BPSK
Channel - AWGN
I believe that I have properly coded. And I have been unable to track where the mistake is happening. But for some unidentifiable reason, by error rates are not what they're expected to be. I have attached the BER curve for reference. Any sort of help would be really appreciated. I have been plucking out all my hair for the past 20+ days failing to create a proper simulation. Thanks in advance.
clear
clc
[bb, Ha] = qcldpc(3, 5, 2, 5, 31); %Creates PCM.
H = alt(Ha); %Rearrange PCM to ALT form for Encoding
[N1, N2] = size(H);
k = N2-N1;
pcs =1;
while (pcs ~= 0)
y = round(rand(1, N2-N1));
encode = enc(H,y);
msg = [y encode];
cs = mod(msg * H', 2); %to detect a proper codeword
pcs = sum(cs);
end
[~, bits] = size(msg);
dB = 1:5; % range of SNR values in dB
R = k/N2; % code rate
iter = 10; %Iterations
N0 = (10.^(-dB/10)); %Variance values
for i = 1 : length(dB)
ber1(i) = 0; ber2(i) = 0;
for j = 1:bits
mod = bpsk(msg); %bpsk modulation
bp = mod';
tx = bp + sqrt(N0(i)/2) * randn(size(bp)); %Transmitted with AWGN
dp(i,:) = dbpsk(tx); %Demodulated
Li = -dp(i,:);
vhat1(i,:) = SPA(tx, Ha, N0(i), iter); %Decoding Using Sum Product Algorithm
vhat2(i,:) = MSA(Li, Ha, iter); %Decoding Using Min Sum Algorithm
[n1, r1] = biterr(vhat1(i,:), msg);
[n2, r2] = biterr(vhat2(i,:), msg);
ber1(i) = ber1(i) + r1;
ber2(i) = ber2(i) + r2;
end
BER1(i) = ber1(i) / (bits * length(dB)); %BER Calculation
BER2(i) = ber2(i) / (bits * length(dB));
end
figure('Name','BER vs SNR','NumberTitle','off');
semilogy(dB, BER1, 'o-');
hold;
semilogy(dB, BER2, 'o--');
legend('SPA','MSA')
grid on;
hold off;
  1 个评论
Rahul Raj
Rahul Raj 2023-8-16
Can you tell what method you are using for creating a quasi-cyclc LDPC code matrix or parity check matrix?

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 PHY Components 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by