clear all;
clc;
snr_db = 0:10;
%信息源
msg = randint(1,1e3);
ber0 = zeros(1,length(snr_db));
ber1 = zeros(1,length(snr_db));
% Trellises
trel = poly2trellis(3,[7 5]); %Define trellis for rate 1/2 code.
for n=1:length(msg)/2;
for x=1:length(snr_db)
% Code words
code = convenc(msg,trel); % Encode.
state = 20;
inter = randintrlv(code,state);
% BPSK 调制
s0 = sign(msg-0.5);
s1 = sign(inter-0.5);
% AWGN Channel
add_noise0=awgn(s0,snr_db(x),'measured');
add_noise1=awgn(s1,snr_db(x),'measured');
% Deinterleaver with noise for soft decoding
deinter_noise = randdeintrlv(add_noise1,state);
% 解调
r_0 = 0.5*sign(add_noise0) + 0.5;
r_1 = 0.5*sign(add_noise1) + 0.5;
% Deinterleaver
deinter_1 = randdeintrlv(r_1,state);
% Traceback length
tblen = 5;
% vitdec 判决
decoded1 = vitdec(deinter_1,trel,tblen,'cont','hard'); % vitdec 判决
% 比较误码率
[num0,rat0] = biterr(r_0,msg);
[num1,rat1] = biterr(double(decoded1(tblen+1:end)),msg(1:end-tblen));
ber0(n,x) = rat0;
ber1(n,x) = rat1;
end
end
ber0 = mean(ber0);
ber1 = mean(ber1);
ber2 = zeros(1,length(snr_db));
ber3 = zeros(1,length(snr_db));
% Trellises
trel2= poly2trellis(3,[1 6 5]); %Define trellis for rate 1/3 code.
for n=1:length(msg)/2;
for x=1:length(snr_db)
% Code words
code2 = convenc(msg,trel2); % Encode.
state = 20;
inter2 = randintrlv(code2,state);
% BPSK 调制
s2 = sign(msg-0.5);
s3 = sign(inter2-0.5);
% AWGN Channel
add_noise2=awgn(s2,snr_db(x),'measured');
add_noise3=awgn(s3,snr_db(x),'measured');
% Deinterleaver with noise for soft decoding
deinter_noise = randdeintrlv(add_noise1,state);
% 解调
r_2 = 0.5*sign(add_noise2) + 0.5;
r_3 = 0.5*sign(add_noise3) + 0.5;
% Deinterleaver
deinter_3 = randdeintrlv(r_3,state);
% Traceback length
tblen2 = 5;
% vitdec 判决
decoded2 = vitdec(deinter_3,trel2,tblen2,'cont','hard'); % vitdec 判决
% 比较误码率
[num2,rat2] = biterr(r_2,msg);
[num3,rat3] = biterr(double(decoded2(tblen2+1:end)),msg(1:end-tblen2));
ber2(n,x) = rat2;
ber3(n,x) = rat3;
end
end
ber2 = mean(ber2);
ber3 = mean(ber3);
figure;
semilogy(snr_db,ber1,'b-o',snr_db,ber3,'r-s');
xlabel('SNR (dB)');
ylabel('BER');
legend('(2,1,3)','(3,1,3)');
title('不同码率下的编码性能');
- 1
- 2
前往页