📄 viterbi27.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 + -