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

📄 punc_conv.m

📁 The Viterbi algorithm
💻 M
字号:
% Mahdi Zahedi 5 June 2008
function U = punc_conv(data_in, constlen, codegen, puncpat)
% data_in = [0 1 0 0 1 0 0 1]; % the left bit enter first
% Rate = 2/3; constlen = [5 4]; codegen = [23 35 0; 0 5 13];
[No_in  No_out] = size(codegen);
[next_state,output] = trellisgen(constlen,codegen);
x = fliplr(constlen);
for p=1:No_in
    reg_N(p+1) = sum(x(1:p))-p;
end
n_tap = sum(constlen)-No_in;
reg = zeros(1,n_tap); state=1;
T = length(data_in)/No_in;     % Number of message bits to send through channel
for t = 1:T
    first = No_in*t-(No_in-1);
    last = No_in*t;
    symbol=data_in(last:-1:first);
    symbol_dec = bi2de(symbol)+1; mat=[];
    for k=1:No_in
        m = reg(reg_N(k)+1:reg_N(k+1));
        mm = bitshift(bi2de(m,'left-msb'),-1);
        mat_k = de2bi(mm,x(k)-1,'left-msb');
        mat_k(1) = symbol(k);
        mat = [mat mat_k];
    end
    reg = mat;
    state(t+1) = bi2de(reg,'left-msb')+1;
    w(t,:) = de2bi(output(state(t),symbol_dec), No_out, 'left-msb');
end  % Loop t=1:T
v = reshape(w', 1, size(w,1) * size(w,2));
%% Puncturing
j=1;k=0;
for i=1:length(v)
    if (j>length(puncpat))
        j=1;
    end
    if (puncpat(j) == 1)
        k = k+1;
        U(k) = v(i);
    end
    j = j+1;
end




⌨️ 快捷键说明

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