Axel,
First, there is no such thing in gr-trellis as a “convolutional
interleaver”. There is only a generic interleaver, ie a permutation
which is defined through the different constructors provided in
interleaver.h (through a file, random, etc).
If you do not want to have super control over it i suggest you start
with just a random interleaver and see how it works.
Second, I see a minor problem in your code:
the viterbi block should specify the block size as its 2nd parameter
so instead of
self.va = trellis.viterbi_s(f,2,0,-1)
you should put something like
self.va = trellis.viterbi_s(f,len(self.src_data),0,-1)
I tried this modification and works fine with me.
Let me know if you have any problems,
Achilleas
Hi
Thanks for answering my questions.
I changed my code, it works now.
I will try the random interleaver, to see how it works. But in the end I
will need a super control over it. I need something that look like that
:
http://www.mathworks.com/access/helpdesk/help/toolbox/commblks/ug/fp60504.html
(see convolutional interleaver section).
Thanks again
Axel
Axel,
regarding your interleaver question:
Block or convolutional, I suspect that any practical application will
use a convolutional interleaver in a “block” fashion, ie
it will have M symbols in the input and produce M symbols at the output
where the positions are permuted.
If you can describe this permutation, and put it in a file then
you can use the gr-trellis version of interleaver.
For instance a length 5 interleaver looks like that:
3 1 5 4 2
which means that the first symbol goes to position 3, the second to
position 1 the third to position 5, etc. I have included at least one
exampl in the examples directory og gr-trellis.
If this is not the case and you still want a semi-infinite sequence as
the input you can easily write your own block for the convolutional
interleaver; it seems pretty straightforward as it consists of a
demultiplexer 1-to-N, multiple delay elements with different delays
D(1), D(2),…,D(N), and an N-to-1 multiplexer. Hey, this can even be
done as a hierarchical block using existing gnuradio blocks…
Achilleas
Axel B. wrote:
(through a file, random, etc).
self.va = trellis.viterbi_s(f,len(self.src_data),0,-1)
I tried this modification and works fine with me.
Let me know if you have any problems,
Achilleas
–
Achilleas A.
Associate Professor
EECS Department Voice : (734)615-4024
UNIVERSITY OF MICHIGAN Fax : (734)763-8041
Ann Arbor, MI 48109-2122 E-mail: [email protected]
URL: http://www.eecs.umich.edu/~anastas/
I took your advice, and I designed my convolutional interleaver using
existing gnuradio blocks. It was pretty easy. I just need to add an
“addtail” c++ block. It will do the exact opposite of gr.skiphead.
Do you think I should post this work?
Thanks for your help.
Axel