diff options
-rw-r--r-- | gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.cc | 57 | ||||
-rw-r--r-- | gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h | 20 | ||||
-rw-r--r-- | gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.i | 7 | ||||
-rw-r--r-- | gnuradio-examples/grc/demod/pam_timing.grc | 782 |
4 files changed, 481 insertions, 385 deletions
diff --git a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.cc index 7dc5715d9..a75b20d38 100644 --- a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.cc +++ b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.cc @@ -36,11 +36,13 @@ gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (float sps, float gain, const std::vector<float> &taps, unsigned int filter_size, - float init_phase) + float init_phase, + float max_rate_deviation) { return gr_pfb_clock_sync_ccf_sptr (new gr_pfb_clock_sync_ccf (sps, gain, taps, filter_size, - init_phase)); + init_phase, + max_rate_deviation)); } int ios[] = {sizeof(gr_complex), sizeof(float), sizeof(float), sizeof(float)}; @@ -48,11 +50,13 @@ std::vector<int> iosig(ios, ios+sizeof(ios)/sizeof(int)); gr_pfb_clock_sync_ccf::gr_pfb_clock_sync_ccf (float sps, float gain, const std::vector<float> &taps, unsigned int filter_size, - float init_phase) + float init_phase, + float max_rate_deviation) : gr_block ("pfb_clock_sync_ccf", gr_make_io_signature (1, 1, sizeof(gr_complex)), gr_make_io_signaturev (1, 4, iosig)), - d_updated (false), d_sps(sps) + d_updated (false), d_sps(sps), d_nfilters(filter_size), + d_max_dev(max_rate_deviation), d_start_count(0) { d_nfilters = filter_size; @@ -63,10 +67,8 @@ gr_pfb_clock_sync_ccf::gr_pfb_clock_sync_ccf (float sps, float gain, set_alpha(gain); set_beta(0.25*gain*gain); d_k = d_nfilters / 2; - d_filtnum = (int)floor(d_k); d_rate = 0; - d_start_count = 0; - + d_filtnum = (int)floor(d_k); d_filters = std::vector<gr_fir_ccf*>(d_nfilters); d_diff_filters = std::vector<gr_fir_ccf*>(d_nfilters); @@ -97,7 +99,7 @@ gr_pfb_clock_sync_ccf::set_taps (const std::vector<float> &newtaps, std::vector< std::vector<float> > &ourtaps, std::vector<gr_fir_ccf*> &ourfilter) { - unsigned int i,j; + int i,j; unsigned int ntaps = newtaps.size(); d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_nfilters); @@ -233,62 +235,65 @@ gr_pfb_clock_sync_ccf::general_work (int noutput_items, // We need this many to process one output int nrequired = ninput_items[0] - d_taps_per_filter; - int i = 0, count = d_start_count; - float error; - float error_r, error_i; + int i = 0, count = (int)floor(d_sample_num); + float error, error_r, error_i; // produce output as long as we can and there are enough input samples while((i < noutput_items) && (count < nrequired)) { - - // FIXME: prevent this from asserting - assert(d_filtnum < d_nfilters); out[i] = d_filters[d_filtnum]->filter(&in[count]); - error_r = out[i].real() * d_diff_filters[d_filtnum]->filter(&in[count]).real(); - error_i = out[i].imag() * d_diff_filters[d_filtnum]->filter(&in[count]).imag(); + gr_complex diff = d_diff_filters[d_filtnum]->filter(&in[count]); + error_r = out[i].real() * diff.real(); + error_i = out[i].imag() * diff.imag(); error = error_i + error_r; d_k = d_k + d_alpha*error + d_rate; d_rate = d_rate + d_beta*error; d_filtnum = (int)floor(d_k); + // Keep the current filter number in [0, d_nfilters] + // If we've run beyond the last filter, wrap around and go to next sample + // If we've go below 0, wrap around and go to previous sample while(d_filtnum >= d_nfilters) { d_k -= d_nfilters; d_filtnum -= d_nfilters; - count++; + d_sample_num += 1.0; } while(d_filtnum < 0) { d_k += d_nfilters; d_filtnum += d_nfilters; - count--; + d_sample_num -= 1.0; } // Keep our rate within a good range - d_rate = gr_branchless_clip(d_rate, 1.5); + d_rate = gr_branchless_clip(d_rate, d_max_dev); i++; - count += d_sps; + d_sample_num += d_sps; + count = (int)floor(d_sample_num); if(output_items.size() > 2) { err[i] = error; outrate[i] = d_rate; outk[i] = d_k; } - - //printf("error: %f k: %f rate: %f\n", - // error, d_k, d_rate); } // Set the start index at the next entrance to the work function // if we stop because we run out of input items, jump ahead in the // next call to work. Otherwise, we can start at zero. + /* if(count > nrequired) { - d_start_count = count - (nrequired); + //d_start_count = count - (nrequired); + d_sample_num -= nrequired; consume_each(ninput_items[0]-d_taps_per_filter); } else { - d_start_count = 0; + d_sample_num -= floor(d_sample_num); consume_each(count); } - + */ + d_sample_num -= floor(d_sample_num); + consume_each(count); + return i; } diff --git a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h index 41e5d7b2a..84e174b19 100644 --- a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h +++ b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h @@ -31,7 +31,8 @@ typedef boost::shared_ptr<gr_pfb_clock_sync_ccf> gr_pfb_clock_sync_ccf_sptr; gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (float sps, float gain, const std::vector<float> &taps, unsigned int filter_size=32, - float init_phase=0); + float init_phase=0, + float max_rate_deviation=1.5); class gr_fir_ccf; @@ -53,12 +54,14 @@ class gr_pfb_clock_sync_ccf : public gr_block friend gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (float sps, float gain, const std::vector<float> &taps, unsigned int filter_size, - float init_phase); + float init_phase, + float max_rate_deviation); bool d_updated; - unsigned int d_sps; + float d_sps; float d_alpha; float d_beta; + float d_sample_num; int d_nfilters; std::vector<gr_fir_ccf*> d_filters; std::vector<gr_fir_ccf*> d_diff_filters; @@ -66,9 +69,10 @@ class gr_pfb_clock_sync_ccf : public gr_block std::vector< std::vector<float> > d_dtaps; float d_k; float d_rate; + float d_max_dev; int d_filtnum; + int d_taps_per_filter; unsigned int d_start_count; - unsigned int d_taps_per_filter; /*! * Build the polyphase filterbank timing synchronizer. @@ -76,7 +80,8 @@ class gr_pfb_clock_sync_ccf : public gr_block gr_pfb_clock_sync_ccf (float sps, float gain, const std::vector<float> &taps, unsigned int filter_size, - float init_phase); + float init_phase, + float max_rate_deviation); void create_diff_taps(const std::vector<float> &newtaps, std::vector<float> &difftaps); @@ -107,6 +112,11 @@ public: { d_beta = beta; } + + void set_max_rate_deviation(float m) + { + d_max_dev = m; + } int general_work (int noutput_items, gr_vector_int &ninput_items, diff --git a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.i b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.i index 785915479..9957c33b7 100644 --- a/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.i +++ b/gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.i @@ -25,7 +25,8 @@ GR_SWIG_BLOCK_MAGIC(gr,pfb_clock_sync_ccf); gr_pfb_clock_sync_ccf_sptr gr_make_pfb_clock_sync_ccf (float sps, float gain, const std::vector<float> &taps, unsigned int filter_size=32, - float init_phase=0); + float init_phase=0, + float max_rate_deviation=1.5); class gr_pfb_clock_sync_ccf : public gr_block { @@ -33,7 +34,8 @@ class gr_pfb_clock_sync_ccf : public gr_block gr_pfb_clock_sync_ccf (float sps, float gain, const std::vector<float> &taps, unsigned int filter_size, - float init_phase); + float init_phase, + float max_rate_deviation); public: ~gr_pfb_clock_sync_ccf (); @@ -48,4 +50,5 @@ class gr_pfb_clock_sync_ccf : public gr_block void print_diff_taps(); void set_alpha(float alpha); void set_beta(float beta); + void set_max_rate_deviation(float m); }; diff --git a/gnuradio-examples/grc/demod/pam_timing.grc b/gnuradio-examples/grc/demod/pam_timing.grc index a0dc6642a..d51adb1f2 100644 --- a/gnuradio-examples/grc/demod/pam_timing.grc +++ b/gnuradio-examples/grc/demod/pam_timing.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Wed Oct 7 20:47:05 2009</timestamp> + <timestamp>Thu Oct 8 21:29:27 2009</timestamp> <block> <key>options</key> <param> @@ -57,29 +57,6 @@ </param> </block> <block> - <key>variable</key> - <param> - <key>id</key> - <value>samp_rate</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>320000</value> - </param> - <param> - <key>_coordinate</key> - <value>(128, 9)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> <key>gr_uchar_to_float</key> <param> <key>id</key> @@ -339,22 +316,54 @@ </param> </block> <block> - <key>variable</key> + <key>variable_slider</key> <param> <key>id</key> - <value>rrctaps</value> + <value>noise_amp</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>label</key> + <value>Channel Noise</value> + </param> + <param> <key>value</key> - <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, 11*spb*nfilts)</value> + <value>0</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> + <key>max</key> + <value>1.0</value> + </param> + <param> + <key>num_steps</key> + <value>1000</value> + </param> + <param> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> + </param> + <param> + <key>converver</key> + <value>float_converter</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(513, 679)</value> + <value>(168, 684)</value> </param> <param> <key>_rotation</key> @@ -362,61 +371,65 @@ </param> </block> <block> - <key>root_raised_cosine_filter</key> + <key>variable_slider</key> <param> <key>id</key> - <value>root_raised_cosine_filter_0_0</value> + <value>interpratio</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>interp_fir_filter_fff</value> + <key>label</key> + <value>Timing Offset</value> </param> <param> - <key>decim</key> - <value>1</value> + <key>value</key> + <value>1.00</value> </param> <param> - <key>interp</key> - <value>spb</value> + <key>min</key> + <value>0.9</value> </param> <param> - <key>gain</key> - <value>2*spb</value> + <key>max</key> + <value>1.1</value> </param> <param> - <key>samp_rate</key> - <value>1.0</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>sym_rate</key> - <value>1./spb</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>alpha</key> - <value>0.35</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>ntaps</key> - <value>11*spb</value> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(559, 303)</value> + <value>(40, 684)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> - <key>root_raised_cosine_filter</key> + <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>root_raised_cosine_filter_0</value> + <value>wxgui_scopesink2_0_0_0</value> </param> <param> <key>_enabled</key> @@ -424,62 +437,47 @@ </param> <param> <key>type</key> - <value>interp_fir_filter_fff</value> - </param> - <param> - <key>decim</key> - <value>1</value> - </param> - <param> - <key>interp</key> - <value>spb</value> + <value>float</value> </param> <param> - <key>gain</key> - <value>2*spb</value> + <key>title</key> + <value>Scope Plot</value> </param> <param> <key>samp_rate</key> - <value>1.0</value> + <value>samp_rate</value> </param> <param> - <key>sym_rate</key> - <value>1./spb</value> + <key>v_scale</key> + <value>9</value> </param> <param> - <key>alpha</key> - <value>0.35</value> + <key>t_scale</key> + <value>0</value> </param> <param> - <key>ntaps</key> - <value>11*spb</value> + <key>ac_couple</key> + <value>False</value> </param> <param> - <key>_coordinate</key> - <value>(557, 140)</value> + <key>xy_mode</key> + <value>False</value> </param> <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>gr_float_to_complex</key> - <param> - <key>id</key> - <value>gr_float_to_complex_0</value> + <key>num_inputs</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>notebook</key> + <value>notebook_0,1</value> </param> <param> <key>_coordinate</key> - <value>(897, 272)</value> + <value>(1115, 961)</value> </param> <param> <key>_rotation</key> @@ -487,42 +485,46 @@ </param> </block> <block> - <key>variable_slider</key> + <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>noise_amp</value> + <value>wxgui_scopesink2_0_0_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Channel Noise</value> + <key>type</key> + <value>float</value> </param> <param> - <key>value</key> - <value>0</value> + <key>title</key> + <value>Scope Plot</value> </param> <param> - <key>min</key> - <value>0</value> + <key>samp_rate</key> + <value>samp_rate</value> </param> <param> - <key>max</key> - <value>1.0</value> + <key>v_scale</key> + <value>1.25</value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>t_scale</key> + <value>0</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>ac_couple</key> + <value>False</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>xy_mode</key> + <value>False</value> + </param> + <param> + <key>num_inputs</key> + <value>1</value> </param> <param> <key>grid_pos</key> @@ -530,11 +532,11 @@ </param> <param> <key>notebook</key> - <value></value> + <value>notebook_0,2</value> </param> <param> <key>_coordinate</key> - <value>(168, 684)</value> + <value>(1113, 844)</value> </param> <param> <key>_rotation</key> @@ -542,65 +544,46 @@ </param> </block> <block> - <key>variable</key> + <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>nfilts</value> + <value>wxgui_scopesink2_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>32</value> - </param> - <param> - <key>_coordinate</key> - <value>(435, 686)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable_slider</key> - <param> - <key>id</key> - <value>beta</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>float</value> </param> <param> - <key>label</key> - <value>Timing Beta</value> + <key>title</key> + <value>Error</value> </param> <param> - <key>value</key> - <value>20e-3</value> + <key>samp_rate</key> + <value>samp_rate</value> </param> <param> - <key>min</key> - <value>0.0</value> + <key>v_scale</key> + <value>.5</value> </param> <param> - <key>max</key> - <value>0.1</value> + <key>t_scale</key> + <value>0</value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>ac_couple</key> + <value>False</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>xy_mode</key> + <value>False</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>num_inputs</key> + <value>1</value> </param> <param> <key>grid_pos</key> @@ -608,66 +591,69 @@ </param> <param> <key>notebook</key> - <value></value> + <value>notebook_0,0</value> </param> <param> <key>_coordinate</key> - <value>(668, 5)</value> + <value>(1113, 724)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>variable_slider</key> + <key>notebook</key> <param> <key>id</key> - <value>alpha</value> + <value>notebook_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Timing Alpha</value> + <key>style</key> + <value>wx.NB_TOP</value> </param> <param> - <key>value</key> - <value>2</value> + <key>labels</key> + <value>['error', 'phase', 'freq', 'FFT', 'Costas error']</value> </param> <param> - <key>min</key> - <value>0</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>max</key> - <value>10</value> + <key>notebook</key> + <value></value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>_coordinate</key> + <value>(729, 769)</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>converver</key> - <value>float_converter</value> + <key>id</key> + <value>samp_rate</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>notebook</key> - <value></value> + <key>value</key> + <value>32000</value> </param> <param> <key>_coordinate</key> - <value>(552, 4)</value> + <value>(128, 9)</value> </param> <param> <key>_rotation</key> @@ -675,10 +661,10 @@ </param> </block> <block> - <key>wxgui_scopesink2</key> + <key>gr_throttle</key> <param> <key>id</key> - <value>wxgui_scopesink2_0</value> + <value>gr_throttle_0</value> </param> <param> <key>_enabled</key> @@ -689,44 +675,55 @@ <value>complex</value> </param> <param> - <key>title</key> - <value>Scope Plot</value> + <key>samples_per_second</key> + <value>samp_rate</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>v_scale</key> - <value>0</value> + <key>_coordinate</key> + <value>(1129, 462)</value> </param> <param> - <key>t_scale</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>gr_costas_loop_cc</key> <param> - <key>ac_couple</key> - <value>False</value> + <key>id</key> + <value>gr_costas_loop_cc_0</value> </param> <param> - <key>xy_mode</key> + <key>_enabled</key> <value>False</value> </param> <param> - <key>num_inputs</key> - <value>1</value> + <key>alpha</key> + <value>alpha_0</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>beta</key> + <value>beta_0</value> </param> <param> - <key>notebook</key> - <value></value> + <key>max_freq</key> + <value>5</value> + </param> + <param> + <key>min_freq</key> + <value>-5</value> + </param> + <param> + <key>order</key> + <value>4</value> </param> <param> <key>_coordinate</key> - <value>(1133, 325)</value> + <value>(299, 453)</value> </param> <param> <key>_rotation</key> @@ -792,7 +789,7 @@ <key>variable</key> <param> <key>id</key> - <value>spb</value> + <value>rrctaps</value> </param> <param> <key>_enabled</key> @@ -800,11 +797,11 @@ </param> <param> <key>value</key> - <value>4</value> + <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value> </param> <param> <key>_coordinate</key> - <value>(436, 752)</value> + <value>(513, 679)</value> </param> <param> <key>_rotation</key> @@ -812,10 +809,10 @@ </param> </block> <block> - <key>wxgui_fftsink2</key> + <key>root_raised_cosine_filter</key> <param> <key>id</key> - <value>wxgui_fftsink2_0</value> + <value>root_raised_cosine_filter_0_0</value> </param> <param> <key>_enabled</key> @@ -823,67 +820,39 @@ </param> <param> <key>type</key> - <value>complex</value> - </param> - <param> - <key>title</key> - <value>FFT Plot</value> - </param> - <param> - <key>samp_rate</key> - <value>samp_rate</value> - </param> - <param> - <key>baseband_freq</key> - <value>0</value> - </param> - <param> - <key>y_per_div</key> - <value>10</value> - </param> - <param> - <key>y_divs</key> - <value>10</value> - </param> - <param> - <key>ref_level</key> - <value>50</value> - </param> - <param> - <key>ref_scale</key> - <value>2.0</value> + <value>interp_fir_filter_fff</value> </param> <param> - <key>fft_size</key> - <value>1024</value> + <key>decim</key> + <value>1</value> </param> <param> - <key>fft_rate</key> - <value>30</value> + <key>interp</key> + <value>spb_gen</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>gain</key> + <value>2*spb_gen</value> </param> <param> - <key>average</key> - <value>False</value> + <key>samp_rate</key> + <value>1.0</value> </param> <param> - <key>avg_alpha</key> - <value>0</value> + <key>sym_rate</key> + <value>1./spb_gen</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>alpha</key> + <value>0.35</value> </param> <param> - <key>notebook</key> - <value>notebook_0,3</value> + <key>ntaps</key> + <value>11*spb_gen</value> </param> <param> <key>_coordinate</key> - <value>(517, 767)</value> + <value>(564, 301)</value> </param> <param> <key>_rotation</key> @@ -894,7 +863,7 @@ <key>variable_slider</key> <param> <key>id</key> - <value>interpratio</value> + <value>alpha</value> </param> <param> <key>_enabled</key> @@ -902,19 +871,19 @@ </param> <param> <key>label</key> - <value>Timing Offset</value> + <value>Timing Alpha</value> </param> <param> <key>value</key> - <value>1.00</value> + <value>0</value> </param> <param> <key>min</key> - <value>0.9</value> + <value>0</value> </param> <param> <key>max</key> - <value>1.1</value> + <value>10</value> </param> <param> <key>num_steps</key> @@ -938,18 +907,18 @@ </param> <param> <key>_coordinate</key> - <value>(40, 684)</value> + <value>(552, 4)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> <key>variable_slider</key> <param> <key>id</key> - <value>beta_0</value> + <value>beta</value> </param> <param> <key>_enabled</key> @@ -957,11 +926,11 @@ </param> <param> <key>label</key> - <value>Freq Beta</value> + <value>Timing Beta</value> </param> <param> <key>value</key> - <value>0.001</value> + <value>0</value> </param> <param> <key>min</key> @@ -969,7 +938,7 @@ </param> <param> <key>max</key> - <value>0.01</value> + <value>0.1</value> </param> <param> <key>num_steps</key> @@ -993,7 +962,7 @@ </param> <param> <key>_coordinate</key> - <value>(919, 7)</value> + <value>(668, 5)</value> </param> <param> <key>_rotation</key> @@ -1008,7 +977,7 @@ </param> <param> <key>_enabled</key> - <value>True</value> + <value>False</value> </param> <param> <key>label</key> @@ -1056,46 +1025,42 @@ </param> </block> <block> - <key>wxgui_scopesink2</key> + <key>variable_slider</key> <param> <key>id</key> - <value>wxgui_scopesink2_0_0_0</value> + <value>beta_0</value> </param> <param> <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>float</value> + <value>False</value> </param> <param> - <key>title</key> - <value>Scope Plot</value> + <key>label</key> + <value>Freq Beta</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>value</key> + <value>0.001</value> </param> <param> - <key>v_scale</key> - <value>9</value> + <key>min</key> + <value>0.0</value> </param> <param> - <key>t_scale</key> - <value>0</value> + <key>max</key> + <value>0.01</value> </param> <param> - <key>ac_couple</key> - <value>False</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>xy_mode</key> - <value>False</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>num_inputs</key> - <value>1</value> + <key>converver</key> + <value>float_converter</value> </param> <param> <key>grid_pos</key> @@ -1103,22 +1068,22 @@ </param> <param> <key>notebook</key> - <value>notebook_0,1</value> + <value></value> </param> <param> <key>_coordinate</key> - <value>(1115, 961)</value> + <value>(919, 7)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> </block> <block> <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>wxgui_scopesink2_0_0_0_0</value> + <value>wxgui_scopesink2_0</value> </param> <param> <key>_enabled</key> @@ -1126,7 +1091,7 @@ </param> <param> <key>type</key> - <value>float</value> + <value>complex</value> </param> <param> <key>title</key> @@ -1138,7 +1103,7 @@ </param> <param> <key>v_scale</key> - <value>1.25</value> + <value>0</value> </param> <param> <key>t_scale</key> @@ -1162,11 +1127,11 @@ </param> <param> <key>notebook</key> - <value>notebook_0,2</value> + <value></value> </param> <param> <key>_coordinate</key> - <value>(1113, 844)</value> + <value>(1145, 258)</value> </param> <param> <key>_rotation</key> @@ -1177,7 +1142,7 @@ <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>wxgui_scopesink2_0_0</value> + <value>wxgui_scopesink2_0_0_1</value> </param> <param> <key>_enabled</key> @@ -1185,7 +1150,7 @@ </param> <param> <key>type</key> - <value>float</value> + <value>complex</value> </param> <param> <key>title</key> @@ -1221,11 +1186,11 @@ </param> <param> <key>notebook</key> - <value>notebook_0,0</value> + <value>notebook_0,4</value> </param> <param> <key>_coordinate</key> - <value>(1113, 724)</value> + <value>(1107, 533)</value> </param> <param> <key>_rotation</key> @@ -1233,58 +1198,96 @@ </param> </block> <block> - <key>wxgui_scopesink2</key> + <key>variable</key> <param> <key>id</key> - <value>wxgui_scopesink2_0_0_1</value> + <value>spb_gen</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>value</key> + <value>4</value> </param> <param> - <key>title</key> - <value>Error</value> + <key>_coordinate</key> + <value>(119, 841)</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>gr_float_to_complex</key> <param> - <key>v_scale</key> - <value>.5</value> + <key>id</key> + <value>gr_float_to_complex_0</value> </param> <param> - <key>t_scale</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(904, 184)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>root_raised_cosine_filter</key> <param> - <key>ac_couple</key> - <value>False</value> + <key>id</key> + <value>root_raised_cosine_filter_0</value> </param> <param> - <key>xy_mode</key> - <value>False</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>num_inputs</key> + <key>type</key> + <value>interp_fir_filter_fff</value> + </param> + <param> + <key>decim</key> <value>1</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>interp</key> + <value>spb_gen</value> </param> <param> - <key>notebook</key> - <value>notebook_0,4</value> + <key>gain</key> + <value>2*spb_gen</value> + </param> + <param> + <key>samp_rate</key> + <value>1.0</value> + </param> + <param> + <key>sym_rate</key> + <value>1./spb_gen</value> + </param> + <param> + <key>alpha</key> + <value>0.35</value> + </param> + <param> + <key>ntaps</key> + <value>11*spb_gen</value> </param> <param> <key>_coordinate</key> - <value>(1111, 518)</value> + <value>(557, 140)</value> </param> <param> <key>_rotation</key> @@ -1292,34 +1295,22 @@ </param> </block> <block> - <key>notebook</key> + <key>variable</key> <param> <key>id</key> - <value>notebook_0</value> + <value>spb</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>style</key> - <value>wx.NB_TOP</value> - </param> - <param> - <key>labels</key> - <value>['error', 'phase', 'freq', 'FFT', 'Costas error']</value> - </param> - <param> - <key>grid_pos</key> - <value></value> - </param> - <param> - <key>notebook</key> - <value></value> + <key>value</key> + <value>4.01</value> </param> <param> <key>_coordinate</key> - <value>(729, 769)</value> + <value>(32, 842)</value> </param> <param> <key>_rotation</key> @@ -1334,7 +1325,7 @@ </param> <param> <key>_enabled</key> - <value>True</value> + <value>False</value> </param> <param> <key>noise_voltage</key> @@ -1350,7 +1341,7 @@ </param> <param> <key>taps</key> - <value>1.0 + 1.0j</value> + <value>1.0</value> </param> <param> <key>seed</key> @@ -1358,7 +1349,38 @@ </param> <param> <key>_coordinate</key> - <value>(65, 542)</value> + <value>(59, 543)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blks2_pfb_arb_resampler_ccf</key> + <param> + <key>id</key> + <value>blks2_pfb_arb_resampler_ccf_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>rate</key> + <value>float(spb)/float(spb_gen)</value> + </param> + <param> + <key>taps</key> + <value>firdes.low_pass(320, 320, 0.45, 0.1)</value> + </param> + <param> + <key>size</key> + <value>320</value> + </param> + <param> + <key>_coordinate</key> + <value>(874, 374)</value> </param> <param> <key>_rotation</key> @@ -1409,69 +1431,101 @@ </param> </block> <block> - <key>gr_throttle</key> + <key>wxgui_fftsink2</key> <param> <key>id</key> - <value>gr_throttle_0</value> + <value>wxgui_fftsink2_0</value> </param> <param> <key>_enabled</key> - <value>True</value> + <value>False</value> </param> <param> <key>type</key> <value>complex</value> </param> <param> - <key>samples_per_second</key> + <key>title</key> + <value>FFT Plot</value> + </param> + <param> + <key>samp_rate</key> <value>samp_rate</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>baseband_freq</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(1129, 462)</value> + <key>y_per_div</key> + <value>10</value> </param> <param> - <key>_rotation</key> + <key>y_divs</key> + <value>10</value> + </param> + <param> + <key>ref_level</key> + <value>50</value> + </param> + <param> + <key>ref_scale</key> + <value>2.0</value> + </param> + <param> + <key>fft_size</key> + <value>1024</value> + </param> + <param> + <key>fft_rate</key> + <value>30</value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> + </param> + <param> + <key>average</key> + <value>False</value> + </param> + <param> + <key>avg_alpha</key> <value>0</value> </param> - </block> - <block> - <key>gr_costas_loop_cc</key> <param> - <key>id</key> - <value>gr_costas_loop_cc_0</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>notebook</key> + <value>notebook_0,3</value> </param> <param> - <key>alpha</key> - <value>alpha_0</value> + <key>_coordinate</key> + <value>(517, 767)</value> </param> <param> - <key>beta</key> - <value>beta_0</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>max_freq</key> - <value>5</value> + <key>id</key> + <value>nfilts</value> </param> <param> - <key>min_freq</key> - <value>-5</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>order</key> - <value>4</value> + <key>value</key> + <value>64</value> </param> <param> <key>_coordinate</key> - <value>(916, 473)</value> + <value>(435, 686)</value> </param> <param> <key>_rotation</key> @@ -1569,14 +1623,20 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_float_to_complex_0</source_block_id> - <sink_block_id>gr_channel_model_0</sink_block_id> + <source_block_id>gr_channel_model_0</source_block_id> + <sink_block_id>wxgui_fftsink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>gr_channel_model_0</source_block_id> - <sink_block_id>wxgui_fftsink2_0</sink_block_id> + <sink_block_id>gr_costas_loop_cc_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>gr_costas_loop_cc_0</source_block_id> + <sink_block_id>gr_pfb_clock_sync_ccf_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -1587,20 +1647,38 @@ <sink_key>0</sink_key> </connection> <connection> + <source_block_id>gr_pfb_clock_sync_ccf_0</source_block_id> + <sink_block_id>gr_throttle_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> <source_block_id>gr_channel_model_0</source_block_id> <sink_block_id>gr_pfb_clock_sync_ccf_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_pfb_clock_sync_ccf_0</source_block_id> - <sink_block_id>gr_costas_loop_cc_0</sink_block_id> + <source_block_id>gr_float_to_complex_0</source_block_id> + <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_costas_loop_cc_0</source_block_id> - <sink_block_id>gr_throttle_0</sink_block_id> + <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id> + <sink_block_id>gr_channel_model_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id> + <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id> + <sink_block_id>gr_pfb_clock_sync_ccf_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> |