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
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> 
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to