commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r4464 - gnuradio/trunk/gr-trellis/src/lib


From: anastas
Subject: [Commit-gnuradio] r4464 - gnuradio/trunk/gr-trellis/src/lib
Date: Mon, 12 Feb 2007 22:06:56 -0700 (MST)

Author: anastas
Date: 2007-02-12 22:06:56 -0700 (Mon, 12 Feb 2007)
New Revision: 4464

Modified:
   gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h
Log:
implementation using templates

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc    2007-02-13 
04:52:51 UTC (rev 4463)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc    2007-02-13 
05:06:56 UTC (rev 4464)
@@ -26,7 +26,8 @@
 
 
 
-void calc_metric(int O, int D, const std::vector<short> &TABLE, const short 
*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)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -36,8 +37,10 @@
     for(int o=0;o<O;o++) {
       metric[o]=0.0;
       for (int m=0;m<D;m++) {
-        float s=in[m]-TABLE[o*D+m];
-        metric[o]+=s*s;
+        T s=in[m]-TABLE[o*D+m];
+        //gr_complex sc(1.0*s,0);
+        //metric[o]+=(sc*conj(sc)).real();
+        metric[o]+= s * s;
       }
     }
     break;
@@ -45,8 +48,10 @@
     for(int o=0;o<O;o++) {
       metric[o]=0.0;
       for (int m=0;m<D;m++) {
-        float s=in[m]-TABLE[o*D+m];
-        metric[o]+=s*s;
+        T s=in[m]-TABLE[o*D+m];
+        //gr_complex sc(1.0*s,0);
+        //metric[o]+=(sc*conj(sc)).real();
+        metric[o]+= s * s;
       }
       if(metric[o]<minm) {
         minm=metric[o];
@@ -66,7 +71,19 @@
 }
 
 
-void calc_metric(int O, int D, const std::vector<int> &TABLE, const int *in, 
float *metric, trellis_metric_type_t type)
+
+template
+void calc_metric<short>(int O, int D, const std::vector<short> &TABLE, const 
short *in, float *metric, trellis_metric_type_t type);
+
+template
+void calc_metric<int>(int O, int D, const std::vector<int> &TABLE, const int 
*in, float *metric, trellis_metric_type_t type);
+
+template
+void calc_metric<float>(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<short> &TABLE, const short 
*in, float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -106,8 +123,7 @@
 }
 
 
-
-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<int> &TABLE, const int *in, 
float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -120,7 +136,7 @@
         float s=in[m]-TABLE[o*D+m];
         metric[o]+=s*s;
       }
-    } 
+    }
     break;
   case TRELLIS_HARD_SYMBOL:
     for(int o=0;o<O;o++) {
@@ -147,7 +163,8 @@
 }
 
 
-void calc_metric(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)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -157,16 +174,17 @@
     for(int o=0;o<O;o++) {
       metric[o]=0.0;
       for (int m=0;m<D;m++) {
-        gr_complex s=in[m]-TABLE[o*D+m];
-        metric[o]+=s.real()*s.real()+s.imag()*s.imag();
+        float s=in[m]-TABLE[o*D+m];
+        metric[o]+=s*s;
       }
-    }
+    } 
+    break;
   case TRELLIS_HARD_SYMBOL:
     for(int o=0;o<O;o++) {
       metric[o]=0.0;
       for (int m=0;m<D;m++) {
-        gr_complex s=in[m]-TABLE[o*D+m];
-        metric[o]+=s.real()*s.real()+s.imag()*s.imag();
+        float s=in[m]-TABLE[o*D+m];
+        metric[o]+=s*s;
       }
       if(metric[o]<minm) {
         minm=metric[o];
@@ -184,10 +202,13 @@
     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)
+
+
+
+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;
@@ -197,19 +218,16 @@
     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();
+        gr_complex s=in[m]-TABLE[o*D+m];
+        metric[o]+=s.real()*s.real()+s.imag()*s.imag();
       }
     }
-    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();
+        gr_complex s=in[m]-TABLE[o*D+m];
+        metric[o]+=s.real()*s.real()+s.imag()*s.imag();
       }
       if(metric[o]<minm) {
         minm=metric[o];
@@ -227,4 +245,3 @@
     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     2007-02-13 
04:52:51 UTC (rev 4463)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h     2007-02-13 
05:06:56 UTC (rev 4464)
@@ -28,15 +28,19 @@
 #include <trellis_metric_type.h>
 
 
+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);
+
+/*
 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(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<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





reply via email to

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