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

📄 sova0.m

📁 sova.wuyufeng的译码程序
💻 M
字号:
function L_all = sova(rec_s, g, L_a, ind_dec) % 这个功能implememts软输出Viterbi算法在追溯模式 % Input: %       rec_s: scaled received bits.规模收到比特 rec_s(k) = 0.5 * L_c(k) * y(k) %              L_c = 4 * a * Es/No, reliability value of the channel可靠性价值的渠道%              y: received bits收到比特%       g:  encoder generator matrix in binary form,g(1,:) for feedback, g(2,:) for feedforward%           编码器生成矩阵二进制形式%       L_a: a priori information about the info. bits. Extrinsic info. from the previous%             component decoder先验了解详情。比特。外在信息。由前一组成解码器%       ind_dec: index of the component decoder. 指数的组成解码器。%	          =1: component decoder 组成解码器1; The trellis is terminated to all zero state该网格,是终止所有零状态%    	          =2: component decoder 2; The trellis is not perfectly terminated.该网格是不能完全终止% Output:%       L_all: log ( P(x=1|y) ) / ( P(x=-1|y) )%% Frame size, info. + tail bits帧尺寸,信息。 +尾比特L_total = length(L_a);[n,K] = size(g); m = K - 1;nstates = 2^m;Infty = 1e10;% SOVA window size. Make decision after 'delta' delay. Decide bit k when received bits% for bit (k+delta) are processed. Trace back from (k+delta) to k. %SOVA窗口大小。作出决定后, '三角洲'拖延。决定位k收到时比特位(k+三角洲) ,是处理中。追溯从(k+三角洲)货delta = 30;    % Set up the trellis defined by g.成立了网格的定义,由G.[next_out, next_state, last_out, last_state] = trellis(g);% Initialize path metrics to -Infty 初始化路径度量- inftyfor t=1:L_total+1   for state=1:nstates      path_metric(state,t) = -Infty;   endend% 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(state, t+1) = 0;      else         path_metric(state,t+1)=Mk1;         Mdiff(state,t+1) = Mk1 - Mk0;         prev_bit(state,t+1) = 1;      end   endend      % For decoder 1, trace back from all zero state, 为解码器1 ,追溯从所有零状态,% for decoder two, trace back from the most likely state为解码器两个,追溯从最有可能的状态if ind_dec == 1   mlstate(L_total+1) = 1;else   mlstate(L_total+1) = find( path_metric(:,L_total+1)==max(path_metric(:,L_total+1)) );end% Trace back to get the estimated bits, and the most likely% path追溯得到的估计位,并最有可能的路径for t=L_total:-1:1   est(t) = prev_bit(mlstate(t+1),t+1);   mlstate(t) = last_state(mlstate(t+1), est(t)+1);end% Find the minimum delta that corresponds to a compitition path with different info. bit estimation.寻找最低三角洲对应到一个路径设计竞赛不同信息。位估计。       % Give the soft outputfor t=1:L_total   llr = Infty;   for i=0:delta      if t+i<L_total+1         bit = 1-est(t+i);         temp_state = last_state(mlstate(t+i+1), bit+1);         for j=i-1:-1:0            bit = prev_bit(temp_state,t+j+1);            temp_state = last_state(temp_state, bit+1);         end         if bit~=est(t)             llr = min( llr,Mdiff(mlstate(t+i+1), t+i+1) );         end      end   end   L_all(t) = (2*est(t) - 1) * llr;end                                                      

⌨️ 快捷键说明

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