23 #ifndef INCLUDED_volk_8u_conv_k7_r2puppet_8u_H 24 #define INCLUDED_volk_8u_conv_k7_r2puppet_8u_H 26 #include <volk/volk.h> 36 static 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;
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;
100 return retval >> d_ADDSHIFT;
106 #include <pmmintrin.h> 107 #include <emmintrin.h> 108 #include <xmmintrin.h> 109 #include <mmintrin.h> 116 int d_numstates = (1 << 6);
118 static unsigned char* D;
119 static unsigned char* Y;
120 static unsigned char* X;
121 static unsigned int excess = 6;
122 static unsigned char* Branchtab;
123 static unsigned char Partab[256];
125 int d_polys[2] = {79, 109};
149 for(state=0;state < d_numstates/2;state++){
150 for(i=0; i<rate; i++){
151 Branchtab[i*d_numstates/2+state] =
parity((2*state) & d_polys[i], Partab) ? 255 : 0;
159 memset(X, 31, d_numstates);
162 memset(D, 0, (d_numstates/8) * (framebits + 6));
166 unsigned int min = X[0];
167 int i = 0, state = 0;
168 for(i = 0; i < (d_numstates); ++
i) {
185 #include <immintrin.h> 188 static inline void volk_8u_conv_k7_r2puppet_8u_avx2(
unsigned char* syms,
unsigned char* dec,
unsigned int framebits) {
192 int d_numstates = (1 << 6);
194 static unsigned char* D;
195 static unsigned char* Y;
196 static unsigned char* X;
197 static unsigned int excess = 6;
198 static unsigned char* Branchtab;
199 static unsigned char Partab[256];
201 int d_polys[2] = {79, 109};
225 for(state=0;state < d_numstates/2;state++){
226 for(i=0; i<rate; i++){
227 Branchtab[i*d_numstates/2+state] =
parity((2*state) & d_polys[i], Partab) ? 255 : 0;
235 memset(X, 31, d_numstates);
238 memset(D, 0, (d_numstates/8) * (framebits + 6));
240 volk_8u_x4_conv_k7_r2_8u_avx2(Y, X, syms, D, framebits/2 - excess, excess, Branchtab);
242 unsigned int min = X[0];
243 int i = 0, state = 0;
244 for(i = 0; i < (d_numstates); ++
i) {
268 int d_numstates = (1 << 6);
270 static unsigned char* Y;
271 static unsigned char* X;
272 static unsigned char* D;
273 static unsigned int excess = 6;
274 static unsigned char* Branchtab;
275 static unsigned char Partab[256];
277 int d_polys[2] = {79, 109};
302 for(state=0;state < d_numstates/2;state++){
303 for(i=0; i<rate; i++){
304 Branchtab[i*d_numstates/2+state] =
parity((2*state) & d_polys[i], Partab) ? 255 : 0;
312 memset(X, 31, d_numstates);
315 memset(D, 0, (d_numstates/8) * (framebits + 6));
319 unsigned int min = X[0];
320 int i = 0, state = 0;
321 for(i = 0; i < (d_numstates); ++
i) {
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
Definition: volk_8u_conv_k7_r2puppet_8u.h:30
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:326
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:616
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
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:49
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:263
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:112
static int parity(int x, unsigned char *Partab)
Definition: volk_8u_conv_k7_r2puppet_8u.h:36
unsigned int * w
Definition: volk_8u_conv_k7_r2puppet_8u.h:33
data
Definition: plot_best_vs_generic.py:36