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