📄 punc_conv.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 + -