summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-dtv/lib/atsc/atsc_sync_impl.cc42
-rw-r--r--gr-dtv/lib/atsc/atsc_sync_impl.h10
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/freqcontrolpanel.h1
-rw-r--r--gr-qtgui/lib/freqcontrolpanel.cc13
-rw-r--r--gr-qtgui/lib/freqdisplayform.cc3
5 files changed, 41 insertions, 28 deletions
diff --git a/gr-dtv/lib/atsc/atsc_sync_impl.cc b/gr-dtv/lib/atsc/atsc_sync_impl.cc
index d83bccc5e0..7ecc33612a 100644
--- a/gr-dtv/lib/atsc/atsc_sync_impl.cc
+++ b/gr-dtv/lib/atsc/atsc_sync_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2014 Free Software Foundation, Inc.
+ * Copyright 2014,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -35,8 +35,8 @@ namespace gr {
static const double ADJUSTMENT_GAIN = 1.0e-5 / (10 * ATSC_DATA_SEGMENT_LENGTH);
static const int SYMBOL_INDEX_OFFSET = 3;
static const int MIN_SEG_LOCK_CORRELATION_VALUE = 5;
- static const int SSI_MIN = -16;
- static const int SSI_MAX = 15;
+ static const char SSI_MIN = -16;
+ static const char SSI_MAX = 15;
atsc_sync::sptr
atsc_sync::make(float rate)
@@ -62,9 +62,6 @@ namespace gr {
d_w = d_rx_clock_to_symbol_freq;
d_mu = 0.5;
- for (int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++)
- sample_mem[i] = 0;
-
d_timing_adjust = 0;
d_counter = 0;
d_symbol_index = 0;
@@ -72,8 +69,9 @@ namespace gr {
d_sr = 0;
- for (int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++)
- d_integrator[i] = SSI_MIN;
+ memset(d_sample_mem, 0, ATSC_DATA_SEGMENT_LENGTH * sizeof(*d_sample_mem)); // (float)0 = 0x00000000
+ memset(d_data_mem, 0, ATSC_DATA_SEGMENT_LENGTH * sizeof(*d_data_mem)); // (float)0 = 0x00000000
+ memset(d_integrator, SSI_MIN, ATSC_DATA_SEGMENT_LENGTH * sizeof(*d_integrator)); // signed char
}
atsc_sync_impl::~atsc_sync_impl()
@@ -103,7 +101,7 @@ namespace gr {
// amount actually consumed
d_si = 0;
- for (output_produced = 0; output_produced < noutput_items && (d_si + (int)d_interp.ntaps()) < ninput_items[0];) {
+ for (d_output_produced = 0; d_output_produced < noutput_items && (d_si + (int)d_interp.ntaps()) < ninput_items[0];) {
// First we interpolate a sample from input to work with
interp_sample = d_interp.interpolate(&in[d_si], d_mu);
@@ -119,7 +117,7 @@ namespace gr {
d_si += d_incr;
// Remember the sample at this count position
- sample_mem[d_counter] = interp_sample;
+ d_sample_mem[d_counter] = interp_sample;
// Is the sample positive or negative?
int bit = (interp_sample < 0 ? 0 : 1);
@@ -154,22 +152,22 @@ namespace gr {
d_seg_locked = best_correlation_value >= MIN_SEG_LOCK_CORRELATION_VALUE;
// the coefficients are -1,-1,+1,+1
- //d_timing_adjust = sample_mem[best_correlation_index - 3] +
- // sample_mem[best_correlation_index - 2] -
- // sample_mem[best_correlation_index - 1] -
- // sample_mem[best_correlation_index];
+ //d_timing_adjust = d_sample_mem[best_correlation_index - 3] +
+ // d_sample_mem[best_correlation_index - 2] -
+ // d_sample_mem[best_correlation_index - 1] -
+ // d_sample_mem[best_correlation_index];
//printf( "d_timing_adjust = %f\n", d_timing_adjust );
int corr_count = best_correlation_index;
- d_timing_adjust = -sample_mem[corr_count--];
+ d_timing_adjust = -d_sample_mem[corr_count--];
if( corr_count < 0 ) corr_count = ATSC_DATA_SEGMENT_LENGTH - 1;
- d_timing_adjust -= sample_mem[corr_count--];
+ d_timing_adjust -= d_sample_mem[corr_count--];
if( corr_count < 0 ) corr_count = ATSC_DATA_SEGMENT_LENGTH - 1;
- d_timing_adjust += sample_mem[corr_count--];
+ d_timing_adjust += d_sample_mem[corr_count--];
if( corr_count < 0 ) corr_count = ATSC_DATA_SEGMENT_LENGTH - 1;
- d_timing_adjust += sample_mem[corr_count--];
+ d_timing_adjust += d_sample_mem[corr_count--];
d_symbol_index = SYMBOL_INDEX_OFFSET - 1 - best_correlation_index;
if (d_symbol_index < 0)
@@ -183,19 +181,19 @@ namespace gr {
// half full, this is OK becouse the fs_checker will not let packets though
// untill a non-corrupted field packet is found
if( d_seg_locked ) {
- data_mem[d_symbol_index] = interp_sample;
+ d_data_mem[d_symbol_index] = interp_sample;
if( d_symbol_index >= (ATSC_DATA_SEGMENT_LENGTH - 1) )
{
for( int i = 0; i < ATSC_DATA_SEGMENT_LENGTH; i++ )
- soft_data_segment_out[output_produced].data[i] = data_mem[i];
- output_produced++;
+ soft_data_segment_out[d_output_produced].data[i] = d_data_mem[i];
+ d_output_produced++;
}
}
}
consume_each(d_si);
- return output_produced;
+ return d_output_produced;
}
diff --git a/gr-dtv/lib/atsc/atsc_sync_impl.h b/gr-dtv/lib/atsc/atsc_sync_impl.h
index f5e645049c..670cb311e1 100644
--- a/gr-dtv/lib/atsc/atsc_sync_impl.h
+++ b/gr-dtv/lib/atsc/atsc_sync_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2014 Free Software Foundation, Inc.
+ * Copyright 2014,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -44,16 +44,16 @@ namespace gr {
double d_mu; // fractional delay [0,1]
int d_incr;
- float sample_mem[ATSC_DATA_SEGMENT_LENGTH];
- float data_mem[ATSC_DATA_SEGMENT_LENGTH];
+ float d_sample_mem[ATSC_DATA_SEGMENT_LENGTH];
+ float d_data_mem[ATSC_DATA_SEGMENT_LENGTH];
double d_timing_adjust;
int d_counter; // free running mod 832 counter
int d_symbol_index;
bool d_seg_locked;
- int d_sr; // 4 bit shift register
+ unsigned char d_sr; // 4 bit shift register
signed char d_integrator[ATSC_DATA_SEGMENT_LENGTH];
- int output_produced;
+ int d_output_produced;
public:
atsc_sync_impl(float rate);
diff --git a/gr-qtgui/include/gnuradio/qtgui/freqcontrolpanel.h b/gr-qtgui/include/gnuradio/qtgui/freqcontrolpanel.h
index 548d693846..5fb8f462c5 100644
--- a/gr-qtgui/include/gnuradio/qtgui/freqcontrolpanel.h
+++ b/gr-qtgui/include/gnuradio/qtgui/freqcontrolpanel.h
@@ -44,6 +44,7 @@ public:
public slots:
void notifyAvgSlider(int val);
+ void setFFTAverage(float val);
void toggleGrid(bool en);
void toggleAxisLabels(bool en);
void toggleMaxHold(bool en);
diff --git a/gr-qtgui/lib/freqcontrolpanel.cc b/gr-qtgui/lib/freqcontrolpanel.cc
index 8babdf0523..c0a8ed4158 100644
--- a/gr-qtgui/lib/freqcontrolpanel.cc
+++ b/gr-qtgui/lib/freqcontrolpanel.cc
@@ -249,12 +249,23 @@ FreqControlPanel::toggleMinHold(bool en)
void
FreqControlPanel::notifyAvgSlider(int val)
{
- float fval = static_cast<float>(val) / (d_slider_max - d_slider_min);
+ float fval = static_cast<float>(val) / (d_slider_max - d_slider_min + 1);
emit signalAvgSlider(fval);
emit signalAvg(true);
}
void
+FreqControlPanel::setFFTAverage(float val)
+{
+ int slider_val = static_cast<int>(roundf(val * (d_slider_max - d_slider_min + 1)));
+ if (slider_val > d_slider_max)
+ slider_val = d_slider_max;
+ else if (slider_val < d_slider_min)
+ slider_val = d_slider_min;
+ d_avg_slider->setValue(slider_val);
+}
+
+void
FreqControlPanel::toggleFFTSize(int val)
{
int index = static_cast<int>(round(logf(static_cast<float>(val))/logf(2.0f))) - 5;
diff --git a/gr-qtgui/lib/freqdisplayform.cc b/gr-qtgui/lib/freqdisplayform.cc
index 21d4330722..6aa4894a96 100644
--- a/gr-qtgui/lib/freqdisplayform.cc
+++ b/gr-qtgui/lib/freqdisplayform.cc
@@ -191,6 +191,8 @@ FreqDisplayForm::setupControlPanel()
d_controlpanel, SLOT(toggleMaxHold(bool)));
connect(d_minhold_act, SIGNAL(triggered(bool)),
d_controlpanel, SLOT(toggleMinHold(bool)));
+ connect(d_avgmenu, SIGNAL(whichTrigger(float)),
+ d_controlpanel, SLOT(setFFTAverage(float)));
connect(d_tr_mode_menu, SIGNAL(whichTrigger(gr::qtgui::trigger_mode)),
d_controlpanel, SLOT(toggleTriggerMode(gr::qtgui::trigger_mode)));
connect(this, SIGNAL(signalTriggerMode(gr::qtgui::trigger_mode)),
@@ -206,6 +208,7 @@ FreqDisplayForm::setupControlPanel()
d_controlpanel->toggleTriggerMode(getTriggerMode());
d_controlpanel->toggleMaxHold(d_maxhold_act->isChecked());
d_controlpanel->toggleMinHold(d_minhold_act->isChecked());
+ d_controlpanel->setFFTAverage(getFFTAverage());
emit signalFFTSize(getFFTSize());
emit signalFFTWindow(getFFTWindowType());