[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4464 - gnuradio/trunk/gr-trellis/src/lib,
anastas <=