SDRAngel  4.11.5
Developer docs for <a href="https://github.com/f4exb/sdrangel">SDRangel<\a>, an Open Source Qt5 / OpenGL 3.0+ SDR and signal analyzer frontend to various hardware.
decimatorsif.h
Go to the documentation of this file.
1 // Copyright (C) 2018 Edouard Griffiths, F4EXB //
3 // //
4 // This program is free software; you can redistribute it and/or modify //
5 // it under the terms of the GNU General Public License as published by //
6 // the Free Software Foundation as version 3 of the License, or //
7 // (at your option) any later version. //
8 // //
9 // This program is distributed in the hope that it will be useful, //
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
12 // GNU General Public License V3 for more details. //
13 // //
14 // You should have received a copy of the GNU General Public License //
15 // along with this program. If not, see <http://www.gnu.org/licenses/>. //
17 
18 #ifndef SDRBASE_DSP_DECIMATORSIF_H_
19 #define SDRBASE_DSP_DECIMATORSIF_H_
20 
21 #include "dsp/dsptypes.h"
23 
24 #define DECIMATORS_IF_FILTER_ORDER 64
25 
26 template<uint InputBits>
28 {
29  static const float scaleIn;
30 };
31 
32 template<uint InputBits>
33 const float decimation_scale<InputBits>::scaleIn = 1.0;
34 
35 template<>
37 {
38  static const float scaleIn;
39 };
40 
41 template<>
42 struct decimation_scale<12>
43 {
44  static const float scaleIn;
45 };
46 
47 template<>
48 struct decimation_scale<16>
49 {
50  static const float scaleIn;
51 };
52 
53 
54 template<typename T, uint InputBits>
55 class DecimatorsIF {
56 public:
57  // interleaved I/Q input buffer
58  void decimate1(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
59  void decimate2_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
60  void decimate2_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
61  void decimate2_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
62  void decimate4_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
63  void decimate4_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
64  void decimate4_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
65  void decimate8_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
66  void decimate8_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
67  void decimate8_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
68  void decimate16_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
69  void decimate16_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
70  void decimate16_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
71  void decimate32_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
72  void decimate32_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
73  void decimate32_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
74  void decimate64_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
75  void decimate64_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
76  void decimate64_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
77 
84 };
85 
86 template<typename T, uint InputBits>
87 void DecimatorsIF<T, InputBits>::decimate1(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
88 {
89  float xreal, yimag;
90 
91  for (int pos = 0; pos < nbIAndQ - 1; pos += 2)
92  {
93  xreal = buf[pos+0] * decimation_scale<InputBits>::scaleIn;
94  yimag = buf[pos+1] * decimation_scale<InputBits>::scaleIn;
95  (**it).setReal(xreal);
96  (**it).setImag(yimag);
97  ++(*it); // Valgrind optim (comment not repeated)
98  }
99 }
100 
101 template<typename T, uint InputBits>
102 void DecimatorsIF<T, InputBits>::decimate2_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
103 {
104  float xreal, yimag;
105 
106  for (int pos = 0; pos < nbIAndQ - 7; pos += 8)
107  {
108  xreal = (buf[pos+0] - buf[pos+3]) * decimation_scale<InputBits>::scaleIn;
109  yimag = (buf[pos+1] + buf[pos+2]) * decimation_scale<InputBits>::scaleIn;
110  (**it).setReal(xreal);
111  (**it).setImag(yimag);
112  ++(*it);
113 
114  xreal = (buf[pos+7] - buf[pos+4]) * decimation_scale<InputBits>::scaleIn;
115  yimag = (- buf[pos+5] - buf[pos+6]) * decimation_scale<InputBits>::scaleIn;
116  (**it).setReal(xreal);
117  (**it).setImag(yimag);
118  ++(*it);
119  }
120 }
121 
122 template<typename T, uint InputBits>
123 void DecimatorsIF<T, InputBits>::decimate2_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
124 {
125  float xreal, yimag;
126 
127  for (int pos = 0; pos < nbIAndQ - 7; pos += 8)
128  {
129  xreal = (buf[pos+1] - buf[pos+2]) * decimation_scale<InputBits>::scaleIn;
130  yimag = (- buf[pos+0] - buf[pos+3]) * decimation_scale<InputBits>::scaleIn;
131  (**it).setReal(xreal);
132  (**it).setImag(yimag);
133  ++(*it);
134 
135  xreal = (buf[pos+6] - buf[pos+5]) * decimation_scale<InputBits>::scaleIn;
136  yimag = (buf[pos+4] + buf[pos+7]) * decimation_scale<InputBits>::scaleIn;
137  (**it).setReal(xreal);
138  (**it).setImag(yimag);
139  ++(*it);
140  }
141 }
142 
143 template<typename T, uint InputBits>
144 void DecimatorsIF<T, InputBits>::decimate2_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
145 {
146  float intbuf[2];
147 
148  for (int pos = 0; pos < nbIAndQ - 3; pos += 4)
149  {
150  intbuf[0] = buf[pos+2];
151  intbuf[1] = buf[pos+3];
152 
153  m_decimator2.myDecimate(
154  buf[pos+0],
155  buf[pos+1],
156  &intbuf[0],
157  &intbuf[1]);
158 
159  (**it).setReal(intbuf[0] * decimation_scale<InputBits>::scaleIn);
160  (**it).setImag(intbuf[1] * decimation_scale<InputBits>::scaleIn);
161 
162  ++(*it);
163  }
164 }
165 
166 template<typename T, uint InputBits>
167 void DecimatorsIF<T, InputBits>::decimate4_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
168 {
169  float xreal, yimag;
170 
171  for (int pos = 0; pos < nbIAndQ - 7; pos += 8)
172  {
173  xreal = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]) * decimation_scale<InputBits>::scaleIn;
174  yimag = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]) * decimation_scale<InputBits>::scaleIn;
175 
176  (**it).setReal(xreal);
177  (**it).setImag(yimag);
178 
179  ++(*it);
180  }
181 }
182 
183 template<typename T, uint InputBits>
184 void DecimatorsIF<T, InputBits>::decimate4_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
185 {
186  float xreal, yimag;
187 
188  for (int pos = 0; pos < nbIAndQ - 7; pos += 8)
189  {
190  xreal = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]) * decimation_scale<InputBits>::scaleIn;
191  yimag = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]) * decimation_scale<InputBits>::scaleIn;
192 
193  (**it).setReal(xreal);
194  (**it).setImag(yimag);
195 
196  ++(*it);
197  }
198 }
199 
200 template<typename T, uint InputBits>
201 void DecimatorsIF<T, InputBits>::decimate4_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
202 {
203  float intbuf[4];
204 
205  for (int pos = 0; pos < nbIAndQ - 7; pos += 8)
206  {
207  intbuf[0] = buf[pos+2];
208  intbuf[1] = buf[pos+3];
209  intbuf[2] = buf[pos+6];
210  intbuf[3] = buf[pos+7];
211 
212  m_decimator2.myDecimate(
213  buf[pos+0],
214  buf[pos+1],
215  &intbuf[0],
216  &intbuf[1]);
217  m_decimator2.myDecimate(
218  buf[pos+4],
219  buf[pos+5],
220  &intbuf[2],
221  &intbuf[3]);
222 
223  m_decimator4.myDecimate(
224  intbuf[0],
225  intbuf[1],
226  &intbuf[2],
227  &intbuf[3]);
228 
229  (**it).setReal(intbuf[2] * decimation_scale<InputBits>::scaleIn);
230  (**it).setImag(intbuf[3] * decimation_scale<InputBits>::scaleIn);
231  ++(*it);
232  }
233 }
234 
235 template<typename T, uint InputBits>
236 void DecimatorsIF<T, InputBits>::decimate8_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
237 {
238  float xreal[2], yimag[2];
239 
240  for (int pos = 0; pos < nbIAndQ - 15; pos += 8)
241  {
242  xreal[0] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]);
243  yimag[0] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]);
244  pos += 8;
245 
246  xreal[1] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]);
247  yimag[1] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]);
248 
249  m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
250 
251  (**it).setReal(xreal[1] * decimation_scale<InputBits>::scaleIn);
252  (**it).setImag(yimag[1] * decimation_scale<InputBits>::scaleIn);
253 
254  ++(*it);
255  }
256 }
257 
258 template<typename T, uint InputBits>
259 void DecimatorsIF<T, InputBits>::decimate8_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
260 {
261  float xreal[2], yimag[2];
262 
263  for (int pos = 0; pos < nbIAndQ - 15; pos += 8)
264  {
265  xreal[0] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]);
266  yimag[0] = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]);
267  pos += 8;
268 
269  xreal[1] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]);
270  yimag[1] = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]);
271 
272  m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
273 
274  (**it).setReal(xreal[1] * decimation_scale<InputBits>::scaleIn);
275  (**it).setImag(yimag[1] * decimation_scale<InputBits>::scaleIn);
276 
277  ++(*it);
278  }
279 }
280 
281 template<typename T, uint InputBits>
282 void DecimatorsIF<T, InputBits>::decimate8_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
283 {
284  float intbuf[8];
285 
286  for (int pos = 0; pos < nbIAndQ - 15; pos += 16)
287  {
288  intbuf[0] = buf[pos+2];
289  intbuf[1] = buf[pos+3];
290  intbuf[2] = buf[pos+6];
291  intbuf[3] = buf[pos+7];
292  intbuf[4] = buf[pos+10];
293  intbuf[5] = buf[pos+11];
294  intbuf[6] = buf[pos+14];
295  intbuf[7] = buf[pos+15];
296 
297  m_decimator2.myDecimate(
298  buf[pos+0],
299  buf[pos+1],
300  &intbuf[0],
301  &intbuf[1]);
302  m_decimator2.myDecimate(
303  buf[pos+4],
304  buf[pos+5],
305  &intbuf[2],
306  &intbuf[3]);
307  m_decimator2.myDecimate(
308  buf[pos+8],
309  buf[pos+9],
310  &intbuf[4],
311  &intbuf[5]);
312  m_decimator2.myDecimate(
313  buf[pos+12],
314  buf[pos+13],
315  &intbuf[6],
316  &intbuf[7]);
317 
318  m_decimator4.myDecimate(
319  intbuf[0],
320  intbuf[1],
321  &intbuf[2],
322  &intbuf[3]);
323  m_decimator4.myDecimate(
324  intbuf[4],
325  intbuf[5],
326  &intbuf[6],
327  &intbuf[7]);
328 
329  m_decimator8.myDecimate(
330  intbuf[2],
331  intbuf[3],
332  &intbuf[6],
333  &intbuf[7]);
334 
335  (**it).setReal(intbuf[6] * decimation_scale<InputBits>::scaleIn);
336  (**it).setImag(intbuf[7] * decimation_scale<InputBits>::scaleIn);
337  ++(*it);
338  }
339 }
340 
341 template<typename T, uint InputBits>
342 void DecimatorsIF<T, InputBits>::decimate16_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
343 {
344  float xreal[4], yimag[4];
345 
346  for (int pos = 0; pos < nbIAndQ - 31; )
347  {
348  for (int i = 0; i < 4; i++)
349  {
350  xreal[i] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]);
351  yimag[i] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]);
352  pos += 8;
353  }
354 
355  m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
356  m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
357 
358  m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
359 
360  (**it).setReal(xreal[3] * decimation_scale<InputBits>::scaleIn);
361  (**it).setImag(yimag[3] * decimation_scale<InputBits>::scaleIn);
362 
363  ++(*it);
364  }
365 }
366 
367 template<typename T, uint InputBits>
368 void DecimatorsIF<T, InputBits>::decimate16_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
369 {
370  float xreal[4], yimag[4];
371 
372  for (int pos = 0; pos < nbIAndQ - 31; )
373  {
374  for (int i = 0; i < 4; i++)
375  {
376  xreal[i] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]);
377  yimag[i] = (buf[pos+4] + buf[pos+7] - buf[pos+0] - buf[pos+3]);
378  pos += 8;
379  }
380 
381  m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
382  m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
383 
384  m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
385 
386  (**it).setReal(xreal[3] * decimation_scale<InputBits>::scaleIn);
387  (**it).setImag(yimag[3] * decimation_scale<InputBits>::scaleIn);
388 
389  ++(*it);
390  }
391 }
392 
393 template<typename T, uint InputBits>
394 void DecimatorsIF<T, InputBits>::decimate16_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
395 {
396  float intbuf[16];
397 
398  for (int pos = 0; pos < nbIAndQ - 31; pos += 32)
399  {
400  intbuf[0] = buf[pos+2];
401  intbuf[1] = buf[pos+3];
402  intbuf[2] = buf[pos+6];
403  intbuf[3] = buf[pos+7];
404  intbuf[4] = buf[pos+10];
405  intbuf[5] = buf[pos+11];
406  intbuf[6] = buf[pos+14];
407  intbuf[7] = buf[pos+15];
408  intbuf[8] = buf[pos+18];
409  intbuf[9] = buf[pos+19];
410  intbuf[10] = buf[pos+22];
411  intbuf[11] = buf[pos+23];
412  intbuf[12] = buf[pos+26];
413  intbuf[13] = buf[pos+27];
414  intbuf[14] = buf[pos+30];
415  intbuf[15] = buf[pos+31];
416 
417  m_decimator2.myDecimate(
418  buf[pos+0],
419  buf[pos+1],
420  &intbuf[0],
421  &intbuf[1]);
422  m_decimator2.myDecimate(
423  buf[pos+4],
424  buf[pos+5],
425  &intbuf[2],
426  &intbuf[3]);
427  m_decimator2.myDecimate(
428  buf[pos+8],
429  buf[pos+9],
430  &intbuf[4],
431  &intbuf[5]);
432  m_decimator2.myDecimate(
433  buf[pos+12],
434  buf[pos+13],
435  &intbuf[6],
436  &intbuf[7]);
437  m_decimator2.myDecimate(
438  buf[pos+16],
439  buf[pos+17],
440  &intbuf[8],
441  &intbuf[9]);
442  m_decimator2.myDecimate(
443  buf[pos+20],
444  buf[pos+21],
445  &intbuf[10],
446  &intbuf[11]);
447  m_decimator2.myDecimate(
448  buf[pos+24],
449  buf[pos+25],
450  &intbuf[12],
451  &intbuf[13]);
452  m_decimator2.myDecimate(
453  buf[pos+28],
454  buf[pos+29],
455  &intbuf[14],
456  &intbuf[15]);
457 
458  m_decimator4.myDecimate(
459  intbuf[0],
460  intbuf[1],
461  &intbuf[2],
462  &intbuf[3]);
463  m_decimator4.myDecimate(
464  intbuf[4],
465  intbuf[5],
466  &intbuf[6],
467  &intbuf[7]);
468  m_decimator4.myDecimate(
469  intbuf[8],
470  intbuf[9],
471  &intbuf[10],
472  &intbuf[11]);
473  m_decimator4.myDecimate(
474  intbuf[12],
475  intbuf[13],
476  &intbuf[14],
477  &intbuf[15]);
478 
479  m_decimator8.myDecimate(
480  intbuf[2],
481  intbuf[3],
482  &intbuf[6],
483  &intbuf[7]);
484  m_decimator8.myDecimate(
485  intbuf[10],
486  intbuf[11],
487  &intbuf[14],
488  &intbuf[15]);
489 
490  m_decimator16.myDecimate(
491  intbuf[6],
492  intbuf[7],
493  &intbuf[14],
494  &intbuf[15]);
495 
496  (**it).setReal(intbuf[14] * decimation_scale<InputBits>::scaleIn);
497  (**it).setImag(intbuf[15] * decimation_scale<InputBits>::scaleIn);
498  ++(*it);
499  }
500 }
501 
502 template<typename T, uint InputBits>
503 void DecimatorsIF<T, InputBits>::decimate32_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
504 {
505  float xreal[8], yimag[8];
506 
507  for (int pos = 0; pos < nbIAndQ - 63; )
508  {
509  for (int i = 0; i < 8; i++)
510  {
511  xreal[i] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]);
512  yimag[i] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]);
513  pos += 8;
514  }
515 
516  m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
517  m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
518  m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
519  m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
520 
521  m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
522  m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
523 
524  m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
525 
526  (**it).setReal(xreal[7] * decimation_scale<InputBits>::scaleIn);
527  (**it).setImag(yimag[7] * decimation_scale<InputBits>::scaleIn);
528 
529  ++(*it);
530  }
531 }
532 
533 template<typename T, uint InputBits>
534 void DecimatorsIF<T, InputBits>::decimate32_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
535 {
536  float xreal[8], yimag[8];
537 
538  for (int pos = 0; pos < nbIAndQ - 63; )
539  {
540  for (int i = 0; i < 8; i++)
541  {
542  xreal[i] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]);
543  yimag[i] = (buf[pos+4] + buf[pos+7] - buf[pos+0] - buf[pos+3]);
544  pos += 8;
545  }
546 
547  m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
548  m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
549  m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
550  m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
551 
552  m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
553  m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
554 
555  m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
556 
557  (**it).setReal(xreal[7] * decimation_scale<InputBits>::scaleIn);
558  (**it).setImag(yimag[7] * decimation_scale<InputBits>::scaleIn);
559 
560  ++(*it);
561  }
562 }
563 
564 template<typename T, uint InputBits>
565 void DecimatorsIF<T, InputBits>::decimate32_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
566 {
567  float intbuf[32];
568 
569  for (int pos = 0; pos < nbIAndQ - 63; pos += 64)
570  {
571  intbuf[0] = buf[pos+2];
572  intbuf[1] = buf[pos+3];
573  intbuf[2] = buf[pos+6];
574  intbuf[3] = buf[pos+7];
575  intbuf[4] = buf[pos+10];
576  intbuf[5] = buf[pos+11];
577  intbuf[6] = buf[pos+14];
578  intbuf[7] = buf[pos+15];
579  intbuf[8] = buf[pos+18];
580  intbuf[9] = buf[pos+19];
581  intbuf[10] = buf[pos+22];
582  intbuf[11] = buf[pos+23];
583  intbuf[12] = buf[pos+26];
584  intbuf[13] = buf[pos+27];
585  intbuf[14] = buf[pos+30];
586  intbuf[15] = buf[pos+31];
587  intbuf[16] = buf[pos+34];
588  intbuf[17] = buf[pos+35];
589  intbuf[18] = buf[pos+38];
590  intbuf[19] = buf[pos+39];
591  intbuf[20] = buf[pos+42];
592  intbuf[21] = buf[pos+43];
593  intbuf[22] = buf[pos+46];
594  intbuf[23] = buf[pos+47];
595  intbuf[24] = buf[pos+50];
596  intbuf[25] = buf[pos+51];
597  intbuf[26] = buf[pos+54];
598  intbuf[27] = buf[pos+55];
599  intbuf[28] = buf[pos+58];
600  intbuf[29] = buf[pos+59];
601  intbuf[30] = buf[pos+62];
602  intbuf[31] = buf[pos+63];
603 
604  m_decimator2.myDecimate(
605  buf[pos+0],
606  buf[pos+1],
607  &intbuf[0],
608  &intbuf[1]);
609  m_decimator2.myDecimate(
610  buf[pos+4],
611  buf[pos+5],
612  &intbuf[2],
613  &intbuf[3]);
614  m_decimator2.myDecimate(
615  buf[pos+8],
616  buf[pos+9],
617  &intbuf[4],
618  &intbuf[5]);
619  m_decimator2.myDecimate(
620  buf[pos+12],
621  buf[pos+13],
622  &intbuf[6],
623  &intbuf[7]);
624  m_decimator2.myDecimate(
625  buf[pos+16],
626  buf[pos+17],
627  &intbuf[8],
628  &intbuf[9]);
629  m_decimator2.myDecimate(
630  buf[pos+20],
631  buf[pos+21],
632  &intbuf[10],
633  &intbuf[11]);
634  m_decimator2.myDecimate(
635  buf[pos+24],
636  buf[pos+25],
637  &intbuf[12],
638  &intbuf[13]);
639  m_decimator2.myDecimate(
640  buf[pos+28],
641  buf[pos+29],
642  &intbuf[14],
643  &intbuf[15]);
644  m_decimator2.myDecimate(
645  buf[pos+32],
646  buf[pos+33],
647  &intbuf[16],
648  &intbuf[17]);
649  m_decimator2.myDecimate(
650  buf[pos+36],
651  buf[pos+37],
652  &intbuf[18],
653  &intbuf[19]);
654  m_decimator2.myDecimate(
655  buf[pos+40],
656  buf[pos+41],
657  &intbuf[20],
658  &intbuf[21]);
659  m_decimator2.myDecimate(
660  buf[pos+44],
661  buf[pos+45],
662  &intbuf[22],
663  &intbuf[23]);
664  m_decimator2.myDecimate(
665  buf[pos+48],
666  buf[pos+49],
667  &intbuf[24],
668  &intbuf[25]);
669  m_decimator2.myDecimate(
670  buf[pos+52],
671  buf[pos+53],
672  &intbuf[26],
673  &intbuf[27]);
674  m_decimator2.myDecimate(
675  buf[pos+56],
676  buf[pos+57],
677  &intbuf[28],
678  &intbuf[29]);
679  m_decimator2.myDecimate(
680  buf[pos+60],
681  buf[pos+61],
682  &intbuf[30],
683  &intbuf[31]);
684 
685  m_decimator4.myDecimate(
686  intbuf[0],
687  intbuf[1],
688  &intbuf[2],
689  &intbuf[3]);
690  m_decimator4.myDecimate(
691  intbuf[4],
692  intbuf[5],
693  &intbuf[6],
694  &intbuf[7]);
695  m_decimator4.myDecimate(
696  intbuf[8],
697  intbuf[9],
698  &intbuf[10],
699  &intbuf[11]);
700  m_decimator4.myDecimate(
701  intbuf[12],
702  intbuf[13],
703  &intbuf[14],
704  &intbuf[15]);
705  m_decimator4.myDecimate(
706  intbuf[16],
707  intbuf[17],
708  &intbuf[18],
709  &intbuf[19]);
710  m_decimator4.myDecimate(
711  intbuf[20],
712  intbuf[21],
713  &intbuf[22],
714  &intbuf[23]);
715  m_decimator4.myDecimate(
716  intbuf[24],
717  intbuf[25],
718  &intbuf[26],
719  &intbuf[27]);
720  m_decimator4.myDecimate(
721  intbuf[28],
722  intbuf[29],
723  &intbuf[30],
724  &intbuf[31]);
725 
726  m_decimator8.myDecimate(
727  intbuf[2],
728  intbuf[3],
729  &intbuf[6],
730  &intbuf[7]);
731  m_decimator8.myDecimate(
732  intbuf[10],
733  intbuf[11],
734  &intbuf[14],
735  &intbuf[15]);
736  m_decimator8.myDecimate(
737  intbuf[18],
738  intbuf[19],
739  &intbuf[22],
740  &intbuf[23]);
741  m_decimator8.myDecimate(
742  intbuf[26],
743  intbuf[27],
744  &intbuf[30],
745  &intbuf[31]);
746 
747  m_decimator16.myDecimate(
748  intbuf[6],
749  intbuf[7],
750  &intbuf[14],
751  &intbuf[15]);
752  m_decimator16.myDecimate(
753  intbuf[22],
754  intbuf[23],
755  &intbuf[30],
756  &intbuf[31]);
757 
758  m_decimator32.myDecimate(
759  intbuf[14],
760  intbuf[15],
761  &intbuf[30],
762  &intbuf[31]);
763 
764  (**it).setReal(intbuf[30] * decimation_scale<InputBits>::scaleIn);
765  (**it).setImag(intbuf[31] * decimation_scale<InputBits>::scaleIn);
766  ++(*it);
767  }
768 }
769 
770 template<typename T, uint InputBits>
771 void DecimatorsIF<T, InputBits>::decimate64_inf(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
772 {
773  float xreal[16], yimag[16];
774 
775  for (int pos = 0; pos < nbIAndQ - 127; )
776  {
777  for (int i = 0; i < 16; i++)
778  {
779  xreal[i] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]);
780  yimag[i] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]);
781  pos += 8;
782  }
783 
784  m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
785  m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
786  m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
787  m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
788  m_decimator2.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]);
789  m_decimator2.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]);
790  m_decimator2.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]);
791  m_decimator2.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]);
792 
793  m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
794  m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
795  m_decimator4.myDecimate(xreal[9], yimag[9], &xreal[11], &yimag[11]);
796  m_decimator4.myDecimate(xreal[13], yimag[13], &xreal[15], &yimag[15]);
797 
798  m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
799  m_decimator8.myDecimate(xreal[11], yimag[11], &xreal[15], &yimag[15]);
800 
801  m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]);
802 
803  (**it).setReal(xreal[15] * decimation_scale<InputBits>::scaleIn);
804  (**it).setImag(yimag[15] * decimation_scale<InputBits>::scaleIn);
805 
806  ++(*it);
807  }
808 }
809 
810 template<typename T, uint InputBits>
811 void DecimatorsIF<T, InputBits>::decimate64_sup(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
812 {
813  float xreal[16], yimag[16];
814 
815  for (int pos = 0; pos < nbIAndQ - 127; )
816  {
817  for (int i = 0; i < 16; i++)
818  {
819  xreal[i] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]);
820  yimag[i] = (buf[pos+4] + buf[pos+7] - buf[pos+0] - buf[pos+3]);
821  pos += 8;
822  }
823 
824  m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
825  m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
826  m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
827  m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
828  m_decimator2.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]);
829  m_decimator2.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]);
830  m_decimator2.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]);
831  m_decimator2.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]);
832 
833  m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
834  m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
835  m_decimator4.myDecimate(xreal[9], yimag[9], &xreal[11], &yimag[11]);
836  m_decimator4.myDecimate(xreal[13], yimag[13], &xreal[15], &yimag[15]);
837 
838  m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
839  m_decimator8.myDecimate(xreal[11], yimag[11], &xreal[15], &yimag[15]);
840 
841  m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]);
842 
843  (**it).setReal(xreal[15] * decimation_scale<InputBits>::scaleIn);
844  (**it).setImag(yimag[15] * decimation_scale<InputBits>::scaleIn);
845 
846  ++(*it);
847  }
848 }
849 
850 template<typename T, uint InputBits>
851 void DecimatorsIF<T, InputBits>::decimate64_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ)
852 {
853  float intbuf[64];
854 
855  for (int pos = 0; pos < nbIAndQ - 127; pos += 128)
856  {
857  intbuf[0] = buf[pos+2];
858  intbuf[1] = buf[pos+3];
859  intbuf[2] = buf[pos+6];
860  intbuf[3] = buf[pos+7];
861  intbuf[4] = buf[pos+10];
862  intbuf[5] = buf[pos+11];
863  intbuf[6] = buf[pos+14];
864  intbuf[7] = buf[pos+15];
865  intbuf[8] = buf[pos+18];
866  intbuf[9] = buf[pos+19];
867  intbuf[10] = buf[pos+22];
868  intbuf[11] = buf[pos+23];
869  intbuf[12] = buf[pos+26];
870  intbuf[13] = buf[pos+27];
871  intbuf[14] = buf[pos+30];
872  intbuf[15] = buf[pos+31];
873  intbuf[16] = buf[pos+34];
874  intbuf[17] = buf[pos+35];
875  intbuf[18] = buf[pos+38];
876  intbuf[19] = buf[pos+39];
877  intbuf[20] = buf[pos+42];
878  intbuf[21] = buf[pos+43];
879  intbuf[22] = buf[pos+46];
880  intbuf[23] = buf[pos+47];
881  intbuf[24] = buf[pos+50];
882  intbuf[25] = buf[pos+51];
883  intbuf[26] = buf[pos+54];
884  intbuf[27] = buf[pos+55];
885  intbuf[28] = buf[pos+58];
886  intbuf[29] = buf[pos+59];
887  intbuf[30] = buf[pos+62];
888  intbuf[31] = buf[pos+63];
889 
890  intbuf[32] = buf[pos+66];
891  intbuf[33] = buf[pos+67];
892  intbuf[34] = buf[pos+70];
893  intbuf[35] = buf[pos+71];
894  intbuf[36] = buf[pos+74];
895  intbuf[37] = buf[pos+75];
896  intbuf[38] = buf[pos+78];
897  intbuf[39] = buf[pos+79];
898  intbuf[40] = buf[pos+82];
899  intbuf[41] = buf[pos+83];
900  intbuf[42] = buf[pos+86];
901  intbuf[43] = buf[pos+87];
902  intbuf[44] = buf[pos+90];
903  intbuf[45] = buf[pos+91];
904  intbuf[46] = buf[pos+94];
905  intbuf[47] = buf[pos+95];
906  intbuf[48] = buf[pos+98];
907  intbuf[49] = buf[pos+99];
908  intbuf[50] = buf[pos+102];
909  intbuf[51] = buf[pos+103];
910  intbuf[52] = buf[pos+106];
911  intbuf[53] = buf[pos+107];
912  intbuf[54] = buf[pos+110];
913  intbuf[55] = buf[pos+111];
914  intbuf[56] = buf[pos+114];
915  intbuf[57] = buf[pos+115];
916  intbuf[58] = buf[pos+118];
917  intbuf[59] = buf[pos+119];
918  intbuf[60] = buf[pos+122];
919  intbuf[61] = buf[pos+123];
920  intbuf[62] = buf[pos+126];
921  intbuf[63] = buf[pos+127];
922 
923  m_decimator2.myDecimate(
924  buf[pos+0],
925  buf[pos+1],
926  &intbuf[0],
927  &intbuf[1]);
928  m_decimator2.myDecimate(
929  buf[pos+4],
930  buf[pos+5],
931  &intbuf[2],
932  &intbuf[3]);
933  m_decimator2.myDecimate(
934  buf[pos+8],
935  buf[pos+9],
936  &intbuf[4],
937  &intbuf[5]);
938  m_decimator2.myDecimate(
939  buf[pos+12],
940  buf[pos+13],
941  &intbuf[6],
942  &intbuf[7]);
943  m_decimator2.myDecimate(
944  buf[pos+16],
945  buf[pos+17],
946  &intbuf[8],
947  &intbuf[9]);
948  m_decimator2.myDecimate(
949  buf[pos+20],
950  buf[pos+21],
951  &intbuf[10],
952  &intbuf[11]);
953  m_decimator2.myDecimate(
954  buf[pos+24],
955  buf[pos+25],
956  &intbuf[12],
957  &intbuf[13]);
958  m_decimator2.myDecimate(
959  buf[pos+28],
960  buf[pos+29],
961  &intbuf[14],
962  &intbuf[15]);
963  m_decimator2.myDecimate(
964  buf[pos+32],
965  buf[pos+33],
966  &intbuf[16],
967  &intbuf[17]);
968  m_decimator2.myDecimate(
969  buf[pos+36],
970  buf[pos+37],
971  &intbuf[18],
972  &intbuf[19]);
973  m_decimator2.myDecimate(
974  buf[pos+40],
975  buf[pos+41],
976  &intbuf[20],
977  &intbuf[21]);
978  m_decimator2.myDecimate(
979  buf[pos+44],
980  buf[pos+45],
981  &intbuf[22],
982  &intbuf[23]);
983  m_decimator2.myDecimate(
984  buf[pos+48],
985  buf[pos+49],
986  &intbuf[24],
987  &intbuf[25]);
988  m_decimator2.myDecimate(
989  buf[pos+52],
990  buf[pos+53],
991  &intbuf[26],
992  &intbuf[27]);
993  m_decimator2.myDecimate(
994  buf[pos+56],
995  buf[pos+57],
996  &intbuf[28],
997  &intbuf[29]);
998  m_decimator2.myDecimate(
999  buf[pos+60],
1000  buf[pos+61],
1001  &intbuf[30],
1002  &intbuf[31]);
1003  m_decimator2.myDecimate(
1004  buf[pos+64],
1005  buf[pos+65],
1006  &intbuf[32],
1007  &intbuf[33]);
1008  m_decimator2.myDecimate(
1009  buf[pos+68],
1010  buf[pos+69],
1011  &intbuf[34],
1012  &intbuf[35]);
1013  m_decimator2.myDecimate(
1014  buf[pos+72],
1015  buf[pos+73],
1016  &intbuf[36],
1017  &intbuf[37]);
1018  m_decimator2.myDecimate(
1019  buf[pos+76],
1020  buf[pos+77],
1021  &intbuf[38],
1022  &intbuf[39]);
1023  m_decimator2.myDecimate(
1024  buf[pos+80],
1025  buf[pos+81],
1026  &intbuf[40],
1027  &intbuf[41]);
1028  m_decimator2.myDecimate(
1029  buf[pos+84],
1030  buf[pos+85],
1031  &intbuf[42],
1032  &intbuf[43]);
1033  m_decimator2.myDecimate(
1034  buf[pos+88],
1035  buf[pos+89],
1036  &intbuf[44],
1037  &intbuf[45]);
1038  m_decimator2.myDecimate(
1039  buf[pos+92],
1040  buf[pos+93],
1041  &intbuf[46],
1042  &intbuf[47]);
1043  m_decimator2.myDecimate(
1044  buf[pos+96],
1045  buf[pos+97],
1046  &intbuf[48],
1047  &intbuf[49]);
1048  m_decimator2.myDecimate(
1049  buf[pos+100],
1050  buf[pos+101],
1051  &intbuf[50],
1052  &intbuf[51]);
1053  m_decimator2.myDecimate(
1054  buf[pos+104],
1055  buf[pos+105],
1056  &intbuf[52],
1057  &intbuf[53]);
1058  m_decimator2.myDecimate(
1059  buf[pos+108],
1060  buf[pos+109],
1061  &intbuf[54],
1062  &intbuf[55]);
1063  m_decimator2.myDecimate(
1064  buf[pos+112],
1065  buf[pos+113],
1066  &intbuf[56],
1067  &intbuf[57]);
1068  m_decimator2.myDecimate(
1069  buf[pos+116],
1070  buf[pos+117],
1071  &intbuf[58],
1072  &intbuf[59]);
1073  m_decimator2.myDecimate(
1074  buf[pos+120],
1075  buf[pos+121],
1076  &intbuf[60],
1077  &intbuf[61]);
1078  m_decimator2.myDecimate(
1079  buf[pos+124],
1080  buf[pos+125],
1081  &intbuf[62],
1082  &intbuf[63]);
1083 
1084  m_decimator4.myDecimate(
1085  intbuf[0],
1086  intbuf[1],
1087  &intbuf[2],
1088  &intbuf[3]);
1089  m_decimator4.myDecimate(
1090  intbuf[4],
1091  intbuf[5],
1092  &intbuf[6],
1093  &intbuf[7]);
1094  m_decimator4.myDecimate(
1095  intbuf[8],
1096  intbuf[9],
1097  &intbuf[10],
1098  &intbuf[11]);
1099  m_decimator4.myDecimate(
1100  intbuf[12],
1101  intbuf[13],
1102  &intbuf[14],
1103  &intbuf[15]);
1104  m_decimator4.myDecimate(
1105  intbuf[16],
1106  intbuf[17],
1107  &intbuf[18],
1108  &intbuf[19]);
1109  m_decimator4.myDecimate(
1110  intbuf[20],
1111  intbuf[21],
1112  &intbuf[22],
1113  &intbuf[23]);
1114  m_decimator4.myDecimate(
1115  intbuf[24],
1116  intbuf[25],
1117  &intbuf[26],
1118  &intbuf[27]);
1119  m_decimator4.myDecimate(
1120  intbuf[28],
1121  intbuf[29],
1122  &intbuf[30],
1123  &intbuf[31]);
1124  m_decimator4.myDecimate(
1125  intbuf[32],
1126  intbuf[33],
1127  &intbuf[34],
1128  &intbuf[35]);
1129  m_decimator4.myDecimate(
1130  intbuf[36],
1131  intbuf[37],
1132  &intbuf[38],
1133  &intbuf[39]);
1134  m_decimator4.myDecimate(
1135  intbuf[40],
1136  intbuf[41],
1137  &intbuf[42],
1138  &intbuf[43]);
1139  m_decimator4.myDecimate(
1140  intbuf[44],
1141  intbuf[45],
1142  &intbuf[46],
1143  &intbuf[47]);
1144  m_decimator4.myDecimate(
1145  intbuf[48],
1146  intbuf[49],
1147  &intbuf[50],
1148  &intbuf[51]);
1149  m_decimator4.myDecimate(
1150  intbuf[52],
1151  intbuf[53],
1152  &intbuf[54],
1153  &intbuf[55]);
1154  m_decimator4.myDecimate(
1155  intbuf[56],
1156  intbuf[57],
1157  &intbuf[58],
1158  &intbuf[59]);
1159  m_decimator4.myDecimate(
1160  intbuf[60],
1161  intbuf[61],
1162  &intbuf[62],
1163  &intbuf[63]);
1164 
1165  m_decimator8.myDecimate(
1166  intbuf[2],
1167  intbuf[3],
1168  &intbuf[6],
1169  &intbuf[7]);
1170  m_decimator8.myDecimate(
1171  intbuf[10],
1172  intbuf[11],
1173  &intbuf[14],
1174  &intbuf[15]);
1175  m_decimator8.myDecimate(
1176  intbuf[18],
1177  intbuf[19],
1178  &intbuf[22],
1179  &intbuf[23]);
1180  m_decimator8.myDecimate(
1181  intbuf[26],
1182  intbuf[27],
1183  &intbuf[30],
1184  &intbuf[31]);
1185  m_decimator8.myDecimate(
1186  intbuf[34],
1187  intbuf[35],
1188  &intbuf[38],
1189  &intbuf[39]);
1190  m_decimator8.myDecimate(
1191  intbuf[42],
1192  intbuf[43],
1193  &intbuf[46],
1194  &intbuf[47]);
1195  m_decimator8.myDecimate(
1196  intbuf[50],
1197  intbuf[51],
1198  &intbuf[54],
1199  &intbuf[55]);
1200  m_decimator8.myDecimate(
1201  intbuf[58],
1202  intbuf[59],
1203  &intbuf[62],
1204  &intbuf[63]);
1205 
1206  m_decimator16.myDecimate(
1207  intbuf[6],
1208  intbuf[7],
1209  &intbuf[14],
1210  &intbuf[15]);
1211  m_decimator16.myDecimate(
1212  intbuf[22],
1213  intbuf[23],
1214  &intbuf[30],
1215  &intbuf[31]);
1216  m_decimator16.myDecimate(
1217  intbuf[38],
1218  intbuf[39],
1219  &intbuf[46],
1220  &intbuf[47]);
1221  m_decimator16.myDecimate(
1222  intbuf[54],
1223  intbuf[55],
1224  &intbuf[62],
1225  &intbuf[63]);
1226 
1227  m_decimator32.myDecimate(
1228  intbuf[14],
1229  intbuf[15],
1230  &intbuf[30],
1231  &intbuf[31]);
1232  m_decimator32.myDecimate(
1233  intbuf[46],
1234  intbuf[47],
1235  &intbuf[62],
1236  &intbuf[63]);
1237 
1238  m_decimator64.myDecimate(
1239  intbuf[30],
1240  intbuf[31],
1241  &intbuf[62],
1242  &intbuf[63]);
1243 
1244  (**it).setReal(intbuf[62] * decimation_scale<InputBits>::scaleIn);
1245  (**it).setImag(intbuf[63] * decimation_scale<InputBits>::scaleIn);
1246  ++(*it);
1247  }
1248 }
1249 
1250 #endif /* SDRBASE_DSP_DECIMATORSIF_H_ */
void decimate8_sup(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:259
void decimate16_sup(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:368
void decimate4_inf(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:167
void decimate8_inf(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:236
void decimate64_cen(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:851
IntHalfbandFilterEOF< DECIMATORS_IF_FILTER_ORDER > m_decimator32
Definition: decimatorsif.h:82
void decimate32_sup(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:534
void decimate64_sup(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:811
void decimate2_inf(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:102
void decimate4_cen(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:201
void decimate1(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:87
IntHalfbandFilterEOF< DECIMATORS_IF_FILTER_ORDER > m_decimator64
Definition: decimatorsif.h:83
void decimate2_sup(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:123
int32_t i
Definition: decimators.h:244
static const float scaleIn
Definition: decimatorsif.h:44
static const float scaleIn
Definition: decimatorsif.h:38
void decimate64_inf(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:771
void decimate8_cen(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:282
IntHalfbandFilterEOF< DECIMATORS_IF_FILTER_ORDER > m_decimator2
Definition: decimatorsif.h:78
void decimate16_inf(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:342
void decimate4_sup(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:184
void decimate32_inf(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:503
static const float scaleIn
Definition: decimatorsif.h:50
void decimate16_cen(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:394
IntHalfbandFilterEOF< DECIMATORS_IF_FILTER_ORDER > m_decimator4
Definition: decimatorsif.h:79
IntHalfbandFilterEOF< DECIMATORS_IF_FILTER_ORDER > m_decimator8
Definition: decimatorsif.h:80
void decimate2_cen(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:144
void decimate32_cen(FSampleVector::iterator *it, const T *buf, qint32 nbIAndQ)
Definition: decimatorsif.h:565
static const float scaleIn
Definition: decimatorsif.h:29
IntHalfbandFilterEOF< DECIMATORS_IF_FILTER_ORDER > m_decimator16
Definition: decimatorsif.h:81