From 6a78e0a8ae6dc17a12ab5e397f1452a1a363e7d1 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Fri, 23 Dec 2011 13:28:06 -0500 Subject: digital: added a class, digital_mpsk_snr_est_cc, that estimates the SNR of an M-ary PSK signal. This block can calculate the SNR using 1 of 4 different methods specified in the block's constructor. They (tend to) trade off accuracy for computational performnace. --- gr-digital/swig/CMakeLists.txt | 1 + gr-digital/swig/digital_mpsk_snr_est_cc.i | 46 +++++++++++++++++++++++++++++++ gr-digital/swig/digital_swig.i | 2 ++ 3 files changed, 49 insertions(+) create mode 100644 gr-digital/swig/digital_mpsk_snr_est_cc.i (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/CMakeLists.txt b/gr-digital/swig/CMakeLists.txt index dd6097286..136f9e43f 100644 --- a/gr-digital/swig/CMakeLists.txt +++ b/gr-digital/swig/CMakeLists.txt @@ -59,6 +59,7 @@ install( digital_lms_dd_equalizer_cc.i digital_kurtotic_equalizer_cc.i digital_mpsk_receiver_cc.i + digital_mpsk_snr_est_cc.i digital_ofdm_cyclic_prefixer.i digital_ofdm_frame_acquisition.i digital_ofdm_frame_sink.i diff --git a/gr-digital/swig/digital_mpsk_snr_est_cc.i b/gr-digital/swig/digital_mpsk_snr_est_cc.i new file mode 100644 index 000000000..cb61e9482 --- /dev/null +++ b/gr-digital/swig/digital_mpsk_snr_est_cc.i @@ -0,0 +1,46 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +GR_SWIG_BLOCK_MAGIC(digital,mpsk_snr_est_cc); + +enum snr_est_type_t { + SNR_EST_SIMPLE = 0, // Simple estimator (>= 7 dB) + SNR_EST_SKEW, // Skewness-base est (>= 5 dB) + SNR_EST_M2M4, // 2nd & 4th moment est (>= 3 dB) + SNR_EST_SVN // SVN-based est (>= 0dB) +}; + +digital_mpsk_snr_est_cc_sptr +digital_make_mpsk_snr_est_cc(snr_est_type_t type, double alpha); + +class digital_mpsk_snr_est_cc : public gr_sync_block +{ +private: + void digital_mpsk_snr_est_cc(snr_est_type_t type, double alpha); + +public: + double snr(); + snr_est_type_t type() const; + double alpha() const; + void set_type(snr_est_type_t t); + void set_alpha(double alpha); +}; diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i index 86b5cab13..9182b2b09 100644 --- a/gr-digital/swig/digital_swig.i +++ b/gr-digital/swig/digital_swig.i @@ -41,6 +41,7 @@ #include "digital_kurtotic_equalizer_cc.h" #include "digital_lms_dd_equalizer_cc.h" #include "digital_mpsk_receiver_cc.h" +#include "digital_mpsk_snr_est_cc.h" #include "digital_ofdm_cyclic_prefixer.h" #include "digital_ofdm_frame_acquisition.h" #include "digital_ofdm_frame_sink.h" @@ -65,6 +66,7 @@ %include "digital_kurtotic_equalizer_cc.i" %include "digital_lms_dd_equalizer_cc.i" %include "digital_mpsk_receiver_cc.i" +%include "digital_mpsk_snr_est_cc.i" %include "digital_ofdm_cyclic_prefixer.i" %include "digital_ofdm_frame_acquisition.i" %include "digital_ofdm_frame_sink.i" -- cgit From 74c53aa4c5b9aeac590b803b12601bcc9c8b9b60 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Thu, 29 Dec 2011 11:27:00 -0500 Subject: digital: added a probe (sink) for the new SNR estimators; also fixes up Makefiles and Swig files for SNR est blocks. --- gr-digital/swig/CMakeLists.txt | 1 + gr-digital/swig/Makefile.am | 2 ++ gr-digital/swig/digital_probe_mpsk_snr_est_c.i | 41 ++++++++++++++++++++++++++ gr-digital/swig/digital_swig.i | 9 ++++++ 4 files changed, 53 insertions(+) create mode 100644 gr-digital/swig/digital_probe_mpsk_snr_est_c.i (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/CMakeLists.txt b/gr-digital/swig/CMakeLists.txt index 136f9e43f..6f2c2251a 100644 --- a/gr-digital/swig/CMakeLists.txt +++ b/gr-digital/swig/CMakeLists.txt @@ -66,6 +66,7 @@ install( digital_ofdm_insert_preamble.i digital_ofdm_mapper_bcv.i digital_ofdm_sampler.i + digital_probe_mpsk_snr_est_c.i digital_gmskmod_bc.i digital_cpmmod_bc.i DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig diff --git a/gr-digital/swig/Makefile.am b/gr-digital/swig/Makefile.am index 8591c8d74..97b47fafa 100644 --- a/gr-digital/swig/Makefile.am +++ b/gr-digital/swig/Makefile.am @@ -84,12 +84,14 @@ digital_swig_swiginclude_headers = \ digital_lms_dd_equalizer_cc.i \ digital_kurtotic_equalizer_cc.i \ digital_mpsk_receiver_cc.i \ + digital_mpsk_snr_est_cc.i \ digital_ofdm_cyclic_prefixer.i \ digital_ofdm_frame_acquisition.i \ digital_ofdm_frame_sink.i \ digital_ofdm_insert_preamble.i \ digital_ofdm_mapper_bcv.i \ digital_ofdm_sampler.i \ + digital_probe_mpsk_snr_est_c.i \ digital_gmskmod_bc.i \ digital_cpmmod_bc.i \ $(TOP_SWIG_DOC_IFILES) diff --git a/gr-digital/swig/digital_probe_mpsk_snr_est_c.i b/gr-digital/swig/digital_probe_mpsk_snr_est_c.i new file mode 100644 index 000000000..fe3684a81 --- /dev/null +++ b/gr-digital/swig/digital_probe_mpsk_snr_est_c.i @@ -0,0 +1,41 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +GR_SWIG_BLOCK_MAGIC(digital,probe_mpsk_snr_est_c); + +digital_probe_mpsk_snr_est_c_sptr +digital_make_probe_mpsk_snr_est_c(snr_est_type_t type, + double alpha); + +class digital_probe_mpsk_snr_est_c : public gr_sync_block +{ +private: + void digital_probe_mpsk_snr_est_c(snr_est_type_t type, + double alpha); + +public: + double snr(); + snr_est_type_t type() const; + double alpha() const; + void set_type(snr_est_type_t t); + void set_alpha(double alpha); +}; diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i index 9182b2b09..bc50fc727 100644 --- a/gr-digital/swig/digital_swig.i +++ b/gr-digital/swig/digital_swig.i @@ -24,6 +24,13 @@ //load generated python docstrings %include "digital_swig_doc.i" +enum snr_est_type_t { + SNR_EST_SIMPLE = 0, // Simple estimator (>= 7 dB) + SNR_EST_SKEW, // Skewness-base est (>= 5 dB) + SNR_EST_M2M4, // 2nd & 4th moment est (>= 1 dB) + SNR_EST_SVN // SVN-based est (>= 0dB) +}; + %include %{ @@ -48,6 +55,7 @@ #include "digital_ofdm_insert_preamble.h" #include "digital_ofdm_mapper_bcv.h" #include "digital_ofdm_sampler.h" +#include "digital_probe_mpsk_snr_est_c.h" #include "digital_cpmmod_bc.h" #include "digital_gmskmod_bc.h" %} @@ -73,6 +81,7 @@ %include "digital_ofdm_insert_preamble.i" %include "digital_ofdm_mapper_bcv.i" %include "digital_ofdm_sampler.i" +%include "digital_probe_mpsk_snr_est_c.i" %include "digital_cpmmod_bc.i" %include "digital_gmskmod_bc.i" -- cgit From 55ff1160c9e0d49028c52296fa920428d30fd7c3 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Thu, 29 Dec 2011 11:27:56 -0500 Subject: digital: fixing up blocks to use SNR est classes more appropriately. --- gr-digital/swig/digital_mpsk_snr_est_cc.i | 7 ------- 1 file changed, 7 deletions(-) (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/digital_mpsk_snr_est_cc.i b/gr-digital/swig/digital_mpsk_snr_est_cc.i index cb61e9482..42114f372 100644 --- a/gr-digital/swig/digital_mpsk_snr_est_cc.i +++ b/gr-digital/swig/digital_mpsk_snr_est_cc.i @@ -22,13 +22,6 @@ GR_SWIG_BLOCK_MAGIC(digital,mpsk_snr_est_cc); -enum snr_est_type_t { - SNR_EST_SIMPLE = 0, // Simple estimator (>= 7 dB) - SNR_EST_SKEW, // Skewness-base est (>= 5 dB) - SNR_EST_M2M4, // 2nd & 4th moment est (>= 3 dB) - SNR_EST_SVN // SVN-based est (>= 0dB) -}; - digital_mpsk_snr_est_cc_sptr digital_make_mpsk_snr_est_cc(snr_est_type_t type, double alpha); -- cgit From 886e3c258ff40b4d10e7e8fc28912f14565a4fd1 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Thu, 29 Dec 2011 15:38:49 -0500 Subject: digital: adding documentation for SNR estimators; added an estimator for M2M4 type that allows the user to set the kurtosis of the signal and noise, if known, to work with non-MPSK and non-AWGN channels (untested). Also, the technique is signal to variation ratio (SVR), not SVN. Couldn't read my own writing. --- gr-digital/swig/digital_swig.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i index bc50fc727..962cb5d28 100644 --- a/gr-digital/swig/digital_swig.i +++ b/gr-digital/swig/digital_swig.i @@ -28,7 +28,7 @@ enum snr_est_type_t { SNR_EST_SIMPLE = 0, // Simple estimator (>= 7 dB) SNR_EST_SKEW, // Skewness-base est (>= 5 dB) SNR_EST_M2M4, // 2nd & 4th moment est (>= 1 dB) - SNR_EST_SVN // SVN-based est (>= 0dB) + SNR_EST_SVR // SVR-based est (>= 0dB) }; %include -- cgit From 36dda1f11620c6c9db63036d76a67b3be3f711bc Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Thu, 29 Dec 2011 18:30:27 -0500 Subject: digital: added documentation for SNR estimators; made a Doxygen group for them. Also set the alpha value to a default of 0.001; most won't need to change this. --- gr-digital/swig/digital_mpsk_snr_est_cc.i | 6 ++++-- gr-digital/swig/digital_probe_mpsk_snr_est_c.i | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/digital_mpsk_snr_est_cc.i b/gr-digital/swig/digital_mpsk_snr_est_cc.i index 42114f372..947c5ab86 100644 --- a/gr-digital/swig/digital_mpsk_snr_est_cc.i +++ b/gr-digital/swig/digital_mpsk_snr_est_cc.i @@ -23,12 +23,14 @@ GR_SWIG_BLOCK_MAGIC(digital,mpsk_snr_est_cc); digital_mpsk_snr_est_cc_sptr -digital_make_mpsk_snr_est_cc(snr_est_type_t type, double alpha); +digital_make_mpsk_snr_est_cc(snr_est_type_t type, + double alpha=0.001); class digital_mpsk_snr_est_cc : public gr_sync_block { private: - void digital_mpsk_snr_est_cc(snr_est_type_t type, double alpha); + void digital_mpsk_snr_est_cc(snr_est_type_t type, + double alpha); public: double snr(); diff --git a/gr-digital/swig/digital_probe_mpsk_snr_est_c.i b/gr-digital/swig/digital_probe_mpsk_snr_est_c.i index fe3684a81..fbe04cec2 100644 --- a/gr-digital/swig/digital_probe_mpsk_snr_est_c.i +++ b/gr-digital/swig/digital_probe_mpsk_snr_est_c.i @@ -24,7 +24,7 @@ GR_SWIG_BLOCK_MAGIC(digital,probe_mpsk_snr_est_c); digital_probe_mpsk_snr_est_c_sptr digital_make_probe_mpsk_snr_est_c(snr_est_type_t type, - double alpha); + double alpha=0.001); class digital_probe_mpsk_snr_est_c : public gr_sync_block { -- cgit From a4d62472975aaeb50fa96c360c4b24d3ad84cf6e Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Fri, 30 Dec 2011 11:04:48 -0500 Subject: digital: the SNR estimator block now issues a tag with the SNR (key = 'snr'). The number of samples between when the tag is sent is set in the constructor (default = 10000) and can be changed. --- gr-digital/swig/digital_mpsk_snr_est_cc.i | 2 ++ 1 file changed, 2 insertions(+) (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/digital_mpsk_snr_est_cc.i b/gr-digital/swig/digital_mpsk_snr_est_cc.i index 947c5ab86..b0fc6bccf 100644 --- a/gr-digital/swig/digital_mpsk_snr_est_cc.i +++ b/gr-digital/swig/digital_mpsk_snr_est_cc.i @@ -24,12 +24,14 @@ GR_SWIG_BLOCK_MAGIC(digital,mpsk_snr_est_cc); digital_mpsk_snr_est_cc_sptr digital_make_mpsk_snr_est_cc(snr_est_type_t type, + int tag_nsamples=10000, double alpha=0.001); class digital_mpsk_snr_est_cc : public gr_sync_block { private: void digital_mpsk_snr_est_cc(snr_est_type_t type, + int tag_nsamples, double alpha); public: -- cgit From 1091192d27aab20694e1597868df4962b39ad060 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Fri, 30 Dec 2011 11:33:36 -0500 Subject: digital: adding SNR nsamples set/get functions in swig i file. --- gr-digital/swig/digital_mpsk_snr_est_cc.i | 2 ++ 1 file changed, 2 insertions(+) (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/digital_mpsk_snr_est_cc.i b/gr-digital/swig/digital_mpsk_snr_est_cc.i index b0fc6bccf..f0ca13f87 100644 --- a/gr-digital/swig/digital_mpsk_snr_est_cc.i +++ b/gr-digital/swig/digital_mpsk_snr_est_cc.i @@ -37,7 +37,9 @@ private: public: double snr(); snr_est_type_t type() const; + int tag_nsample() const; double alpha() const; void set_type(snr_est_type_t t); + void set_tag_nsample(int n); void set_alpha(double alpha); }; -- cgit From 6e52e9f86b40ccc38ee21068983936113e6b53dc Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Fri, 30 Dec 2011 11:35:15 -0500 Subject: digital: added tag_nsamples placeholder into SNR probe block. The intent of this block is to be able to pass messages containing the SNR at a set number of samples. --- gr-digital/swig/digital_probe_mpsk_snr_est_c.i | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/digital_probe_mpsk_snr_est_c.i b/gr-digital/swig/digital_probe_mpsk_snr_est_c.i index fbe04cec2..93db4127a 100644 --- a/gr-digital/swig/digital_probe_mpsk_snr_est_c.i +++ b/gr-digital/swig/digital_probe_mpsk_snr_est_c.i @@ -24,18 +24,22 @@ GR_SWIG_BLOCK_MAGIC(digital,probe_mpsk_snr_est_c); digital_probe_mpsk_snr_est_c_sptr digital_make_probe_mpsk_snr_est_c(snr_est_type_t type, + int msg_nsamples=10000, double alpha=0.001); class digital_probe_mpsk_snr_est_c : public gr_sync_block { private: void digital_probe_mpsk_snr_est_c(snr_est_type_t type, + int msg_nsamples, double alpha); public: double snr(); snr_est_type_t type() const; + int msg_nsample() const; double alpha() const; void set_type(snr_est_type_t t); + void set_msg_nsample(int n); void set_alpha(double alpha); }; -- cgit From 59ae7f87cc52e28a39b04895f2977624552f6f1d Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Fri, 30 Dec 2011 13:42:16 -0500 Subject: digital: somewhat strange buy necessary fix for autotools build with guile. --- gr-digital/swig/digital_swig.i | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'gr-digital/swig') diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i index 962cb5d28..a39ef9ab7 100644 --- a/gr-digital/swig/digital_swig.i +++ b/gr-digital/swig/digital_swig.i @@ -24,12 +24,14 @@ //load generated python docstrings %include "digital_swig_doc.i" +#if SWIGPYTHON enum snr_est_type_t { SNR_EST_SIMPLE = 0, // Simple estimator (>= 7 dB) SNR_EST_SKEW, // Skewness-base est (>= 5 dB) SNR_EST_M2M4, // 2nd & 4th moment est (>= 1 dB) SNR_EST_SVR // SVR-based est (>= 0dB) }; +#endif %include @@ -86,6 +88,14 @@ enum snr_est_type_t { %include "digital_gmskmod_bc.i" #if SWIGGUILE + +enum snr_est_type_t { + SNR_EST_SIMPLE = 0, // Simple estimator (>= 7 dB) + SNR_EST_SKEW, // Skewness-base est (>= 5 dB) + SNR_EST_M2M4, // 2nd & 4th moment est (>= 1 dB) + SNR_EST_SVR // SVR-based est (>= 0dB) +}; + %scheme %{ (load-extension-global "libguile-gnuradio-digital_swig" "scm_init_gnuradio_digital_swig_module") %} -- cgit