Imported Upstream version 3.2.2
[debian/gnuradio] / gnuradio-core / src / python / gnuradio / gr / qa_ofdm_insert_preamble.py
1 #!/usr/bin/env python
2 #
3 # Copyright 2007 Free Software Foundation, Inc.
4
5 # This file is part of GNU Radio
6
7 # GNU Radio is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3, or (at your option)
10 # any later version.
11
12 # GNU Radio is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16
17 # You should have received a copy of the GNU General Public License
18 # along with GNU Radio; see the file COPYING.  If not, write to
19 # the Free Software Foundation, Inc., 51 Franklin Street,
20 # Boston, MA 02110-1301, USA.
21
22
23 from gnuradio import gr, gr_unittest
24 from pprint import pprint
25
26 class testing (gr_unittest.TestCase):
27
28     def setUp (self):
29         self.tb = gr.top_block ()
30
31     def tearDown (self):
32         self.tb = None
33
34     def helper(self, v0, v1, fft_length, preamble):
35         tb = self.tb
36         src0 = gr.vector_source_c(v0)
37         src1 = gr.vector_source_b(v1)
38         
39         s2v = gr.stream_to_vector(gr.sizeof_gr_complex, fft_length)
40
41         # print "len(v) = %d" % (len(v))
42
43         op = gr.ofdm_insert_preamble(fft_length, preamble)
44
45         v2s = gr.vector_to_stream(gr.sizeof_gr_complex, fft_length)
46         dst0 = gr.vector_sink_c()
47         dst1 = gr.vector_sink_b()
48
49         tb.connect(src0, s2v, (op, 0))
50         tb.connect(src1, (op, 1))
51         tb.connect((op, 0), v2s, dst0)
52         tb.connect((op, 1), dst1)
53
54         tb.run()
55         r0 = dst0.data()
56         r0v = []
57         for i in range(len(r0)//fft_length):
58             r0v.append(r0[i*fft_length:(i+1)*fft_length])
59             
60         r1 = dst1.data()
61         self.assertEqual(len(r0v), len(r1))
62         return (r1, r0v)
63         
64     def check_match(self, actual, expected_list):
65         lst = []
66         map(lambda x: lst.append(x), expected_list)
67         self.assertEqual(actual, lst)
68
69
70     # ----------------------------------------------------------------
71
72     def test_000(self):
73         # no preamble, 1 symbol payloads
74
75         preamble = ()
76         fft_length = 8
77         npayloads = 8
78         v = []
79         p = []
80         for i in range(npayloads):
81             t = fft_length*[(i + i*1j)]
82             p.append(tuple(t))
83             v += t
84
85         p = tuple(p)
86             
87         r = self.helper(v, npayloads*[1], fft_length, preamble)
88         # pprint(r)
89
90         self.assertEqual(r[0], tuple(npayloads*[1]))
91         self.check_match(r[1], (p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]))
92             
93
94     def test_001(self):
95         # 1 symbol preamble, 1 symbol payloads
96         preamble = ((100, 101, 102, 103, 104, 105, 106, 107),)
97         p0 = preamble[0]
98         fft_length = 8
99         npayloads = 8
100         v = []
101         p = []
102         for i in range(npayloads):
103             t = fft_length*[(i + i*1j)]
104             p.append(tuple(t))
105             v += t
106
107         
108         r = self.helper(v, npayloads*[1], fft_length, preamble)
109
110         self.assertEqual(r[0], tuple(npayloads*[1, 0]))
111         self.check_match(r[1], (p0, p[0],
112                                 p0, p[1],
113                                 p0, p[2],
114                                 p0, p[3],
115                                 p0, p[4],
116                                 p0, p[5],
117                                 p0, p[6],
118                                 p0, p[7]))
119
120     def test_002(self):
121         # 2 symbol preamble, 1 symbol payloads
122         preamble = ((100, 101, 102, 103, 104, 105, 106, 107),
123                     (200, 201, 202, 203, 204, 205, 206, 207))
124         p0 = preamble[0]
125         p1 = preamble[1]
126
127         fft_length = 8
128         npayloads = 8
129         v = []
130         p = []
131         for i in range(npayloads):
132             t = fft_length*[(i + i*1j)]
133             p.append(tuple(t))
134             v += t
135         
136         r = self.helper(v, npayloads*[1], fft_length, preamble)
137
138         self.assertEqual(r[0], tuple(npayloads*[1, 0, 0]))
139         self.check_match(r[1], (p0, p1, p[0],
140                                 p0, p1, p[1],
141                                 p0, p1, p[2],
142                                 p0, p1, p[3],
143                                 p0, p1, p[4],
144                                 p0, p1, p[5],
145                                 p0, p1, p[6],
146                                 p0, p1, p[7]))
147
148
149     def xtest_003_preamble(self):
150         # 2 symbol preamble, 2 symbol payloads
151         preamble = ((100, 101, 102, 103, 104, 105, 106, 107),
152                     (200, 201, 202, 203, 204, 205, 206, 207))
153         p0 = preamble[0]
154         p1 = preamble[1]
155
156         fft_length = 8
157         npayloads = 8
158         v = []
159         p = []
160         for i in range(npayloads * 2):
161             t = fft_length*[(i + i*1j)]
162             p.append(tuple(t))
163             v += t
164         
165         r = self.helper(v, npayloads*[1, 0], fft_length, preamble)
166
167         self.assertEqual(r[0], tuple(npayloads*[1, 0, 0, 0]))
168         self.check_match(r[1], (p0, p1, p[0],  p[1],
169                                 p0, p1, p[2],  p[3],
170                                 p0, p1, p[4],  p[5],
171                                 p0, p1, p[6],  p[7],
172                                 p0, p1, p[8],  p[9],
173                                 p0, p1, p[10], p[11],
174                                 p0, p1, p[12], p[13],
175                                 p0, p1, p[14], p[15]))
176
177
178 if __name__ == '__main__':
179     gr_unittest.main ()