commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r3469 - in gnuradio/trunk/gr-trellis: doc src/lib


From: anastas
Subject: [Commit-gnuradio] r3469 - in gnuradio/trunk/gr-trellis: doc src/lib
Date: Sun, 3 Sep 2006 14:27:42 -0600 (MDT)

Author: anastas
Date: 2006-09-03 14:27:42 -0600 (Sun, 03 Sep 2006)
New Revision: 3469

Modified:
   gnuradio/trunk/gr-trellis/doc/gr-trellis.xml
   gnuradio/trunk/gr-trellis/doc/test_tcm.py
   gnuradio/trunk/gr-trellis/doc/test_tcm.py.xml
   gnuradio/trunk/gr-trellis/src/lib/interleaver.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.cc.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_siso_combined_f.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.cc
Log:
Refactored some common functions for metric calculations. Updated the 
documentation.

Modified: gnuradio/trunk/gr-trellis/doc/gr-trellis.xml
===================================================================
--- gnuradio/trunk/gr-trellis/doc/gr-trellis.xml        2006-09-03 20:19:30 UTC 
(rev 3468)
+++ gnuradio/trunk/gr-trellis/doc/gr-trellis.xml        2006-09-03 20:27:42 UTC 
(rev 3469)
@@ -341,28 +341,115 @@
 
 <!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
 <sect2 id="encoder"><title>Trellis Encoder</title>
-
 <para>
 The trellis.encoder_XX(FSM, ST) block instantiates an FSM encoder 
corresponding to the fsm FSM and having initial state ST. The input and output 
is a sequence of bytes, shorts or integers. 
 </para>
-
 </sect2>
 
 <!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
 <sect2 id="decoder"><title>Viterbi Decoder</title>
+<para>
+The trellis.viterbi_X(FSM, K, S0, SK) block instantiates a Viterbi decoder 
+for a sequence of K trellis steps generated by the given FSM and with initial 
and final states set to S0 and SK, respectively (S0 and/or SK are set to -1
+if the corresponding states are not fixed/known at the receiver side).
+The output of this block is a sequence of K bytes, shorts or integers 
representing the estimated input (i.e., uncoded) sequence.
+The input is a sequence of K x FSM.O( ) floats, where the k x K + i 
+float represents the cost associated with the k-th
+step in the trellis and the i-th FSM output.
+Observe that these inputs are generated externally and thus the Viterbi block 
is not informed of their meaning (they can be genarated as soft or hard inputs, 
etc); the only requirement is that they represent additive costs.
+</para>
+</sect2>
 
+<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
+<sect2 id="metrics"><title>Metrics Calculator</title>
 <para>
-The trellis.viterbi_X(FSM, K, S0, SK) block instantiates a Viterbi decoder
-for an underlying ...
+The trellis.metrics_X(O,D,TABLE,TYPE) block is responsible for 
+transforming the channel output to the stream of metrics appropriate as 
+inputs to the Viterbi block described above. For each D input 
bytes/shorts/integers/floats/complexes it produces O output floats 
+
 </para>
 
+<para>
+
+The parameter TYPE dictates how these metrics are generated:
+
+<itemizedlist>
+<listitem><para>
+TRELLIS_EUCLIDEAN: for each D-dimensional vector 
+r<subscript>k</subscript>=
+(r<subscript>k,1</subscript>,r<subscript>k,2</subscript>,...,r<subscript>k,D</subscript>)
 
+evaluates
+</para>
+<para>
+||r<subscript>k</subscript>-c<subscript>i</subscript>||<superscript>2</superscript>
 = sum<subscript>j=1</subscript><superscript>D</superscript> 
|r<subscript>k,j</subscript>-c<subscript>i,j</subscript>|<superscript>2</superscript>
+</para>
+<para>
+for each of the O hypothesized ouput
+symbols c<subscript>i</subscript> = 
(c<subscript>i,1</subscript>,c<subscript>i,2</subscript>,...,c<subscript>i,D</subscript>)
 defined in the vector TABLE,
+where TABLE[i * D + j] = c<subscript>i,j</subscript>.
+</para></listitem>
+
+
+<listitem><para>
+TRELLIS_HARD_SYMBOL: for each D-dimensional vector 
+r<subscript>k</subscript>=
+(r<subscript>k,1</subscript>,r<subscript>k,2</subscript>,...,r<subscript>k,D</subscript>)
 
+evaluates
+</para>
+<para>
+i<subscript>0</subscript>= argmax<subscript>i</subscript> 
||r<subscript>k</subscript>-c<subscript>i</subscript>||<superscript>2</superscript>
 = 
+argmax<subscript>i</subscript> 
sum<subscript>j=1</subscript><superscript>D</superscript> 
|r<subscript>k,j</subscript>-c<subscript>i,j</subscript>|<superscript>2</superscript>
+</para>
+<para>
+and outputs a sequence of O floats of the form (0,...,0,1,0,...,0), where the 
+i<subscript>0</subscript> position is set to 1. This corresponds to generating 
hard inputs (based on the symbol-wise Hamming distance) to the Viterbi 
algorithm.
+</para></listitem>
+
+
+<listitem><para>
+TRELLIS_HARD_BIT (not yet implemented): for each D-dimensional vector 
+r<subscript>k</subscript>=
+(r<subscript>k,1</subscript>,r<subscript>k,2</subscript>,...,r<subscript>k,D</subscript>)
 
+evaluates
+</para>
+<para>
+i<subscript>0</subscript>= argmax<subscript>i</subscript> 
||r<subscript>k</subscript>-c<subscript>i</subscript>||<superscript>2</superscript>
 = 
+argmax<subscript>i</subscript> 
sum<subscript>j=1</subscript><superscript>D</superscript> 
(r<subscript>k,j</subscript>-c<subscript>i,j</subscript>)<superscript>2</superscript>
+</para>
+<para>
+and outputs a sequence of O floats of the form 
(d<subscript>1</subscript>,d<subscript>2</subscript>,...,d<subscript>O</subscript>),
 where the 
+d<subscript>i</subscript> is the bitwise Hamming distance between i and  
i<subscript>0</subscript>. This corresponds to generating hard inputs (based on 
the bit-wise Hamming distance) to the Viterbi algorithm.
+</para></listitem>
+
+
+</itemizedlist>
+
+
+</para>
 </sect2>
 
 
 
 
+<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
+<sect2 id="viterbi_combined"><title>Combined Metrics Calculator and Viterbi 
Decoder</title>
+<para>
+Although the separation of metric calculation and Viterbi algorithm blocks
+is consistent with our goal of providing general blocks that can be easily 
+reused, this separation might result in large input/output buffer sizes
+betwen blocks. Indeed for an FSM with a large output alphabet, the 
+output of the metric block/input of the Viterbi block is FSM.O( ) floats for
+each trellis step. Sometimes this results in buffer overflow even for
+moderate sequence lengths.
+To overcome this problem we provide a block that incorporates the metric 
calculation and Viterbi algorithm into a single GNU Radio block, namely
+trellis.viterbi_combined_X( FSM, K, S0, SK, D, TABLE, TYPE) where the 
arguments are exactly those used in the aforementioned two blocks.
+</para>
+</sect2>
 
 
+
+
+
 </sect1>
 
 
@@ -400,7 +487,7 @@
 The FSM is first intantiated in "main" by 
 </para>
 <programlisting>
- 62      f=trellis.fsm(fname) # get the FSM specification from a file (will 
hopefully be automated in the future...)
+ 62      f=trellis.fsm(fname) # get the FSM specification from a file
 </programlisting>
 
 
@@ -426,11 +513,11 @@
 
 
 <para>
-The FSM will produce K output symbols (remeber the FSM produces always one 
output symbol for each input symbol). Each of these symbols needs to be 
modulated. Since we are simulating the communication system, we need not 
simulate the actual waveforms. An M-ary, N-dimensional
-modulation is completely specified by a set of M, N-dimensional real vectors. 
In "fsm_utils.py" file we give a number of useful modulations with the 
following format: modulation = (N,constellation), where
-constellation=[c11,c12,...,c1N,c21,c22,...,c2N,...,cM1,cM2,...cMN].
+The FSM will produce K output symbols (remeber the FSM produces always one 
output symbol for each input symbol). Each of these symbols needs to be 
modulated. Since we are simulating the communication system, we need not 
simulate the actual waveforms. An M-ary, D-dimensional
+modulation is completely specified by a set of M, D-dimensional real vectors. 
In "fsm_utils.py" file we give a number of useful modulations with the 
following format: modulation = (D,constellation), where
+constellation=[c11,c12,...,c1D,c21,c22,...,c2D,...,cM1,cM2,...cMD].
 The meaning of the above is that every constellation point c_i
-is an N-dimnsional vector c_i=(ci1,ci2,...,ciN)
+is an D-dimnsional vector c_i=(ci1,ci2,...,ciD)
 For instance, 4-ary PAM is represented as
 (1,[-3, -1, 1, 3]), while QPSK is represented as
 (2,[1, 0, 0, 1, 0, -1, -1, 0]). In our example we choose QPSK modulation.
@@ -487,7 +574,7 @@
 We now need to modulate the FSM output symbols.
 The "chunks_to_symbols_sf" is essentially a memoryless mapper which 
 for each input symbol y_k 
-outputs a sequence of N numbers ci1,ci2,...,ciN  representing the 
+outputs a sequence of D numbers ci1,ci2,...,ciD  representing the 
 coordianates of the constellation symbol c_i with i=y_k.
 </para>
 <programlisting>
@@ -496,8 +583,8 @@
 
 <para>
 The channel is AWGN with appropriate noise variance.
-For each transmitted symbol c_k=(ck1,ck2,...,ckN) we receive a noisy version
-r_k=(rk1,rk2,...,rkN).
+For each transmitted symbol c_k=(ck1,ck2,...,ckD) we receive a noisy version
+r_k=(rk1,rk2,...,rkD).
 </para>
 <programlisting>
  22      # CHANNEL
@@ -522,10 +609,10 @@
 O such numbers (one for each possible output symbol y_k). 
 This is done 
 in "metrics_f". In particular, metrics_f is a memoryless device
-taking N inputs at a time and producing O outputs. The N inputs are
-rk1,rk2,...,rkN.
+taking D inputs at a time and producing O outputs. The D inputs are
+rk1,rk2,...,rkD.
 The O outputs
-are the costs associated with observations rk1,rk2,...,rkN and
+are the costs associated with observations rk1,rk2,...,rkD and
 hypothesized output symbols c_1,c_2,...,c_M. For instance,
 if we choose to perform soft-input VA, we need to evaluate
 the Euclidean distance between r_k and each of c_1,c_2,...,c_M,
@@ -592,7 +679,7 @@
 
 <listitem>
 <para>
-Optimize the VA code.
+Optimize the VA code if possible.
 </para>
 </listitem>
 

Modified: gnuradio/trunk/gr-trellis/doc/test_tcm.py
===================================================================
--- gnuradio/trunk/gr-trellis/doc/test_tcm.py   2006-09-03 20:19:30 UTC (rev 
3468)
+++ gnuradio/trunk/gr-trellis/doc/test_tcm.py   2006-09-03 20:27:42 UTC (rev 
3469)
@@ -59,7 +59,7 @@
         sys.exit (1)
 
     # system parameters
-    f=trellis.fsm(fname) # get the FSM specification from a file (will 
hopefully be automated in the future...)
+    f=trellis.fsm(fname) # get the FSM specification from a file
     Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
     bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM 
input symbol
     K=Kb/bitspersymbol # packet size in trellis steps

Modified: gnuradio/trunk/gr-trellis/doc/test_tcm.py.xml
===================================================================
--- gnuradio/trunk/gr-trellis/doc/test_tcm.py.xml       2006-09-03 20:19:30 UTC 
(rev 3468)
+++ gnuradio/trunk/gr-trellis/doc/test_tcm.py.xml       2006-09-03 20:27:42 UTC 
(rev 3469)
@@ -61,7 +61,7 @@
  59          sys.exit (1)
  60  
  61      # system parameters
- 62      f=trellis.fsm(fname) # get the FSM specification from a file (will 
hopefully be automated in the future...)
+ 62      f=trellis.fsm(fname) # get the FSM specification from a file
  63      Kb=1024*16  # packet size in bits (make it multiple of 16 so it can 
be packed in a short)
  64      bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per 
FSM input symbol
  65      K=Kb/bitspersymbol # packet size in trellis steps

Modified: gnuradio/trunk/gr-trellis/src/lib/interleaver.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/interleaver.cc    2006-09-03 20:19:30 UTC 
(rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/interleaver.cc    2006-09-03 20:27:42 UTC 
(rev 3469)
@@ -97,7 +97,7 @@
     d_INTER[i]=i;
     tmp[i] = rand(); 
   }
-  //quicksort_index <int> (tmp,d_INTER,0,d_K-1); got to resolve this...
+  //quicksort_index <int> (tmp,d_INTER,0,d_K-1); //got to resolve this...
   quicksort_index1 (tmp,d_INTER,0,d_K-1);
 
   // generate DEINTER table

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc    2006-09-03 
20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc    2006-09-03 
20:27:42 UTC (rev 3469)
@@ -24,7 +24,9 @@
 #include <stdexcept>
 #include "trellis_calc_metric.h"
 
-void calc_metric_s(int O, int D, const std::vector<short> &TABLE, const short 
*in, float *metric, trellis_metric_type_t type)
+
+
+void calc_metric(int O, int D, const std::vector<short> &TABLE, const short 
*in, float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -64,8 +66,7 @@
 }
 
 
-
-void calc_metric_i(int O, int D, const std::vector<int> &TABLE, const int *in, 
float *metric, trellis_metric_type_t type)
+void calc_metric(int O, int D, const std::vector<int> &TABLE, const int *in, 
float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -106,7 +107,7 @@
 
 
 
-void calc_metric_f(int O, int D, const std::vector<float> &TABLE, const float 
*in, float *metric, trellis_metric_type_t type)
+void calc_metric(int O, int D, const std::vector<float> &TABLE, const float 
*in, float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -146,7 +147,7 @@
 }
 
 
-void calc_metric_c(int O, int D, const std::vector<gr_complex> &TABLE, const 
gr_complex *in, float *metric, trellis_metric_type_t type)
+void calc_metric(int O, int D, const std::vector<gr_complex> &TABLE, const 
gr_complex *in, float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -183,3 +184,47 @@
     throw std::runtime_error ("Invalid metric type.");
   }
 }
+
+
+/*
+template <class T> void calc_metric(int O, int D, const std::vector<T> &TABLE, 
const T *in, float *metric, trellis_metric_type_t type)
+{
+  float minm = FLT_MAX;
+  int minmi = 0;
+
+  switch (type){
+  case TRELLIS_EUCLIDEAN:
+    for(int o=0;o<O;o++) {
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        T s=in[m]-TABLE[o*D+m];
+        gr_complex sc(1.0*s,0);
+        metric[o]+=(s*conj(s)).real();
+      }
+    }
+    break;
+  case TRELLIS_HARD_SYMBOL:
+    for(int o=0;o<O;o++) {
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        T s=in[m]-TABLE[o*D+m];
+        gr_complex sc(1.0*s,0);
+        metric[o]+=(s*conj(s)).real();
+      }
+      if(metric[o]<minm) {
+        minm=metric[o];
+        minmi=o;
+      }
+    }
+    for(int o=0;o<O;o++) {
+      metric[o] = (o==minmi?0.0:1.0);
+    }
+    break;
+  case TRELLIS_HARD_BIT:
+    throw std::runtime_error ("Invalid metric type (not yet implemented).");
+    break;
+  default:
+    throw std::runtime_error ("Invalid metric type.");
+  }
+}
+*/

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h     2006-09-03 
20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h     2006-09-03 
20:27:42 UTC (rev 3469)
@@ -27,12 +27,16 @@
 #include <gr_complex.h>
 #include <trellis_metric_type.h>
 
-void calc_metric_s(int O, int D, const std::vector<short> &TABLE, const short 
*in, float *metric, trellis_metric_type_t type);
 
-void calc_metric_i(int O, int D, const std::vector<int> &TABLE, const int *in, 
float *metric, trellis_metric_type_t type);
+void calc_metric(int O, int D, const std::vector<short> &TABLE, const short 
*in, float *metric, trellis_metric_type_t type);
 
-void calc_metric_f(int O, int D, const std::vector<float> &TABLE, const float 
*in, float *metric, trellis_metric_type_t type);
+void calc_metric(int O, int D, const std::vector<int> &TABLE, const int *in, 
float *metric, trellis_metric_type_t type);
 
-void calc_metric_c(int O, int D, const std::vector<gr_complex> &TABLE, const 
gr_complex *in, float *metric, trellis_metric_type_t type);
+void calc_metric(int O, int D, const std::vector<float> &TABLE, const float 
*in, float *metric, trellis_metric_type_t type);
 
+void calc_metric(int O, int D, const std::vector<gr_complex> &TABLE, const 
gr_complex *in, float *metric, trellis_metric_type_t type);
+
+
+//template <class T> void calc_metric(int O, int D, const std::vector<T> 
&TABLE, const T *in, float *metric, trellis_metric_type_t type);
+
 #endif

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.cc.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.cc.t    2006-09-03 
20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.cc.t    2006-09-03 
20:27:42 UTC (rev 3469)
@@ -83,6 +83,7 @@
   float *out = (float *) output_items[m];
 
   for (int i = 0; i < noutput_items / d_O ; i++){
+/*
 #if @IS_SHORT@
     calc_metric_s(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #elif @IS_INT@
@@ -92,6 +93,8 @@
 #elif @IS_COMPLEX@
     calc_metric_c(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #endif
+*/
+    calc_metric(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
   } 
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.cc      2006-09-03 
20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.cc      2006-09-03 
20:27:42 UTC (rev 3469)
@@ -83,6 +83,7 @@
   float *out = (float *) output_items[m];
 
   for (int i = 0; i < noutput_items / d_O ; i++){
+/*
 #if 0
     calc_metric_s(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #elif 0
@@ -92,6 +93,8 @@
 #elif 1
     calc_metric_c(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #endif
+*/
+    calc_metric(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
   } 
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.cc      2006-09-03 
20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.cc      2006-09-03 
20:27:42 UTC (rev 3469)
@@ -83,6 +83,7 @@
   float *out = (float *) output_items[m];
 
   for (int i = 0; i < noutput_items / d_O ; i++){
+/*
 #if 0
     calc_metric_s(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #elif 0
@@ -92,6 +93,8 @@
 #elif 0
     calc_metric_c(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #endif
+*/
+    calc_metric(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
   } 
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.cc      2006-09-03 
20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.cc      2006-09-03 
20:27:42 UTC (rev 3469)
@@ -83,6 +83,7 @@
   float *out = (float *) output_items[m];
 
   for (int i = 0; i < noutput_items / d_O ; i++){
+/*
 #if 0
     calc_metric_s(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #elif 1
@@ -92,6 +93,8 @@
 #elif 0
     calc_metric_c(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #endif
+*/
+    calc_metric(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
   } 
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.cc      2006-09-03 
20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.cc      2006-09-03 
20:27:42 UTC (rev 3469)
@@ -83,6 +83,7 @@
   float *out = (float *) output_items[m];
 
   for (int i = 0; i < noutput_items / d_O ; i++){
+/*
 #if 1
     calc_metric_s(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #elif 0
@@ -92,6 +93,8 @@
 #elif 0
     calc_metric_c(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
 #endif
+*/
+    calc_metric(d_O, d_D, d_TABLE,&(in[i*d_D]),&(out[i*d_O]), d_TYPE);
   } 
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_siso_combined_f.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_siso_combined_f.cc        
2006-09-03 20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_siso_combined_f.cc        
2006-09-03 20:27:42 UTC (rev 3469)
@@ -167,7 +167,7 @@
   }
 
   for(int k=0;k<K;k++) { // forward recursion
-      calc_metric_f(O, D, TABLE, &(observations[k*D]), &(prioro[k*O]),TYPE); 
// calc metrics
+      calc_metric(O, D, TABLE, &(observations[k*D]), &(prioro[k*O]),TYPE); // 
calc metrics
       norm=INF;
       for(int j=0;j<S;j++) {
           minm=INF;

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t   
2006-09-03 20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t   
2006-09-03 20:27:42 UTC (rev 3469)
@@ -114,7 +114,7 @@
 
   alphai=0;
   for(int k=0;k<K;k++) {
-      calc_metric_f(O, D, TABLE, &(in[k*D]), metric,TYPE); // calc metrics
+      calc_metric(O, D, TABLE, &(in[k*D]), metric,TYPE); // calc metrics
       norm=INF;
       for(int j=0;j<S;j++) { // for each next state do ACS
           minm=INF;

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.cc     
2006-09-03 20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.cc     
2006-09-03 20:27:42 UTC (rev 3469)
@@ -114,7 +114,7 @@
 
   alphai=0;
   for(int k=0;k<K;k++) {
-      calc_metric_f(O, D, TABLE, &(in[k*D]), metric,TYPE); // calc metrics
+      calc_metric(O, D, TABLE, &(in[k*D]), metric,TYPE); // calc metrics
       norm=INF;
       for(int j=0;j<S;j++) { // for each next state do ACS
           minm=INF;

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.cc     
2006-09-03 20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.cc     
2006-09-03 20:27:42 UTC (rev 3469)
@@ -114,7 +114,7 @@
 
   alphai=0;
   for(int k=0;k<K;k++) {
-      calc_metric_f(O, D, TABLE, &(in[k*D]), metric,TYPE); // calc metrics
+      calc_metric(O, D, TABLE, &(in[k*D]), metric,TYPE); // calc metrics
       norm=INF;
       for(int j=0;j<S;j++) { // for each next state do ACS
           minm=INF;

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.cc     
2006-09-03 20:19:30 UTC (rev 3468)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.cc     
2006-09-03 20:27:42 UTC (rev 3469)
@@ -114,7 +114,7 @@
 
   alphai=0;
   for(int k=0;k<K;k++) {
-      calc_metric_f(O, D, TABLE, &(in[k*D]), metric,TYPE); // calc metrics
+      calc_metric(O, D, TABLE, &(in[k*D]), metric,TYPE); // calc metrics
       norm=INF;
       for(int j=0;j<S;j++) { // for each next state do ACS
           minm=INF;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]