[Peak detector]

- emit freq_abs_Hz, freq_rel_Hz, level_abs, level_rel

git-svn-id: http://moon:8086/svn/software/trunk/projects/GnuRadio@528 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2019-05-31 17:22:45 +00:00
parent 77f5da2cf5
commit d757827ffb
2 changed files with 36 additions and 13 deletions
+1 -2
View File
@@ -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++;
+35 -11
View File
@@ -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);
}
}
}