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