diff --git a/gr-jay/lib/peak_detect_impl.cc b/gr-jay/lib/peak_detect_impl.cc index e13c332..d584dbb 100644 --- a/gr-jay/lib/peak_detect_impl.cc +++ b/gr-jay/lib/peak_detect_impl.cc @@ -156,7 +156,9 @@ namespace gr { m_pX[i] = x; } + // ----------------------------------------------------------------- // Update of input statistics + // ----------------------------------------------------------------- for (int i = 0; i < nitems_per_block; i++) { float x = m_pX[i]; @@ -182,21 +184,28 @@ namespace gr { } } + // ----------------------------------------------------------------- // Peak detection + // ----------------------------------------------------------------- + // Detrend onput data X for (int i = 0; i < nitems_per_block; i++) { // Create peak distances by subtracting Xm float Xd = m_pX[i]-m_pXm[i]; m_pXd[i] = Xd; - *(optr++) = Xd; +// *(optr++) = Xd; } + // ----------------------------------------------------------------- // Create peak list + // ----------------------------------------------------------------- // Find peak candidates by thresholding threshold(m_pPeakData, m_pXd, nitems_per_block, 20.f); int numPeaks = findPeakPos(m_pPeakPos, m_pPeakData, nitems_per_block); + // ----------------------------------------------------------------- // Search true maximum peak using hill climbing + // ----------------------------------------------------------------- int numPeaksLast = 0; while(1) { @@ -238,7 +247,9 @@ namespace gr { } numPeaks = findPeakPos(m_pPeakPos, m_pPeakData, nitems_per_block); + // ----------------------------------------------------------------- // Sort peaks + // ----------------------------------------------------------------- std::vector peakPos; for (int i = 0; i < numPeaks; i++) { @@ -249,7 +260,9 @@ namespace gr { std::sort(peakPos.begin(), peakPos.end(), cmp); + // ----------------------------------------------------------------- // Construct peak boxes + // ----------------------------------------------------------------- numPeaks = 0; memcpy(m_pPeakBox_abs, m_pXm, nitems_per_block*sizeof(float)); memset(m_pPeakBox_rel, 0, nitems_per_block*sizeof(float)); @@ -335,31 +348,36 @@ namespace gr { break; } } - if (does_intersect == 0) + if (!does_intersect) { for (int n=pbox_start; n <= pbox_end; n++) { m_pPeakBox_abs[n] = box_height_abs; m_pPeakBox_rel[n] = box_height_rel; - m_pPeakPos[numPeaks++] = pos; } + m_pPeakPos[numPeaks++] = pos; } } + // ----------------------------------------------------------------- // Output peak box + // ----------------------------------------------------------------- for (int i = 0; i < nitems_per_block; i++) { *(optr++) = m_pPeakBox_abs[i]; } + // ----------------------------------------------------------------- // Output tags + // ----------------------------------------------------------------- for (int i = 0; i < numPeaks; i++) { // Create peak tags -// pmt::pmt_t dict = pmt::make_dict(); -// pmt::dict_add(&dict, &pmt::string_to_symbol("id"), &pmt::from_long(i)); - pmt::pmt_t tag_key = pmt::string_to_symbol("peak"); - pmt::pmt_t tag_value = pmt::from_long(m_pPeakPos[i]); + pmt::pmt_t tag_key = pmt::string_to_symbol("id"); + pmt::pmt_t tag_value = pmt::from_long(i); + add_item_tag(0, nitems_written(0) + m_pPeakPos[i], tag_key, tag_value, m_tag_id); + 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); } diff --git a/gr-jay/lib/peak_detect_impl.h b/gr-jay/lib/peak_detect_impl.h index 49ac39c..273df42 100644 --- a/gr-jay/lib/peak_detect_impl.h +++ b/gr-jay/lib/peak_detect_impl.h @@ -59,7 +59,7 @@ namespace jay { const int PB_MIN = 5; const int PB_MAX = 37; - + public: peak_detect_impl(float alpha_s, float alpha_m, int vlen); ~peak_detect_impl();