you will have to make the constellation a 2D array (essentially representing the 2 BPSK symbols). It is all explained in the examples and the documentation of gr-trellis and in the examples... please read it; i spend a lot of time writing it...
Achilleas On Mon, Jul 19, 2010 at 8:19 PM, Raman O <[email protected]> wrote: > Hello Achilleas, > > I made changes to vector source and sink, encoding works fine with > awgn1o2_128.fsm. > > But the result of encoder is 2 bit packed and is not suitable for me. > Since i want to employ BPSK modulation (0-> -1 / 1 ->1), I need encoder > output 1 bit at a time. > > Since awgn1o2_128.fsm dictates numInputbits: 2 and numOutputbits: 4 , > Modulator throws following error. If i am not wrong it says, constellation > length is not enough. > > lt-director: gr_chunks_to_symbols_sf.cc:66: virtual int > gr_chunks_to_symbols_sf::work(int, gr_vector_const_void_star&, > gr_vector_void_star&): Assertion `((unsigned int)in[i]*d_D+d_D) <= > d_symbol_table.size()' failed. > Aborted > > I am using following Constellation: > std::vector<float> constellation; > > constellation.push_back(1); > constellation.push_back(-1); > > So how do i achieve BPSK modulation with encoder using generator poly in > awgn1o2_128.fsm. > > Many many thanks, > Ram > > > > --- On *Mon, 19/7/10, Achilleas Anastasopoulos <[email protected]>* wrote: > > > From: Achilleas Anastasopoulos <[email protected]> > Subject: Re: [Discuss-gnuradio] gr-trellis : problem in using viterbi > decoder > To: "Raman O" <[email protected]>, [email protected] > Date: Monday, 19 July, 2010, 9:50 PM > > > As I mentioned in my earlier email, you have misunderstood the > functionality of the > > gr_make_vector_source_s(vec,false) > > block. It takes a vector "vec" as an argument and produces A STREAM OF > SHORTS at its output!!! > It is NOT producing a stream of vectors at its output...unless you specify > this as the third parameter, > which has nothing to do with the size of the input vector "vec" you are > using... > > Please remove both stream2vector and vector2stream from your code and > modify the statement > > gr_vector_source_s_sptr bit_src = gr_make_vector_source_s(in_bits,false,K ); > > as > > gr_vector_source_s_sptr bit_src = gr_make_vector_source_s(in_bits,false); > > Please see the python program test_tcm1.py in the gr-trellis/src/examples > directory to see > how the blocks are arranged... > > best, > Achilleas > > > On Mon, Jul 19, 2010 at 4:19 PM, Raman O > <[email protected]<http://mc/[email protected]> > > wrote: > >> Hello Achilleas, >> >> Thanks for your response. >> I have connected encoder block , it disappeared during editing mail by >> mistake. >> >> Input is in the form of an array of size K and vector2stream feeds encoder >> bit a time ,so i am using following syntax : >> >> gr_vector_source_s_sptr bit_src = gr_make_vector_source_s(in_bits,false,K ); >> >> gr_vector_to_stream_sptr vector2stream = >> gr_make_vector_to_stream(sizeof(short),K) >> >> >> ------------------------------------------------------------------------------------------------------------ >> >> int K=100; >> short inputbits[100]={ ....contains bits.... }; >> std::vector<short> in_bits; >> >> for (int i = 0; i <K ; i++) { // K - no >> of bits >> in_bits.push_back(inputbits[i]); // input bits >> } >> std::vector<float> constellation; // BPSK mapping >> >> constellation.push_back(1); >> constellation.push_back(-1); >> >> >> >> gr_vector_source_s_sptr bit_src = >> gr_make_vector_source_s(in_bits,false,K ); >> >> >> gr_vector_to_stream_sptr vector2stream= >> gr_make_vector_to_stream(sizeof(short),K); >> >> >> // encoder >> fsm f= >> fsm("../../../gr-trellis/src/examples/fsm_files/awgn1o2_128.fsm"); >> trellis_encoder_ss_sptr encoder = trellis_make_encoder_ss (f, 0); >> >> // modulate >> gr_chunks_to_symbols_sf_sptr mod = gr_make_chunks_to_symbols_sf >> >> (constellation, 1); >> >> // ----------- ideal channel ------------- >> >> // decoder >> >> trellis_metric_type_t type= TRELLIS_EUCLIDEAN; >> trellis_metrics_f_sptr metrics = trellis_make_metrics_f (f.O(), 1, >> constellation, type); >> >> trellis_viterbi_s_sptr viterbi =trellis_make_viterbi_s ( f,K, 0,-1); >> >> gr_stream_to_vector_sptr stream2vector= >> gr_make_stream_to_vector(sizeof(short), K); >> d_dst = gr_make_vector_sink_s (K); >> >> >> connect( bit_src , 0, vector2stream, 0); >> >> connect( vector2stream , 0,encoder, 0); >> connect( encoder , 0,mod, 0); >> >> connect(mod, 0,metrics, >> >> 0); >> connect(metrics, 0, viterbi, 0); >> connect( viterbi, 0,stream2vector, 0); >> connect(stream2vector, 0, d_dst, 0); >> >> >> >> >> --- On *Mon, 19/7/10, Achilleas Anastasopoulos >> <[email protected]<http://mc/[email protected]> >> >* wrote: >> >> >> From: Achilleas Anastasopoulos >> <[email protected]<http://mc/[email protected]> >> > >> Subject: Re: [Discuss-gnuradio] gr-trellis : problem in using viterbi >> decoder >> To: "gnuradio mailing list" >> <[email protected]<http://mc/[email protected]>>, >> [email protected] <http://mc/[email protected]> >> Date: Monday, 19 July, 2010, 6:47 PM >> >> >> >> >> I also realized that the way you call >> gr_make_vector_source_s(in_bits,false,K ); >> is incorrect. >> I think you have misunderstood what this block does. >> >> You should use: >> gr_make_vector_source_s(in_bits,false,1 ); >> or simply >> gr_make_vector_source_s(in_bits,false); >> and you really don't need the vector2stream block. >> >> Achilleas >> >> >> >> --------------------- >> In your code the "encoder" block is not connected to any other block... >> >> It should be: >> >> info bits -> encoder -> modulator -> channel -> metrics -> viterbi >> >> Achilleas >> >> >> > >
_______________________________________________ Discuss-gnuradio mailing list [email protected] http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
