trellis.m
上传用户:look542
上传日期:2009-06-04
资源大小:784k
文件大小:2k
源码类别:

传真(Fax)编程

开发平台:

Matlab

  1. function [next_out, next_state, last_out, last_state] = trellis(g)
  2. % copyright Nov. 1998 Yufei Wu
  3. % MPRG lab, Virginia Tech
  4. % for academic use only
  5. % set up the trellis given code generator g
  6. % g given in binary matrix form. e.g. g = [ 1 1 1; 1 0 1 ];
  7. % next_out(i,1:2): trellis next_out (systematic bit; parity bit) when input = 0, state = i; next_out(i,j) = -1 or 1
  8. % next_out(i,3:4): trellis next_out  (systematic bit; parity bit) when input = 1, state = i;
  9. % next_state(i,1): next state when input = 0, state = i; next_state(i,i) = 1,...2^m
  10. % next_state(i,2): next state when input = 1, state = i;
  11. % last_out(i,1:2): trellis last_out (systematic bit; parity bit) when input = 0, state = i; last_out(i,j) = -1 or 1
  12. % last_out(i,3:4): trellis last_out  (systematic bit; parity bit) when input = 1, state = i;
  13. % last_state(i,1): previous state that comes to state i when info. bit = 0;
  14. % last_state(i,2): previous state that comes to state i when info. bit = 1;
  15. [n,K] = size(g);
  16. m = K - 1;
  17. max_state = 2^m;
  18. % set up next_out and next_state matrices for systematic code
  19. for state=1:max_state
  20.    state_vector = bin_state( state-1, m );
  21.    
  22.    % when receive a 0
  23.    d_k = 0;
  24.    a_k = rem( g(1,:)*[0 state_vector]', 2 );
  25.    [out_0, state_0] = encode_bit(g, a_k, state_vector);
  26.    out_0(1) = 0;
  27.   
  28.    % when receive a 1
  29.    d_k = 1;
  30.    a_k = rem( g(1,:)*[1 state_vector]', 2 );
  31.    [out_1, state_1] = encode_bit(g, a_k, state_vector);
  32.    out_1(1) = 1;
  33.    next_out(state,:) = 2*[out_0 out_1]-1;
  34.    next_state(state,:) = [(int_state(state_0)+1) (int_state(state_1)+1)];
  35. end
  36. % find out which two previous states can come to present state
  37. last_state = zeros(max_state,2);
  38. for bit=0:1
  39.    for state=1:max_state
  40.       last_state(next_state(state,bit+1), bit+1)=state;
  41.       last_out(next_state(state, bit+1), bit*2+1:bit*2+2) ...
  42.          = next_out(state, bit*2+1:bit*2+2);
  43.    end 
  44. end