fun_ofdm  1.0
802.11a Physical Layer for USRP
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros Pages
interleaver.cpp
Go to the documentation of this file.
1 
10 #include "interleaver.h"
11 
12 namespace fun
13 {
14  // Interleave some data
15  std::vector<unsigned char> interleaver::interleave(std::vector<unsigned char> data)
16  {
17  std::vector<unsigned int> interleave_map;
18  BitInterleave(48, 1).fill(interleave_map, false);
19 
20  std::vector<unsigned char> data_interleaved(data.size());
21  for(int x = 0; x < data.size(); x += interleave_map.size())
22  for(int y = 0; y < interleave_map.size(); y++)
23  data_interleaved[x + interleave_map[y]] = data[x + y];
24  return data_interleaved;
25  }
26 
27  // Deinterleave some data
28  std::vector<unsigned char> interleaver::deinterleave(std::vector<unsigned char> data)
29  {
30  std::vector<unsigned int> deinterleave_map;
31  BitInterleave(48, 1).fill(deinterleave_map, true);
32 
33  std::vector<unsigned char>data_deinterleaved(data.size());
34  for(int s = 0; s < data.size(); s += deinterleave_map.size())
35  for(int t = 0; t < deinterleave_map.size(); t++)
36  data_deinterleaved[s + deinterleave_map[t]] = data[s + t];
37  return data_deinterleaved;
38  }
39 }
40