- fixed creating too many peaks in last stage
- added comments - improved tags git-svn-id: http://moon:8086/svn/software/trunk/projects/GnuRadio@459 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -156,7 +156,9 @@ namespace gr {
|
|||||||
m_pX[i] = x;
|
m_pX[i] = x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Update of input statistics
|
// Update of input statistics
|
||||||
|
// -----------------------------------------------------------------
|
||||||
for (int i = 0; i < nitems_per_block; i++)
|
for (int i = 0; i < nitems_per_block; i++)
|
||||||
{
|
{
|
||||||
float x = m_pX[i];
|
float x = m_pX[i];
|
||||||
@@ -182,21 +184,28 @@ namespace gr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Peak detection
|
// Peak detection
|
||||||
|
// -----------------------------------------------------------------
|
||||||
|
// Detrend onput data X
|
||||||
for (int i = 0; i < nitems_per_block; i++)
|
for (int i = 0; i < nitems_per_block; i++)
|
||||||
{
|
{
|
||||||
// Create peak distances by subtracting Xm
|
// Create peak distances by subtracting Xm
|
||||||
float Xd = m_pX[i]-m_pXm[i];
|
float Xd = m_pX[i]-m_pXm[i];
|
||||||
m_pXd[i] = Xd;
|
m_pXd[i] = Xd;
|
||||||
*(optr++) = Xd;
|
// *(optr++) = Xd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Create peak list
|
// Create peak list
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Find peak candidates by thresholding
|
// Find peak candidates by thresholding
|
||||||
threshold(m_pPeakData, m_pXd, nitems_per_block, 20.f);
|
threshold(m_pPeakData, m_pXd, nitems_per_block, 20.f);
|
||||||
int numPeaks = findPeakPos(m_pPeakPos, m_pPeakData, nitems_per_block);
|
int numPeaks = findPeakPos(m_pPeakPos, m_pPeakData, nitems_per_block);
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Search true maximum peak using hill climbing
|
// Search true maximum peak using hill climbing
|
||||||
|
// -----------------------------------------------------------------
|
||||||
int numPeaksLast = 0;
|
int numPeaksLast = 0;
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
@@ -238,7 +247,9 @@ namespace gr {
|
|||||||
}
|
}
|
||||||
numPeaks = findPeakPos(m_pPeakPos, m_pPeakData, nitems_per_block);
|
numPeaks = findPeakPos(m_pPeakPos, m_pPeakData, nitems_per_block);
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Sort peaks
|
// Sort peaks
|
||||||
|
// -----------------------------------------------------------------
|
||||||
std::vector<int> peakPos;
|
std::vector<int> peakPos;
|
||||||
for (int i = 0; i < numPeaks; i++)
|
for (int i = 0; i < numPeaks; i++)
|
||||||
{
|
{
|
||||||
@@ -249,7 +260,9 @@ namespace gr {
|
|||||||
std::sort(peakPos.begin(), peakPos.end(), cmp);
|
std::sort(peakPos.begin(), peakPos.end(), cmp);
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Construct peak boxes
|
// Construct peak boxes
|
||||||
|
// -----------------------------------------------------------------
|
||||||
numPeaks = 0;
|
numPeaks = 0;
|
||||||
memcpy(m_pPeakBox_abs, m_pXm, nitems_per_block*sizeof(float));
|
memcpy(m_pPeakBox_abs, m_pXm, nitems_per_block*sizeof(float));
|
||||||
memset(m_pPeakBox_rel, 0, nitems_per_block*sizeof(float));
|
memset(m_pPeakBox_rel, 0, nitems_per_block*sizeof(float));
|
||||||
@@ -335,31 +348,36 @@ namespace gr {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (does_intersect == 0)
|
if (!does_intersect)
|
||||||
{
|
{
|
||||||
for (int n=pbox_start; n <= pbox_end; n++)
|
for (int n=pbox_start; n <= pbox_end; n++)
|
||||||
{
|
{
|
||||||
m_pPeakBox_abs[n] = box_height_abs;
|
m_pPeakBox_abs[n] = box_height_abs;
|
||||||
m_pPeakBox_rel[n] = box_height_rel;
|
m_pPeakBox_rel[n] = box_height_rel;
|
||||||
m_pPeakPos[numPeaks++] = pos;
|
|
||||||
}
|
}
|
||||||
|
m_pPeakPos[numPeaks++] = pos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Output peak box
|
// Output peak box
|
||||||
|
// -----------------------------------------------------------------
|
||||||
for (int i = 0; i < nitems_per_block; i++)
|
for (int i = 0; i < nitems_per_block; i++)
|
||||||
{
|
{
|
||||||
*(optr++) = m_pPeakBox_abs[i];
|
*(optr++) = m_pPeakBox_abs[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------
|
||||||
// Output tags
|
// Output tags
|
||||||
|
// -----------------------------------------------------------------
|
||||||
for (int i = 0; i < numPeaks; i++)
|
for (int i = 0; i < numPeaks; i++)
|
||||||
{
|
{
|
||||||
// Create peak tags
|
// Create peak tags
|
||||||
// pmt::pmt_t dict = pmt::make_dict();
|
pmt::pmt_t tag_key = pmt::string_to_symbol("id");
|
||||||
// pmt::dict_add(&dict, &pmt::string_to_symbol("id"), &pmt::from_long(i));
|
pmt::pmt_t tag_value = pmt::from_long(i);
|
||||||
pmt::pmt_t tag_key = pmt::string_to_symbol("peak");
|
add_item_tag(0, nitems_written(0) + m_pPeakPos[i], tag_key, tag_value, m_tag_id);
|
||||||
pmt::pmt_t tag_value = pmt::from_long(m_pPeakPos[i]);
|
tag_key = pmt::string_to_symbol("pos");
|
||||||
|
tag_value = pmt::from_long(m_pPeakPos[i]);
|
||||||
add_item_tag(0, nitems_written(0) + m_pPeakPos[i], tag_key, tag_value, m_tag_id);
|
add_item_tag(0, nitems_written(0) + m_pPeakPos[i], tag_key, tag_value, m_tag_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user