⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viterbi29.h

📁 Viterbi编码解码算法
💻 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 + -