Re: convolutional code + viterbi working


#1

vincenzo,

Regarding the inter/deinterleaver addition you have to:

instantiate an interleaver object of size K
where K is the length of the data you want to interleave.
There are different ways to do this. The simplest is a random
interleaver:

int_object=trellis.interleaver(K,666) # last parameter is a seed

then you have to instantiate the interleaver and deinterleaver
blocks and put them before and after the CC encoder, Viterbi decoder,
respectively, eg:

inter =
trellis.permutation(int_object.K(),int_object.INTER(),1,gr.sizeof_char)

deinter =
trellis.permutation(int_object.K(),int_object.DEINTER(),1,gr.sizeof_char)

the last argument is the input/output signature size.
the second to last argument says how many of these i/o items you want
to consider as a block that will be permuted according to the
permutation described in the inter_object.

Achilleas


#2

Hi Achilleas,

yes… I had got a bit confused about how to use these blocks…

is this correct instead?

Nfft=2048

    file_source_bytewise=gr.file_source(gr.sizeof_char,

“/mnt/root/gnuradio_datastreams/1.MPG”)
file_chunker=gr.packed_to_unpacked_bb(1,gr.GR_LSB_FIRST) #second
argument is endianness

f=trellis.fsm("/root/MAIN/soft/gnuradio/gr-mystuff/finite_state_machine")
convolutional_encoder = trellis.encoder_bb(f,0)

self.connect(file_source_bytewise,file_chunker,convolutional_encoder,symbol_mapper)

self.connect(symbol_mapper,series_to_parallel,inverse_fft,parallel_to_series,gain,self.u)

today I’ve been showing the code to prof. Luise, and he was suggesting
that it is a bit too difficult to achieve the convolutional encoder
needed in DVB-T by specifying a finite state machine, as it would have
too many states and transitions to figure out…

is it possible to specify the encoder using the associated polynomial?

and this is how I connected the viterbi decoder:

metrics =
trellis.metrics_c(f.O(),1,constellation,trellis.TRELLIS_EUCLIDEAN)
viterbi_decoder = trellis.viterbi_b(f,K,0,-1)

    file_repacker=gr.unpacked_to_packed_bb(1,gr.GR_LSB_FIRST)
    file_sink=gr.file_sink(gr.sizeof_char,

“/mnt/root/gnuradio_datastreams/2”)

self.connect(gain,series_to_parallel_2,direct_fft,parallel_to_series_2,metrics,viterbi_decoder,file_repacker,file_sink)

this stuff seems to work as it is just giving me back the original file
as it happened with the qpsk+ofdm-only script.

best regards
and really realy thanks

vincenzo