diff --git a/gr-jay/lib/peak_detect_impl.cc b/gr-jay/lib/peak_detect_impl.cc index 1422a5d..27e6029 100644 --- a/gr-jay/lib/peak_detect_impl.cc +++ b/gr-jay/lib/peak_detect_impl.cc @@ -243,8 +243,7 @@ namespace gr { else { float freq_shift_Hz = m_bandwidth * (float)(pos-m_vlen/2)/m_vlen; - float freq_Hz = m_fcenter + freq_shift_Hz; - Peak peak(m_peak_id++, pos, freq_Hz); + Peak peak(m_peak_id++, pos, m_fcenter, freq_shift_Hz); peak.height_rel = m_pXds[pos]; addToListByPos(peaks, peak); numPeaksClimbed++; diff --git a/gr-jay/lib/peak_detect_impl.h b/gr-jay/lib/peak_detect_impl.h index 96dd3dc..61d94b4 100644 --- a/gr-jay/lib/peak_detect_impl.h +++ b/gr-jay/lib/peak_detect_impl.h @@ -31,21 +31,22 @@ namespace jay { struct Peak { Peak() - : Peak(0, 0, 0, 0.0, 0.0, 0.0) + : Peak(0, 0, 0, 0.0, 0.0, 0.0, 0.0) { } - Peak(uint64_t _id, int _pos, float frequency) - : Peak(_id, _pos, 0, frequency, 0.0, 0.0) + Peak(uint64_t _id, int _pos, float fcenter, float frequency) + : Peak(_id, _pos, 0, fcenter, frequency, 0.0, 0.0) { } - Peak(uint64_t _id, int _pos, int _pbh, float _frequency, float _height_rel, float _height_abs) + Peak(uint64_t _id, int _pos, int _pbh, float _fcenter, float _frequency, float _height_rel, float _height_abs) : id(_id) , isModified(false) , state(0) , pos(_pos) , pbh(_pbh) + , fcenter(_fcenter) , frequency(_frequency) , height_rel(_height_rel) , height_rel_last(_height_rel) @@ -63,6 +64,7 @@ namespace jay { float height_abs; float height_rel_last; float height_abs_last; + float fcenter; float frequency; bool isInRange(const Peak &other) const @@ -238,8 +240,10 @@ namespace jay { pmt::pmt_t dict = pmt::make_dict(); dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("id")), pmt::from_long(id)); dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("pos")), pmt::from_long(pos)); - dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("freq_Hz")), pmt::from_float(frequency)); - dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("height")), pmt::from_float(height_abs)); + dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("freq_abs_Hz")), pmt::from_float(fcenter + frequency)); + dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("freq_rel_Hz")), pmt::from_float(frequency)); + dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("level_abs")), pmt::from_float(height_abs)); + dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("level_rel")), pmt::from_float(height_rel)); dict = pmt::dict_add(dict, pmt::string_to_symbol(std::string("state")), pmt::from_long(state)); isModified = false; return dict; @@ -257,15 +261,35 @@ namespace jay { }; private: + void check_pair(pmt::pmt_t pair) + { + pmt::pmt_t key = pmt::car(pair); + pmt::pmt_t val = pmt::cdr(pair); + + // Check pair for data + if (pmt::symbol_to_string(key) == std::string("freq")) + { + m_fcenter = pmt::to_float(val); + } + } void set_msg(pmt::pmt_t msg) { if (pmt::is_dict(msg)) { - fprintf(stderr, "Is dictionary\n!"); - } - else - { - fprintf(stderr, "Sym: %s\n", pmt::symbol_to_string(msg).c_str()); + pmt::pmt_t items = pmt::dict_items(msg); + try + { + size_t len_items = pmt::length(items); + for (int i=0; i < len_items; i++) + { + pmt::pmt_t pair = pmt::nth(i, items); + check_pair(pair); + } + } + catch (const std::exception& e) + { + check_pair(msg); + } } }