From 21bcc8b639e5b0a42d4b98a0f759a6eceeb3be7d Mon Sep 17 00:00:00 2001 From: Bastian Bloessl Date: Mon, 6 Mar 2017 12:46:28 +0100 Subject: [PATCH] equalizer: exclude guards from SNR calculation Thanks to Stephen Wolfe for reporting --- lib/equalizer/lms.cc | 10 +++++----- lib/equalizer/ls.cc | 10 +++++----- lib/equalizer/sta.cc | 13 ++++++++----- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/lib/equalizer/lms.cc b/lib/equalizer/lms.cc index 395dfc0..fa6396b 100644 --- a/lib/equalizer/lms.cc +++ b/lib/equalizer/lms.cc @@ -30,17 +30,17 @@ void lms::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, bo double signal = 0; double noise = 0; for(int i = 0; i < 64; i++) { + if((i == 32) || (i < 6) || ( i > 58)) { + continue; + } noise += std::pow(std::abs(d_H[i] - in[i]), 2); signal += std::pow(std::abs(d_H[i] + in[i]), 2); - } - - d_snr = 10 * std::log10(signal / noise / 2); - - for(int i = 0; i < 64; i++) { d_H[i] += in[i]; d_H[i] /= LONG[i] * gr_complex(2, 0); } + d_snr = 10 * std::log10(signal / noise / 2); + } else { int c = 0; for(int i = 0; i < 64; i++) { diff --git a/lib/equalizer/ls.cc b/lib/equalizer/ls.cc index e8bdc68..df6043c 100644 --- a/lib/equalizer/ls.cc +++ b/lib/equalizer/ls.cc @@ -30,17 +30,17 @@ void ls::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, boo double signal = 0; double noise = 0; for(int i = 0; i < 64; i++) { + if((i == 32) || (i < 6) || ( i > 58)) { + continue; + } noise += std::pow(std::abs(d_H[i] - in[i]), 2); signal += std::pow(std::abs(d_H[i] + in[i]), 2); - } - - d_snr = 10 * std::log10(signal / noise / 2); - - for(int i = 0; i < 64; i++) { d_H[i] += in[i]; d_H[i] /= LONG[i] * gr_complex(2, 0); } + d_snr = 10 * std::log10(signal / noise / 2); + } else { int c = 0; diff --git a/lib/equalizer/sta.cc b/lib/equalizer/sta.cc index 54f9e57..6eee846 100644 --- a/lib/equalizer/sta.cc +++ b/lib/equalizer/sta.cc @@ -30,17 +30,17 @@ void sta::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, bo double signal = 0; double noise = 0; for(int i = 0; i < 64; i++) { + if((i == 32) || (i < 6) || ( i > 58)) { + continue; + } noise += std::pow(std::abs(d_H[i] - in[i]), 2); signal += std::pow(std::abs(d_H[i] + in[i]), 2); - } - - d_snr = 10 * std::log10(signal / noise / 2); - - for(int i = 0; i < 64; i++) { d_H[i] += in[i]; d_H[i] /= LONG[i] * gr_complex(2, 0); } + d_snr = 10 * std::log10(signal / noise / 2); + } else { gr_complex H_update[64]; @@ -81,6 +81,9 @@ void sta::equalize(gr_complex *in, int n, gr_complex *symbols, uint8_t *bits, bo } for(int i = 0; i < 64; i++) { + if((i < 6) || ( i > 58)) { + continue; + } d_H[i] = gr_complex(1-alpha,0) * d_H[i] + gr_complex(alpha,0) * H_update[i]; } }