11-28-2011 05:35 AM
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.
11-28-2011 12:18 PM - edited 11-28-2011 12:21 PM
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.
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:
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.
11-28-2011 01:39 PM
This version here will give you accss to both the Interleaved output data and also the data of any specific channel.
11-29-2011 03:07 AM
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.
04-09-2013 01:34 AM - edited 04-09-2013 01:36 AM
blank text - apologise
04-09-2013 01:39 AM
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