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

📄 viterbi27.h

📁 RS,Viterbi,Sequence 编解码C源代码
💻 H
字号:
/* 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -