📄 bicustm_vb_sandp.m
字号:
function [est,est_p]=BICUSTM_VB_SandP(rec_s, g, L_a)
%
% Frame size, info. + tail bits
L_total = length(L_a);
[n,K] = size(g);
m = K - 1;
nstates = 2^m;
Infty = 1e10;
%%
% Set up the trellis defined by g.
[next_out, next_state, last_out, last_state] = trellis(g);
% Initialize path metrics to -Infty
for t=1:L_total+1
for state=1:nstates
path_metric(state,t) = -Infty;
end
end
% Trace forward to compute all the path metrics
path_metric(1,1) = 0;
for t=1:L_total
y = rec_s(2*t-1:2*t);
for state=1:nstates
sym0 = last_out(state,1:2);
sym1 = last_out(state,3:4);
state0 = last_state(state,1);
state1 = last_state(state,2);
Mk0 = y*sym0' - L_a(t)/2 + path_metric(state0,t);
Mk1 = y*sym1' + L_a(t)/2 + path_metric(state1,t);
if Mk0>Mk1
path_metric(state,t+1)=Mk0;
Mdiff(state,t+1) = Mk0 - Mk1;
prev_bit_s(state, t+1) = 0;
else
path_metric(state,t+1)=Mk1;
Mdiff(state,t+1) = Mk1 - Mk0;
prev_bit_s(state,t+1) = 1;
end
end
end
% For decoder 1, trace back from all zero state,
% for decoder two, trace back from the most likely state
mlstate(L_total+1) = 1;
% Trace back to get the estimated bits, and the most likely path
for t=L_total:-1:1
est(t)=prev_bit_s(mlstate(t+1),t+1);
mlstate(t)=last_state(mlstate(t+1),est(t)+1);
%x=last_out(mlstate(t+1),(est(t)+1)*2);
%est_p(t)=(x+1)/2;
%est_p(t)=(last_out(mlstate(t+1),(est(t)+1)*2)+1)/2;
est_p(t)=(next_out(mlstate(t),(est(t)+1)*2)+1)/2;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -