I am coding and interleaving a vector stream and saving it into file.
Later I want to deinterleav and decode the same stream, but the interleaver
has different interleaving sequence and the results doesn't match the original
stream.
Is there any technique to declare a similar interleaver later for
deinterleaving?
Many thanks in advance.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Actually, I am performing frame by frame coding and interleaving of 1500
(variable length) video frames. I want to transmit these 1500 coded and
interleaved frames and to decode and deinterleave frame by frame after I
received all of them :'( so keeping track of 1500 interleaving sequences for
later use seems very tedious job :(
Is there any way to define some generic sort of fixed interleaver sequence
which I can use later and get the same results.
Kind Regards,
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Is there any way to define some generic sort of fixed interleaver sequence
which I can use later and get the same results.
Not to my knowledge. You could use the methods in the UMTS, CCSDS or CDMA2000
standards, but calculating them might be a higher effort than reading from
file.
in the Turbo_Codec file there is a global function
which calculates the interleaver for UMTS/WCDMA with some restriction on
sizes. I do not know how this works, especially if you use block lengthes
other than the ones specified in the standard. I quickly had a look at it and
it seems that it acceps arbitrary block lengthes between 40 and 5114 bits. But
I am not sure if the interleaver sequence of this has the full length, i.e.
the interleaver will output all bits you have sent into it.
Is there no way circumventing the variable block lengthes?
/donludovico
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I also tried "ivec wcdma_turbo_interleaver_sequence(int interleaver_size)"
function but after some limit in interleaver size it also doesn't work.
Unfortunately I can't manage to keep my block length constant.
I tried using my own "ivec my_interleaver_sequence(int interleaver_size)"
sequence generator, which generates non repetitive random sequence of size
interleaver_size. The sequence is random but I make it fixed by providing
specific seed to srand() C function and so far it works fine.
But I am not sure about its efficiency.
Do you think the IT++ interleaver sequence generator have some specific
features for performance improvement? or they are just random? because "ivec
my_interleaver_sequence(int interleaver_size)" is just random.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Do you think the IT++ interleaver sequence generator have some specific
features for performance improvement? or they are just random? because "ivec
my_interleaver_sequence(int interleaver_size)" is just random.
in short: you cannot know, except simulation all codes an compare to the WCDMA
interleaver ;-)
The WCDMA has been surely chosen for some certain (peroformance) reasons (I do
not know them!). But you cannot say how the performance will differ from a
randomly chosen but fixed interleaver. Depending on you fortune when drawing
the interleaver sequence you performance will differ. Hence, the theoretical
random interleaver argument will not hold here. But with high probability it
will not have the worst performance :-)
/donludovico
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I am coding and interleaving a vector stream and saving it into file.
Later I want to deinterleav and decode the same stream, but the interleaver
has different interleaving sequence and the results doesn't match the original
stream.
Is there any technique to declare a similar interleaver later for
deinterleaving?
Many thanks in advance.
Hi iamnasr,
if you use the Sequence_Interleaver class you have to set the interleaving
sequence by calling
(or within the constructor). Why not save the sequence you passed then? Or you
could get the interleaver sequence by calling
, especially in the case that you called
before.
Have a look at the documentation, it shows you all the options: http://itpp.s
ourceforge.net/current/classitpp_1_1Sequence__Interleaver.html
/donludovico
Many Thanks for your detailed response.
Actually, I am performing frame by frame coding and interleaving of 1500
(variable length) video frames. I want to transmit these 1500 coded and
interleaved frames and to decode and deinterleave frame by frame after I
received all of them :'( so keeping track of 1500 interleaving sequences for
later use seems very tedious job :(
Is there any way to define some generic sort of fixed interleaver sequence
which I can use later and get the same results.
Kind Regards,
Jep, you have to save all.
Not to my knowledge. You could use the methods in the UMTS, CCSDS or CDMA2000
standards, but calculating them might be a higher effort than reading from
file.
in the Turbo_Codec file there is a global function
which calculates the interleaver for UMTS/WCDMA with some restriction on
sizes. I do not know how this works, especially if you use block lengthes
other than the ones specified in the standard. I quickly had a look at it and
it seems that it acceps arbitrary block lengthes between 40 and 5114 bits. But
I am not sure if the interleaver sequence of this has the full length, i.e.
the interleaver will output all bits you have sent into it.
Is there no way circumventing the variable block lengthes?
/donludovico
I also tried "ivec wcdma_turbo_interleaver_sequence(int interleaver_size)"
function but after some limit in interleaver size it also doesn't work.
Unfortunately I can't manage to keep my block length constant.
I tried using my own "ivec my_interleaver_sequence(int interleaver_size)"
sequence generator, which generates non repetitive random sequence of size
interleaver_size. The sequence is random but I make it fixed by providing
specific seed to srand() C function and so far it works fine.
But I am not sure about its efficiency.
Do you think the IT++ interleaver sequence generator have some specific
features for performance improvement? or they are just random? because "ivec
my_interleaver_sequence(int interleaver_size)" is just random.
Hi,
in short: you cannot know, except simulation all codes an compare to the WCDMA
interleaver ;-)
The WCDMA has been surely chosen for some certain (peroformance) reasons (I do
not know them!). But you cannot say how the performance will differ from a
randomly chosen but fixed interleaver. Depending on you fortune when drawing
the interleaver sequence you performance will differ. Hence, the theoretical
random interleaver argument will not hold here. But with high probability it
will not have the worst performance :-)
/donludovico