[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:
@@ -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++;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user