📄 viterbi29.h
字号:
/* r=1/2 k=9 convolutional encoder polynomials */
#ifndef _VITERBI29_H_
#define _VITERBI29_H_ 1
#define V29POLYA 0x1af
#define V29POLYB 0x11d
#if defined(MMX)
typedef union { long long p; char c[256]; } decision_t;
#define EXTRACT_DECISION(d,state) ((d)->c[state] & 1)
#else
typedef union { long long p; unsigned long w[8]; } decision_t;
#define EXTRACT_DECISION(d,state) (((d)->w[state/32] >> (state%32)) & 1)
#endif
/* State info for instance of Viterbi decoder
* Don't change this without also changing references in (mmx|sse|sse2)bfly29.s!
*/
struct v29 {
unsigned char metrics1[256]; /* path metric buffer 1 */
unsigned char metrics2[256]; /* path metric buffer 2 */
decision_t *dp; /* Pointer to decision output for current bit */
unsigned char *old_metrics,*new_metrics; /* Pointers to path metrics, swapped on every bit */
decision_t *decisions; /* Beginning of decisions for block */
void *alloc_blk; /* Return value from malloc */
};
/* Create a Viterbi decoder */
struct v29 *create_viterbi29(int len);
/* Initialize Viterbi decoder */
int init_viterbi29(struct v29 *vp,int starting_state);
/* Perform one stage of Viterbi butterflies */
int update_viterbi29(struct v29 *vp,unsigned char sym1,unsigned char sym2);
/* Perform chainback at end of trellis */
int chainback_viterbi29(
struct v29 *vp,
unsigned char *data, /* Decoded output data */
unsigned int nbits, /* Number of data bits */
unsigned int endstate); /* Terminal encoder state */
/* Delete instance of Viterbi decoder */
void delete_viterbi29(struct v29 *vp);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -