discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] OFDM


From: Michael Dickens
Subject: Re: [Discuss-gnuradio] OFDM
Date: Tue, 11 Jun 2019 11:38:51 -0400
User-agent: Cyrus-JMAP/3.1.6-663-gf46ad30-fmstable-20190607v1

Hi Farid - I'll reply off list since this is pretty technical; we can summarize back on list if appropriate. - MLD

On Sat, Jun 8, 2019, at 1:19 PM, farid mihoub wrote:
Hello,
I am trying to change the OFDM_tx_rx payload modulation by a custom 64kQAM,
I implemented the block in several ways, it works fine but I had issues using it with OFDM_tx_rx:
/*********1- sync:************************************
taking a short item and produce a complex item
modulation:
**signatures:***
64kQAM_code_impl::64kQAM_code_impl( )
      : gr::sync_block("64kQAM_code",
              gr::io_signature::make(1, 1, sizeof(unsigned short int)),
              gr::io_signature::make(1, 1, sizeof(gr_complex)))
    {}
**work function:***
int
    64kQAM_code_impl::work(int noutput_items,
        gr_vector_const_void_star &input_items,
        gr_vector_void_star &output_items)
    {
     const unsigned short int *in = (const unsigned short int *) input_items[0];
      gr_complex *out = (gr_complex *) output_items[0];
           for(int i = 0;i <noutput_items; i++) {
          out[i].real((float(in[i]&0x00FF)-128.0)*level);
          out[i].imag((float((in[i]&0xFF00)>>8)-128.0)*level);
      }
      return noutput_items;
    }
demodulation:
taking a complex item and produce a short item
**signature:***
    64kQAM_decode_impl::64kQAM_decode_impl( )
      : gr::sync_block("64kQAM_decode",
              gr::io_signature::make(1, 1, sizeof(gr_complex)),
              gr::io_signature::make(1, 1, sizeof(unsigned short int)))
    {}
**work function:***
    int
    64kQAM_decode_impl::work(int noutput_items,
        gr_vector_const_void_star &input_items,
        gr_vector_void_star &output_items)
    {
      const gr_complex *in = (const gr_complex *) input_items[0];
      unsigned short int *out = (unsigned short int *) output_items[0];
      unsigned short int tmp;
      for(int  i =0; i <noutput_items; i++)
             {  
                tmp = int((in[i].imag()/level)+128.5);
                tmp = (tmp<<8) | int((in[i].real()/level)+128.5);
                out[i] = tmp;
              }
      return noutput_items;
    }
  Problem: -I got the write samples in the QT time sink, and in the
             file sink, but the transmission stops after some amount
             of data has been transmitted (repeat set to yes), the
             packet_len tag is displayed

/*****2- interpolator/decimator:***********************
modulation:  
takes 2 bytes and produce one complex item
demodulation:
takes one complex item and produce 2 bytes.
my decimaition and interpolation factor is 2
  Problems: same as 1.
 
/******2-general:**************************************
modulation:
taking two byte items and produce a complex item
    void
    64kQAM_code_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required)
    {
      ninput_items_required[0] = noutput_items*2;
    }

    int
   64kQAM_code_impl::general_work (int noutput_items,
                       gr_vector_int &ninput_items,
                       gr_vector_const_void_star &input_items,
                       gr_vector_void_star &output_items)
    {
      const unsigned char  *in = (const unsigned  char*) input_items[0];
      gr_complex *out = (gr_complex *) output_items[0];

            for(int i = 0;i <noutput_items; i++)
        {
          out[i].real(in[2*i]*level);
          out[i].imag(in[2*i+1]*level);
    }
      consume_each (noutput_items);

      // Tell runtime system how many output items we produced.
      return noutput_items;
    }
demodulation:
    void
    64kQAM_decode::forecast (int noutput_items, gr_vector_int &ninput_items_required)
    {
      ninput_items_required[0] = noutput_items/2;
    }

    int
    64kQAM_decode_impl::general_work (int noutput_items,
                       gr_vector_int &ninput_items,
                       gr_vector_const_void_star &input_items,
                       gr_vector_void_star &output_items)
    {

   const gr_complex *in = (const gr_complex *) input_items[0];
      unsigned char *out = (unsigned char *) output_items[0];

      
      for(int  i =0; i <noutput_items; i++)
            {    
                   out[2*i]=in[i].real()/level;
                   out[2*i+1] =in[i].imag()/level;
             }
      consume_each (noutput_items);

      // Tell runtime system how many output items we produced.
      return noutput_items*2;
    }
taking a complex item and produce two byte items

  problem: -It writes quickly a large amount of data to the disk.
           -In the QT display I get the correct samples but in a sink file
            I got additionnal data generally this type (^@^@), also packet_len tag
            is not displayed on the QT time GUI.

4-trying with tagged stream block,  tagged stream mux block gives an error : " Buffer too small for min_noutput_items"
 
Thank you.
 
_______________________________________________
Discuss-gnuradio mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio



reply via email to

[Prev in Thread] Current Thread [Next in Thread]