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

📄 bcjl2.m

📁 Simon Haykin的《Communication Systems》(《通信系统》)的配套MATLAB源代码。包括脉冲调制、随机过程、和差错编码等。
💻 M
字号:
function L = BCJL2(Datar, code_g ,apriori)% log-BCJL (LOG-MAP algorithm) for decoder 1% Used in Experiment 7, CS: Haykin% states, memory, constraint length and block sizeblock_s = fix(length(Datar)/2);[n,K] = size(code_g); m = K - 1;no_of_states = 2^m;     infty = 1e10;zero=1e-300;% forward recursionalpha(1,1) = 0; alpha(1,2:no_of_states) = -infty*ones(1,no_of_states-1);% code-trellis[nxt_o, nxt_s, lst_o, lst_s] = cnc_trellis(code_g);nxt_o = 2*nxt_o-1;lst_o = 2*lst_o-1;for i = 1:block_s    for cnt_s = 1:no_of_states      branch = -infty*ones(1,no_of_states);      branch(lst_s(cnt_s,1)) = -Datar(2*i-1)+Datar(2*i)*...      lst_o(cnt_s,2)-log(1+exp(apriori(i)));      branch(lst_s(cnt_s,2)) = Datar(2*i-1)+Datar(2*i)*...      lst_o(cnt_s,4)+apriori(i)-log(1+exp(apriori(i)));    if(sum(exp(branch+alpha(i,:)))>zero)         alpha(i+1,cnt_s) = log( sum( exp( branch+alpha(i,:))));       else    alpha(i+1,cnt_s) =-1*infty;    end    end    alpha_max(i+1) = max(alpha(i+1,:));    alpha(i+1,:) = alpha(i+1,:) - alpha_max(i+1);end     % backward recursionbeta(block_s,1:no_of_states)=0;for i = block_s-1:-1:1  for cnt_s = 1:no_of_states     branch = -infty*ones(1,no_of_states);     branch(nxt_s(cnt_s,1)) = -Datar(2*i+1)+Datar(2*i+2)*...     nxt_o(cnt_s,2)-log(1+exp(apriori(i+1)));     branch(nxt_s(cnt_s,2)) = Datar(2*i+1)+Datar(2*i+2)*...     nxt_o(cnt_s,4)+apriori(i+1)-log(1+exp(apriori(i+1)));     if(sum(exp(branch+beta(i+1,:)))>zero)    	beta(i,cnt_s) = log(sum(exp(branch+beta(i+1,:))));          else       beta(i,cnt_s)=-infty;     end     endbeta(i,:) = beta(i,:) - alpha_max(i+1);endfor k = 1:block_s  for cnt_s = 1:no_of_states     branch0 = -Datar(2*k-1)+Datar(2*k)*lst_o(cnt_s,2)-log(1+exp(apriori(k)));     branch1 = Datar(2*k-1)+Datar(2*k)*lst_o(cnt_s,4)+apriori(k)-...         log(1+exp(apriori(k)));     den(cnt_s) = exp( alpha(k,lst_s(cnt_s,1))+branch0+  beta(k,cnt_s));       num(cnt_s) = exp( alpha(k,lst_s(cnt_s,2))+branch1+ beta(k,cnt_s));  endL(k) = log(sum(num)) - log(sum(den));end

⌨️ 快捷键说明

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