diff options
Diffstat (limited to 'gr-digital')
-rw-r--r-- | gr-digital/grc/digital_mpsk_receiver_cc.xml | 13 | ||||
-rw-r--r-- | gr-digital/grc/digital_ofdm_insert_preamble.xml | 6 | ||||
-rw-r--r-- | gr-digital/include/digital_ofdm_insert_preamble.h | 4 | ||||
-rw-r--r-- | gr-digital/lib/digital_ofdm_insert_preamble.cc | 18 | ||||
-rw-r--r-- | gr-digital/swig/digital_ofdm_insert_preamble.i | 2 |
5 files changed, 35 insertions, 8 deletions
diff --git a/gr-digital/grc/digital_mpsk_receiver_cc.xml b/gr-digital/grc/digital_mpsk_receiver_cc.xml index ab7e5c2091..bd738fccc3 100644 --- a/gr-digital/grc/digital_mpsk_receiver_cc.xml +++ b/gr-digital/grc/digital_mpsk_receiver_cc.xml @@ -7,7 +7,7 @@ <block> <name>MPSK Receiver</name> <key>digital_mpsk_receiver_cc</key> - <import>from gnuradio import digital</import> + <import>from gnuradio import digital;import cmath</import> <make>digital.mpsk_receiver_cc($M, $theta, $w, $fmin, $fmax, $mu, $gain_mu, $omega, $gain_omega, $omega_relative_limit)</make> <callback>set_loop_bandwidth($w)</callback> <callback>set_mu($mu)</callback> @@ -17,51 +17,61 @@ <param> <name>M</name> <key>M</key> + <value>4</value> <type>int</type> </param> <param> <name>Theta</name> <key>theta</key> + <value>0</value> <type>real</type> </param> <param> <name>Loop Bandwidth</name> <key>w</key> + <value>cmath.pi/100.0</value> <type>real</type> </param> <param> <name>Min Freq</name> <key>fmin</key> + <value>-0.5</value> <type>real</type> </param> <param> <name>Max Freq</name> <key>fmax</key> + <value>0.5</value> <type>real</type> </param> <param> <name>Mu</name> <key>mu</key> + <value>0.25</value> <type>real</type> </param> <param> <name>Gain Mu</name> <key>gain_mu</key> + <value>0.01</value> <type>real</type> </param> <param> <name>Omega</name> <key>omega</key> + <value>2</value> <type>real</type> </param> <param> <name>Gain Omega</name> <key>gain_omega</key> + <value>0.001</value> <type>real</type> </param> <param> <name>Omega Relative Limit</name> <key>omega_relative_limit</key> + <value>0.001</value> <type>real</type> </param> <sink> @@ -72,4 +82,5 @@ <name>out</name> <type>complex</type> </source> + </block> diff --git a/gr-digital/grc/digital_ofdm_insert_preamble.xml b/gr-digital/grc/digital_ofdm_insert_preamble.xml index 33a93058f9..9ad8fa793b 100644 --- a/gr-digital/grc/digital_ofdm_insert_preamble.xml +++ b/gr-digital/grc/digital_ofdm_insert_preamble.xml @@ -48,10 +48,16 @@ <sink> <name>flag</name> <type>byte</type> + <optional>1</optional> </sink> <source> <name>out</name> <type>complex</type> <vlen>$fft_length</vlen> </source> + <source> + <name>flag</name> + <type>byte</type> + <optional>1</optional> + </source> </block> diff --git a/gr-digital/include/digital_ofdm_insert_preamble.h b/gr-digital/include/digital_ofdm_insert_preamble.h index 6f9dae5d6b..fa44558add 100644 --- a/gr-digital/include/digital_ofdm_insert_preamble.h +++ b/gr-digital/include/digital_ofdm_insert_preamble.h @@ -88,18 +88,20 @@ private: int d_pending_flag; void enter_idle(); - void enter_preamble(); void enter_first_payload(); void enter_payload(); public: ~digital_ofdm_insert_preamble(); + void enter_preamble(); int general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + }; #endif /* INCLUDED_DIGITAL_OFDM_INSERT_PREAMBLE_H */ diff --git a/gr-digital/lib/digital_ofdm_insert_preamble.cc b/gr-digital/lib/digital_ofdm_insert_preamble.cc index a46133643d..d94425f315 100644 --- a/gr-digital/lib/digital_ofdm_insert_preamble.cc +++ b/gr-digital/lib/digital_ofdm_insert_preamble.cc @@ -41,7 +41,7 @@ digital_ofdm_insert_preamble::digital_ofdm_insert_preamble (int fft_length, const std::vector<std::vector<gr_complex> > &preamble) : gr_block("ofdm_insert_preamble", - gr_make_io_signature2(2, 2, + gr_make_io_signature2(1, 2, sizeof(gr_complex)*fft_length, sizeof(char)), gr_make_io_signature2(1, 2, @@ -67,15 +67,21 @@ digital_ofdm_insert_preamble::~digital_ofdm_insert_preamble() { } +void digital_ofdm_insert_preamble::forecast (int noutput_items, gr_vector_int &ninput_items_required){ + ninput_items_required[0] = noutput_items; +} + int digital_ofdm_insert_preamble::general_work (int noutput_items, gr_vector_int &ninput_items_v, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { - int ninput_items = std::min(ninput_items_v[0], ninput_items_v[1]); + int ninput_items = ninput_items_v.size()==2?std::min(ninput_items_v[0], ninput_items_v[1]):ninput_items_v[0]; const gr_complex *in_sym = (const gr_complex *) input_items[0]; - const unsigned char *in_flag = (const unsigned char *) input_items[1]; + const unsigned char *in_flag = 0; + if (input_items.size() == 2) + in_flag = (const unsigned char *) input_items[1]; gr_complex *out_sym = (gr_complex *) output_items[0]; unsigned char *out_flag = 0; @@ -97,14 +103,14 @@ digital_ofdm_insert_preamble::general_work (int noutput_items, while (no < noutput_items && ni < ninput_items){ switch(d_state){ case ST_IDLE: - if (in_flag[ni] & 0x1) // this is first symbol of new payload + if (in_flag && in_flag[ni] & 0x1) // this is first symbol of new payload enter_preamble(); else ni++; // eat one input symbol break; case ST_PREAMBLE: - assert(in_flag[ni] & 0x1); + assert(!in_flag || in_flag[ni] & 0x1); if (d_nsymbols_output >= (int) d_preamble.size()){ // we've output all the preamble enter_first_payload(); @@ -133,7 +139,7 @@ digital_ofdm_insert_preamble::general_work (int noutput_items, break; case ST_PAYLOAD: - if (in_flag[ni] & 0x1){ // this is first symbol of a new payload + if (in_flag && in_flag[ni] & 0x1){ // this is first symbol of a new payload enter_preamble(); break; } diff --git a/gr-digital/swig/digital_ofdm_insert_preamble.i b/gr-digital/swig/digital_ofdm_insert_preamble.i index 5f7b163698..0273c7fa75 100644 --- a/gr-digital/swig/digital_ofdm_insert_preamble.i +++ b/gr-digital/swig/digital_ofdm_insert_preamble.i @@ -32,4 +32,6 @@ class digital_ofdm_insert_preamble : public gr_block protected: digital_ofdm_insert_preamble(int fft_length, const std::vector<std::vector<gr_complex> > &preamble); + public: + void enter_preamble(); }; |