- peak detect: update of peaks without smooting
- send message of existent peak changes (frequency, pos) - peak manager: added freq message output for channelizer git-svn-id: http://moon:8086/svn/software/trunk/projects/GnuRadio@493 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -24,5 +24,10 @@
|
|||||||
<type>message</type>
|
<type>message</type>
|
||||||
<optional>1</optional>
|
<optional>1</optional>
|
||||||
</source>
|
</source>
|
||||||
|
<source>
|
||||||
|
<name>freq</name>
|
||||||
|
<type>message</type>
|
||||||
|
<optional>1</optional>
|
||||||
|
</source>
|
||||||
</block>
|
</block>
|
||||||
|
|
||||||
|
|||||||
@@ -319,8 +319,15 @@ namespace gr {
|
|||||||
{
|
{
|
||||||
if (temp[j].isInRange(peak))
|
if (temp[j].isInRange(peak))
|
||||||
{
|
{
|
||||||
temp[j].merge(peak);
|
bool changed = temp[j].update(peak);
|
||||||
found = true;
|
found = true;
|
||||||
|
if (changed)
|
||||||
|
{
|
||||||
|
pmt::pmt_t dict = temp[j].msg(1);
|
||||||
|
message_port_pub(m_msg_port_out, dict);
|
||||||
|
add_item_tag(DATA, nitems_written(DATA) + k, pmt::string_to_symbol(std::string("peak")), dict, m_tag_id);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,18 +149,23 @@ namespace jay {
|
|||||||
return pbh > 0;
|
return pbh > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Peak& merge(const Peak &other)
|
bool update(const Peak &other)
|
||||||
{
|
{
|
||||||
float beta = 0.5f;
|
bool changed = false;
|
||||||
float alpha = (1.f-beta);
|
if (pos != other.pos)
|
||||||
float pos_f = alpha*(float)pos + beta*(float)other.pos;
|
{
|
||||||
float pbh_f = alpha*(float)pbh + beta*(float)other.pbh;
|
changed = true;
|
||||||
float frequency = alpha*(float)frequency + beta*(float)other.frequency;
|
}
|
||||||
pos = (int)(pos_f + 0.5f);
|
if (std::abs(frequency-other.frequency) >= (0.01*1e6))
|
||||||
pbh = (int)(pbh_f + 0.5f);
|
{
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
frequency = other.frequency;
|
||||||
|
pos = other.pos;
|
||||||
|
pbh = other.pbh;
|
||||||
height_rel = other.height_rel;
|
height_rel = other.height_rel;
|
||||||
height_abs = other.height_abs;
|
height_abs = other.height_abs;
|
||||||
return *this;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
int left() const
|
int left() const
|
||||||
|
|||||||
@@ -34,17 +34,38 @@ class peak_manager(gr.basic_block):
|
|||||||
out_sig=None)
|
out_sig=None)
|
||||||
|
|
||||||
self.test = test
|
self.test = test
|
||||||
|
self.numFrequencies = 1
|
||||||
|
self.peak_dict = {}
|
||||||
|
|
||||||
print ("test : ", test)
|
print ("test : ", test)
|
||||||
|
|
||||||
# Register in / out message ports
|
# Register in / out message ports
|
||||||
self.message_port_register_in(pmt.intern("control"))
|
self.message_port_register_in(pmt.intern("control"))
|
||||||
self.message_port_register_out(pmt.intern("status"))
|
self.message_port_register_out(pmt.intern("status"))
|
||||||
|
self.message_port_register_out(pmt.intern("freq"))
|
||||||
|
|
||||||
# Register in message handler
|
# Register in message handler
|
||||||
self.set_msg_handler(pmt.intern("control"), self.msg_handler)
|
self.set_msg_handler(pmt.intern("control"), self.msg_handler)
|
||||||
|
|
||||||
#self.message_port_pub(pmt.intern("port name"), < pmt message >)
|
|
||||||
|
|
||||||
|
def peak_add(self, key, peak):
|
||||||
|
if len(self.peak_dict) < self.numFrequencies:
|
||||||
|
self.peak_dict[key] = peak
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def peak_del(self, key):
|
||||||
|
if key in self.peak_dict:
|
||||||
|
self.peak_dict.pop(key, None)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def peak_get(self, key):
|
||||||
|
result = None
|
||||||
|
if key in self.peak_dict:
|
||||||
|
result = self.peak_dict[key]
|
||||||
|
return result
|
||||||
|
|
||||||
def msg_handler(self, msg):
|
def msg_handler(self, msg):
|
||||||
if pmt.is_dict(msg):
|
if pmt.is_dict(msg):
|
||||||
@@ -76,8 +97,24 @@ class peak_manager(gr.basic_block):
|
|||||||
|
|
||||||
if peak['state'] == 1:
|
if peak['state'] == 1:
|
||||||
print ("New peak #{} at {:0.2f} MHz".format(id, freq_MHz))
|
print ("New peak #{} at {:0.2f} MHz".format(id, freq_MHz))
|
||||||
|
peak_key = 'peak' + str(id)
|
||||||
|
|
||||||
|
peak0 = self.peak_get(peak_key)
|
||||||
|
|
||||||
|
if peak0 is not None:
|
||||||
|
pair = pmt.cons(pmt.intern("freq"), pmt.from_float(peak['freq_Hz']))
|
||||||
|
print("Update " + peak_key)
|
||||||
|
self.message_port_pub(pmt.intern("freq"), pair)
|
||||||
|
elif self.peak_add(peak_key, peak):
|
||||||
|
pair = pmt.cons(pmt.intern("freq"), pmt.from_float(peak['freq_Hz']))
|
||||||
|
print("Added " + peak_key)
|
||||||
|
self.message_port_pub(pmt.intern("freq"), pair)
|
||||||
else:
|
else:
|
||||||
print ("Lost peak #{} at {:0.2f} MHz".format(id, freq_MHz))
|
print ("Lost peak #{} at {:0.2f} MHz".format(id, freq_MHz))
|
||||||
|
peak_key = 'peak' + str(id)
|
||||||
|
if self.peak_del(peak_key):
|
||||||
|
print("Deleted " + peak_key)
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print(pmt.symbol_to_string(msg))
|
print(pmt.symbol_to_string(msg))
|
||||||
|
|||||||
Reference in New Issue
Block a user