diff options
author | Marcus Müller <mmueller@gnuradio.org> | 2019-08-07 21:45:12 +0200 |
---|---|---|
committer | Marcus Müller <marcus@hostalia.de> | 2019-08-09 23:04:28 +0200 |
commit | f7bbf2c1d8d780294f3e016aff239ca35eb6516e (patch) | |
tree | e09ab6112e02b2215b2d59ac24d3d6ea2edac745 /gr-trellis/lib/calc_metric.cc | |
parent | 78431dc6941e3acc67c858277dfe4a0ed583643c (diff) |
Tree: clang-format without the include sorting
Diffstat (limited to 'gr-trellis/lib/calc_metric.cc')
-rw-r--r-- | gr-trellis/lib/calc_metric.cc | 440 |
1 files changed, 234 insertions, 206 deletions
diff --git a/gr-trellis/lib/calc_metric.cc b/gr-trellis/lib/calc_metric.cc index bdbb13ea08..587edd437e 100644 --- a/gr-trellis/lib/calc_metric.cc +++ b/gr-trellis/lib/calc_metric.cc @@ -25,224 +25,252 @@ #include <gnuradio/trellis/calc_metric.h> namespace gr { - namespace trellis { - - template <class T> - void calc_metric(int O, int D, const std::vector<T> &TABLE, const T *input, - float *metric, digital::trellis_metric_type_t type) - { - float minm = FLT_MAX; - int minmi = 0; - - switch(type) { - case digital::TRELLIS_EUCLIDEAN: - for(int o = 0; o < O; o++) { - metric[o] = 0.0; - for(int m = 0; m < D; m++) { - T s = input[m]-TABLE[o*D+m]; - //gr_complex sc(1.0*s,0); - //metric[o] += (sc*conj(sc)).real(); - metric[o] += s * s; - } - } - break; - case digital::TRELLIS_HARD_SYMBOL: - for(int o = 0; o < O; o++) { - metric[o] = 0.0; - for(int m = 0; m < D; m++) { - T s = input[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]; - minmi = o; - } - } - for(int o = 0; o < O; o++) { - metric[o] = (o == minmi ? 0.0 : 1.0); - } - break; - case digital::TRELLIS_HARD_BIT: - throw std::runtime_error("calc_metric: Invalid metric type (not yet implemented)."); - break; - default: - throw std::runtime_error("calc_metric: Invalid metric type."); - } +namespace trellis { + +template <class T> +void calc_metric(int O, + int D, + const std::vector<T>& TABLE, + const T* input, + float* metric, + digital::trellis_metric_type_t type) +{ + float minm = FLT_MAX; + int minmi = 0; + + switch (type) { + case digital::TRELLIS_EUCLIDEAN: + for (int o = 0; o < O; o++) { + metric[o] = 0.0; + for (int m = 0; m < D; m++) { + T s = input[m] - TABLE[o * D + m]; + // gr_complex sc(1.0*s,0); + // metric[o] += (sc*conj(sc)).real(); + metric[o] += s * s; + } + } + break; + case digital::TRELLIS_HARD_SYMBOL: + for (int o = 0; o < O; o++) { + metric[o] = 0.0; + for (int m = 0; m < D; m++) { + T s = input[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]; + minmi = o; + } + } + for (int o = 0; o < O; o++) { + metric[o] = (o == minmi ? 0.0 : 1.0); + } + break; + case digital::TRELLIS_HARD_BIT: + throw std::runtime_error( + "calc_metric: Invalid metric type (not yet implemented)."); + break; + default: + throw std::runtime_error("calc_metric: Invalid metric type."); } +} + +template void calc_metric<char>(int O, + int D, + const std::vector<char>& TABLE, + const char* input, + float* metric, + digital::trellis_metric_type_t type); + +template void calc_metric<short>(int O, + int D, + const std::vector<short>& TABLE, + const short* input, + float* metric, + digital::trellis_metric_type_t type); + +template void calc_metric<int>(int O, + int D, + const std::vector<int>& TABLE, + const int* input, + float* metric, + digital::trellis_metric_type_t type); + +template void calc_metric<float>(int O, + int D, + const std::vector<float>& TABLE, + const float* input, + float* metric, + digital::trellis_metric_type_t type); - template - void calc_metric<char>(int O, int D, const std::vector<char> &TABLE, const char *input, float *metric, digital::trellis_metric_type_t type); - - template - void calc_metric<short>(int O, int D, const std::vector<short> &TABLE, const short *input, float *metric, digital::trellis_metric_type_t type); - - template void calc_metric<int>(int O, int D, const std::vector<int> &TABLE, const int *input, float *metric, digital::trellis_metric_type_t type); - - template void calc_metric<float>(int O, int D, const std::vector<float> &TABLE, const float *input, float *metric, digital::trellis_metric_type_t type); - - /* - void calc_metric(int O, int D, const std::vector<short> &TABLE, const short *input, float *metric, digital::trellis_metric_type_t type) - { - float minm = FLT_MAX; - int minmi = 0; - - switch(type) { - case digital::TRELLIS_EUCLIDEAN: - for(int o = 0; o < O; o++) { - metric[o] = 0.0; - for(int m = 0; m < D; m++) { - float s = input[m]-TABLE[o*D+m]; - metric[o] += s*s; - } - } - break; - case digital::TRELLIS_HARD_SYMBOL: - for(int o = 0; o < O; o++) { - metric[o] = 0.0; - for(int m = 0; m < D; m++) { - float s = input[m]-TABLE[o*D+m]; - metric[o] += s*s; - } - 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 digital::TRELLIS_HARD_BIT: - throw std::runtime_error("calc_metric: Invalid metric type (not yet implemented)."); - break; - default: - throw std::runtime_error("calc_metric: Invalid metric type."); +/* +void calc_metric(int O, int D, const std::vector<short> &TABLE, const short *input, float +*metric, digital::trellis_metric_type_t type) +{ + float minm = FLT_MAX; + int minmi = 0; + + switch(type) { + case digital::TRELLIS_EUCLIDEAN: + for(int o = 0; o < O; o++) { + metric[o] = 0.0; + for(int m = 0; m < D; m++) { + float s = input[m]-TABLE[o*D+m]; + metric[o] += s*s; + } + } + break; + case digital::TRELLIS_HARD_SYMBOL: + for(int o = 0; o < O; o++) { + metric[o] = 0.0; + for(int m = 0; m < D; m++) { + float s = input[m]-TABLE[o*D+m]; + metric[o] += s*s; + } + 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 digital::TRELLIS_HARD_BIT: + throw std::runtime_error("calc_metric: Invalid metric type (not yet implemented)."); + break; + default: + throw std::runtime_error("calc_metric: Invalid metric type."); + } +} - void calc_metric(int O, int D, const std::vector<int> &TABLE, const int *input, - float *metric, digital::trellis_metric_type_t type) - { - float minm = FLT_MAX; - int minmi = 0; - - switch(type){ - case digital::TRELLIS_EUCLIDEAN: - for(int o=0;o<O;o++) { - metric[o]=0.0; - for(int m=0;m<D;m++) { - float s=input[m]-TABLE[o*D+m]; - metric[o]+=s*s; - } - } - break; - case digital::TRELLIS_HARD_SYMBOL: - for(int o=0;o<O;o++) { - metric[o]=0.0; - for(int m=0;m<D;m++) { - float s=input[m]-TABLE[o*D+m]; - metric[o]+=s*s; - } - 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 digital::TRELLIS_HARD_BIT: - throw std::runtime_error("calc_metric: Invalid metric type (not yet implemented)."); - break; - default: - throw std::runtime_error("calc_metric: Invalid metric type."); +void calc_metric(int O, int D, const std::vector<int> &TABLE, const int *input, + float *metric, digital::trellis_metric_type_t type) +{ + float minm = FLT_MAX; + int minmi = 0; + + switch(type){ + case digital::TRELLIS_EUCLIDEAN: + for(int o=0;o<O;o++) { + metric[o]=0.0; + for(int m=0;m<D;m++) { + float s=input[m]-TABLE[o*D+m]; + metric[o]+=s*s; + } + } + break; + case digital::TRELLIS_HARD_SYMBOL: + for(int o=0;o<O;o++) { + metric[o]=0.0; + for(int m=0;m<D;m++) { + float s=input[m]-TABLE[o*D+m]; + metric[o]+=s*s; + } + 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 digital::TRELLIS_HARD_BIT: + throw std::runtime_error("calc_metric: Invalid metric type (not yet implemented)."); + break; + default: + throw std::runtime_error("calc_metric: Invalid metric type."); + } +} + +void calc_metric(int O, int D, const std::vector<float> &TABLE, const float *input, + float *metric, digital::trellis_metric_type_t type) +{ + float minm = FLT_MAX; + int minmi = 0; - void calc_metric(int O, int D, const std::vector<float> &TABLE, const float *input, - float *metric, digital::trellis_metric_type_t type) - { - float minm = FLT_MAX; - int minmi = 0; - - switch(type) { - case digital::TRELLIS_EUCLIDEAN: - for(int o=0;o<O;o++) { - metric[o]=0.0; - for(int m=0;m<D;m++) { - float s=input[m]-TABLE[o*D+m]; - metric[o]+=s*s; - } - } - break; - case digital::TRELLIS_HARD_SYMBOL: - for(int o=0;o<O;o++) { - metric[o]=0.0; - for(int m=0;m<D;m++) { - float s=input[m]-TABLE[o*D+m]; - metric[o]+=s*s; - } - 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 digital::TRELLIS_HARD_BIT: - throw std::runtime_error("calc_metric: Invalid metric type (not yet implemented)."); - break; - default: - throw std::runtime_error("calc_metric: Invalid metric type."); + switch(type) { + case digital::TRELLIS_EUCLIDEAN: + for(int o=0;o<O;o++) { + metric[o]=0.0; + for(int m=0;m<D;m++) { + float s=input[m]-TABLE[o*D+m]; + metric[o]+=s*s; } } + break; + case digital::TRELLIS_HARD_SYMBOL: + for(int o=0;o<O;o++) { + metric[o]=0.0; + for(int m=0;m<D;m++) { + float s=input[m]-TABLE[o*D+m]; + metric[o]+=s*s; + } + 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 digital::TRELLIS_HARD_BIT: + throw std::runtime_error("calc_metric: Invalid metric type (not yet implemented)."); + break; + default: + throw std::runtime_error("calc_metric: Invalid metric type."); + } +} */ - void calc_metric(int O, int D, const std::vector<gr_complex> &TABLE, const gr_complex *input, - float *metric, digital::trellis_metric_type_t type) - { - float minm = FLT_MAX; - int minmi = 0; - - switch(type) { - case digital::TRELLIS_EUCLIDEAN: - for(int o = 0; o < O; o++) { - metric[o] = 0.0; - for(int m = 0; m < D; m++) { - gr_complex s = input[m]-TABLE[o*D+m]; - metric[o] += s.real()*s.real()+s.imag()*s.imag(); - } - } - break; - case digital::TRELLIS_HARD_SYMBOL: - for(int o = 0; o < O; o++) { - metric[o] = 0.0; - for(int m = 0; m < D; m++) { - gr_complex s = input[m]-TABLE[o*D+m]; - metric[o] += s.real()*s.real()+s.imag()*s.imag(); - } - 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 digital::TRELLIS_HARD_BIT: - throw std::runtime_error("calc_metric: Invalid metric type (not yet implemented)."); - break; - default: - throw std::runtime_error("calc_metric: Invalid metric type."); - } +void calc_metric(int O, + int D, + const std::vector<gr_complex>& TABLE, + const gr_complex* input, + float* metric, + digital::trellis_metric_type_t type) +{ + float minm = FLT_MAX; + int minmi = 0; + + switch (type) { + case digital::TRELLIS_EUCLIDEAN: + for (int o = 0; o < O; o++) { + metric[o] = 0.0; + for (int m = 0; m < D; m++) { + gr_complex s = input[m] - TABLE[o * D + m]; + metric[o] += s.real() * s.real() + s.imag() * s.imag(); + } + } + break; + case digital::TRELLIS_HARD_SYMBOL: + for (int o = 0; o < O; o++) { + metric[o] = 0.0; + for (int m = 0; m < D; m++) { + gr_complex s = input[m] - TABLE[o * D + m]; + metric[o] += s.real() * s.real() + s.imag() * s.imag(); + } + 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 digital::TRELLIS_HARD_BIT: + throw std::runtime_error( + "calc_metric: Invalid metric type (not yet implemented)."); + break; + default: + throw std::runtime_error("calc_metric: Invalid metric type."); } +} - } /* namespace trellis */ +} /* namespace trellis */ } /* namespace gr */ - |