LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

convolutional interleaver

Hi all,

 

I had posted a query on using arrays to implement shift register for implementing convolutional interleaver few days ago. The question was not clear enough and then when I understood it, I was able to implement it on my on. ( http://forums.ni.com/t5/LabVIEW/Implementation-of-shift-register-using-array/td-p/1772302 )

 

Here, I have attached the VI's that I came up with. But the design is fixed for 4 channels. If there are 100's of channels, I can't use this VI.

So, I want to design a generic VI which should be able to perform interleaving for any number of channels.

For this, single buffer(array) should be used instead of separate array for each channel if I am not wrong. I am working on it.

Please help me out in implementing this.

Thank you.

0 Kudos
Message 1 of 6
(3,923 Views)

It's interesting to note that all the complex code in your example can be replaced with a pair of array index/array build functions.Interleave.jpg

I wouldn't normally recommend doing it this way, but it is the most direct method for four channels... and helps to illustrate exactly what you're trying to do.

 

Having done that, I can see clearly that  you want to build one array from another, with the indexes shifted as such;

 

0, 0, 0, 0, 4, 1, 0, 0, 8, 5, 2, 0, 12, 9, 6, 3, 16, 13, 10, 7, 20, 17, 14, 11...

 

(I put some zeros in red to indicate that they are the value zero, not the index zero.)

 

This follows these rules: 

 

  • If I (index of result) is divisible by 4, use i (index of input)
  • If I/4 has remainder =1, use i-4
  • if I/4 has remainder =2, use i-8
  • if I/4 has remainder =3, use i-12

Or, to put it more concisely: use I=i-4*iREM4

 

The attached vi will accomplish this, for N=4.

 

if you want to use more than 4 channels, just change the 4 constant to whatever you want it to be.

 

 Interleave2.jpg

 

Message 2 of 6
(3,909 Views)

This version here will give you accss to both the Interleaved output data and also the data of any specific channel.

 

 

0 Kudos
Message 3 of 6
(3,903 Views)

That was indeed very helpful LandBelenky. 

Thanks a lot. You were kind to explain in detail too 🙂

I designed the de-interleaver by tweaking the interleaver design a bit. And here is the final implementation.

Download All
0 Kudos
Message 4 of 6
(3,889 Views)
0 Kudos
Message 5 of 6
(3,766 Views)

Hello, I'm trying to implement a convolutional interleaver for more than 2 blocks. Please find this attached. But I don't get the correct output. for the 1st interation I get 0 0 0 0 4 1 0 0 8 5 2 0... and after the second iteration I get 12 0 0 0 16 13 0 0 20 17 14 0 0. But I want this to be continous i.e, 0 0 0 0 4 1 0 0 8 5 2 0 12 9 6 3 and so on. I think the proble is with your code the values that are not used aren't being stored. Can you please help? Thank you

0 Kudos
Message 6 of 6
(3,759 Views)