viterbi27.h

来自「Viterbi编码解码算法」· C头文件 代码 · 共 34 行

H
34
字号
/* r=1/2 k=7 convolutional encoder polynomials */
#ifndef _VITERBI27_H_
#define _VITERBI27_H_ 1
#define	V27POLYA	0x6d
#define	V27POLYB	0x4f

#if defined(MMX)
typedef union { long long p; char c[64]; } decision_t;
#define EXTRACT_DECISION(d,state) ((d)->c[(state)] & 1)
#else
typedef union { long long p; unsigned long w[2]; } 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 v27 {
  unsigned char metrics1[64]; /* path metric buffer 1 */
  unsigned char metrics2[64]; /* 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 */
};

struct v27 *create_viterbi27(int len);
int init_viterbi27(struct v27 *vp,int starting_state);
int update_viterbi27(struct v27 *vp,unsigned char sym1,unsigned char sym2);
int chainback_viterbi27(struct v27 *vp, unsigned char *data,unsigned int nbits,unsigned int endstate);
void delete_viterbi27(struct v27 *vp);

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?