⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maxlogmap_seq.m

📁 Max Log MAP decoding
💻 M
字号:
%function MaxLogMAP_seq(G)%single user transmission of a coded binary stream over an AWGN channel
%MaxLogMAP algorithm
clear all
pack
clc
warning off

start_time = cputime;

%main parameters
EbN0_dB = 0:0.5:5;%energy per data bit to noise ratio
block_len = 128;
block_nb = 782;

%non systematic convolutional code
G = [1 0 1; 1 1 1];%5, 7 in octal
%G = [1 1 0 1; 1 1 1 1];%15, 17 in octal
%G = [1 0 0 1 1; 1 1 1 0 1];%23, 35 in octal
%G = [1 0 1 0 1 1; 1 1 1 1 0 1];%53, 75 in octal
%G = [1 0 1 1 0 1 1; 1 1 1 1 0 0 1];%133, 171 in octal
%G = [1 0 1; 1 1 1; 1 1 1];%5, 7, 7 in octal
%G = [1 0 1 1 0 1 1;1 1 0 0 1 0 1;1 1 1 1 1 0 1];%133, 145, 175 in octal

K = size(G, 2);%constraint length
n0 = size(G, 1);%code rate R=1/n0
rho = 1/n0;
M = K-1;%memory length
state = zeros(1, M);%initial state

%informational signal
randn('seed', 1)
bits_data = 0.5*(1+sign(randn(1, block_len*block_nb)));
bits_data(find(bits_data==0.5)) = 1;
for n=1:block_nb
    bits_in((1:(block_len+M))+(n-1)*(block_len+M)) = [bits_data((1:block_len)+(n-1)*block_len) state];%emitted bits so that the trellis periodically closes (T=block_len)
end

bits_out = [];
for n=1:length(bits_in)
    for k=1:n0
        bits_out = [bits_out xorsum([bits_in(n) state].*G(k, :))];
    end
    state(2:M) = state(1:M-1);%shift
    state(1) = bits_in(n);
end
sig_em = 2*(bits_out - 0.5);%BPSK modulation (1->1, 0->-1)

for iter = 1:length(EbN0_dB)
    disp(['EbN0_dB = ' num2str(EbN0_dB(iter))])
    %channel
    Ps = mean(abs(sig_em).^2);
    Ec = 1*Ps;%coded bit energy
    N0 = Ec*10^(-(EbN0_dB(iter) + 10*log10(rho))/10);
    sigma2 = N0/2;
    noise = sqrt(sigma2)*randn(1, length(sig_em));
    sig_rec = sig_em + noise;
    
    %block by block decodification
    LLRd = zeros(1, block_nb*block_len);
    for n=1:block_nb
        LLRd((1:(block_len+M))+(n-1)*(block_len+M)) = MaxLogMAPdec(sig_rec((1:n0*(block_len+M))+(n-1)*n0*(block_len+M)), G, sigma2);
    end
    
    %compute BER only using the data bits
    buffer = (1+sign(LLRd))/2;
    bits_rec = [];
    for n=1:block_nb
        bits_rec = [bits_rec buffer((1:block_len)+(n-1)*(block_len+M))];
    end
    clear buffer
    BER(iter) = length(find(bits_rec-bits_data))/length(bits_data);
    
end

%BER
stop_time = cputime - start_time;

figure
semilogy(EbN0_dB, BER, 'o-')
grid on
xlabel('E_b/N_0 [dB]')
ylabel('BER')

%filename = ['MaxLogMAP_' num2str(n0) '_' num2str(K) '_' num2str(sum(sum(G)))];
%save(filename, 'EbN0_dB', 'BER', 'rho', 'G', 'stop_time') 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -