23#ifndef INCLUDED_volk_8u_conv_k7_r2puppet_8u_H
24#define INCLUDED_volk_8u_conv_k7_r2puppet_8u_H
36static inline int parity(
int x,
unsigned char* Partab)
45 unsigned int endstate,
46 unsigned int tailsize,
47 unsigned char* decisions)
51 int d_numstates = (1 << 6);
52 int d_decision_t_size = d_numstates / 8;
54 int d_framebits = nbits;
61 endstate = (endstate % d_numstates) << d_ADDSHIFT;
68 d += tailsize * d_decision_t_size;
70 int dif = tailsize - (d_k - 1);
73 while (nbits-- > d_framebits - (d_k - 1)) {
75 dec.
t = &d[nbits * d_decision_t_size];
76 k = (dec.w[(endstate >> d_ADDSHIFT) / 32] >> ((endstate >> d_ADDSHIFT) % 32)) & 1;
78 endstate = (endstate >> 1) | (k << (d_k - 2 + d_ADDSHIFT));
81 data[((nbits + dif) % d_framebits)] = k;
87 while (nbits-- != 0) {
90 dec.t = &d[nbits * d_decision_t_size];
92 k = (dec.w[(endstate >> d_ADDSHIFT) / 32] >> ((endstate >> d_ADDSHIFT) % 32)) & 1;
94 endstate = (endstate >> 1) | (k << (d_k - 2 + d_ADDSHIFT));
95 data[((nbits + dif) % d_framebits)] = k;
101 return retval >> d_ADDSHIFT;
107#include <emmintrin.h>
109#include <pmmintrin.h>
111#include <xmmintrin.h>
115 unsigned int framebits)
120 int d_numstates = (1 << 6);
122 static unsigned char* D;
123 static unsigned char* Y;
124 static unsigned char* X;
125 static unsigned int excess = 6;
126 static unsigned char* Branchtab;
127 static unsigned char Partab[256];
129 int d_polys[2] = { 79, 109 };
138 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
144 for (
i = 0;
i < 256;
i++) {
155 for (state = 0; state < d_numstates / 2; state++) {
156 for (
i = 0;
i < rate;
i++) {
157 Branchtab[
i * d_numstates / 2 + state] =
158 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
166 memset(X, 31, d_numstates);
169 memset(D, 0, (d_numstates / 8) * (framebits + 6));
172 Y, X, syms, D, framebits / 2 - excess, excess, Branchtab);
174 unsigned int min = X[0];
175 int i = 0, state = 0;
176 for (
i = 0;
i < (d_numstates); ++
i) {
279 unsigned int framebits)
284 int d_numstates = (1 << 6);
286 static unsigned char* Y;
287 static unsigned char* X;
288 static unsigned char* D;
289 static unsigned int excess = 6;
290 static unsigned char* Branchtab;
291 static unsigned char Partab[256];
293 int d_polys[2] = { 79, 109 };
302 D = (
unsigned char*)
volk_malloc((d_numstates / 8) * (framebits + 6),
309 for (
i = 0;
i < 256;
i++) {
320 for (state = 0; state < d_numstates / 2; state++) {
321 for (
i = 0;
i < rate;
i++) {
322 Branchtab[
i * d_numstates / 2 + state] =
323 parity((2 * state) & d_polys[
i], Partab) ? 255 : 0;
331 memset(X, 31, d_numstates);
334 memset(D, 0, (d_numstates / 8) * (framebits + 6));
337 Y, X, syms, D, framebits / 2 - excess, excess, Branchtab);
339 unsigned int min = X[0];
340 int i = 0, state = 0;
341 for (
i = 0;
i < (d_numstates); ++
i) {
Definition: volk_8u_conv_k7_r2puppet_8u.h:30
unsigned int * w
Definition: volk_8u_conv_k7_r2puppet_8u.h:33
unsigned char * t
Definition: volk_8u_conv_k7_r2puppet_8u.h:32
size_t volk_get_alignment(void)
Get the machine alignment in bytes.
Definition: volk.tmpl.c:102
static void volk_8u_conv_k7_r2puppet_8u_generic(unsigned char *syms, unsigned char *dec, unsigned int framebits)
Definition: volk_8u_conv_k7_r2puppet_8u.h:277
static void volk_8u_conv_k7_r2puppet_8u_spiral(unsigned char *syms, unsigned char *dec, unsigned int framebits)
Definition: volk_8u_conv_k7_r2puppet_8u.h:113
static int chainback_viterbi(unsigned char *data, unsigned int nbits, unsigned int endstate, unsigned int tailsize, unsigned char *decisions)
Definition: volk_8u_conv_k7_r2puppet_8u.h:43
static int parity(int x, unsigned char *Partab)
Definition: volk_8u_conv_k7_r2puppet_8u.h:36
static void volk_8u_x4_conv_k7_r2_8u_spiral(unsigned char *Y, unsigned char *X, unsigned char *syms, unsigned char *dec, unsigned int framebits, unsigned int excess, unsigned char *Branchtab)
Definition: volk_8u_x4_conv_k7_r2_8u.h:343
static void volk_8u_x4_conv_k7_r2_8u_generic(unsigned char *Y, unsigned char *X, unsigned char *syms, unsigned char *dec, unsigned int framebits, unsigned int excess, unsigned char *Branchtab)
Definition: volk_8u_x4_conv_k7_r2_8u.h:638
for i
Definition: volk_config_fixed.tmpl.h:25
__VOLK_DECL_BEGIN VOLK_API void * volk_malloc(size_t size, size_t alignment)
Allocate size bytes of data aligned to alignment.
Definition: volk_malloc.c:51