FreeCalypso > hg > fc-tourmaline
diff src/cs/layer1/gtt_include/ctm/conv_poly.h @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cs/layer1/gtt_include/ctm/conv_poly.h Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,153 @@ +/* +******************************************************************************* +* +* COPYRIGHT (C) 2000 BY ERICSSON EUROLAB DEUTSCHLAND GmbH +* +* The program(s) may be used and/or copied only with the +* written permission from Ericsson or in accordance +* with the terms and conditions stipulated in the agreement or +* contract under which the program(s) have been supplied. +* +******************************************************************************* +* +* File : conv_poly.h +* Purpose : Header file for conv_poly.c +* Author : Francisco Javier Gil Gomez +* +******************************************************************************* +*/ + +#ifndef conv_poly_h +#define conv_poly_h + +#include "ctm_defines.h" /* CHC_RATE, CHC_K */ + +/* The constants CHC_RATE (rate of the channel codec) and */ +/* CHC_K (constraint length) are defined in ctm_defines */ + +#define NUM_NODES (1<<(CHC_K-1)) /* MUST BE 2^(CHC_K-1) */ +#define BLOCK 5 /* We perform the analysis of the */ +// /* paths along BLOCK*CHC_K steps */ + + +/* POLYXYZ = Polynomial for generating an optimum short constraint */ +/* length convolutional code with rate = 1/X and constraint length = Y */ + +/* Polynoms for rate = 1/2 */ + +#define POLY23A 0x7 +#define POLY23B 0x5 + +#define POLY24A 0XF +#define POLY24B 0XB + +#define POLY25A 0X17 +#define POLY25B 0X19 + +#define POLY26A 0X2F +#define POLY26B 0X35 + +#define POLY27A 0X4F +#define POLY27B 0X6D + +#define POLY28A 0X9F +#define POLY28B 0XE5 + +#define POLY29A 0X1AF +#define POLY29B 0X11D + +/* Polynoms for rate = 1/3 */ + +#define POLY33A 0x7 +#define POLY33B 0x7 +#define POLY33C 0x5 + +#define POLY34A 0xF +#define POLY34B 0xB +#define POLY34C 0xD + +#define POLY35A 0x1F +#define POLY35B 0x1B +#define POLY35C 0x15 + +#define POLY36A 0x2F +#define POLY36B 0x2B +#define POLY36C 0x3D + +#define POLY37A 0x4F +#define POLY37B 0x57 +#define POLY37C 0x6D + +#define POLY38A 0xEF +#define POLY38B 0x9B +#define POLY38C 0xA9 + +/* Polynoms for rate = 1/4 */ +/* cf. Lin and Costello, + "Error Control Coding: Fundamentals and Applications" */ + +#define POLY43A 0x5 +#define POLY43B 0x7 +#define POLY43C 0x7 +#define POLY43D 0x7 + +#define POLY44A 0xB +#define POLY44B 0xD +#define POLY44C 0xD +#define POLY44D 0xF + +#define POLY45A 0x15 +#define POLY45B 0x17 +#define POLY45C 0x1B +#define POLY45D 0x1F + +#define POLY46A 0x2B +#define POLY46B 0x37 +#define POLY46C 0x39 +#define POLY46D 0x3D + +#define POLY47A 0x5D +#define POLY47B 0x5D +#define POLY47C 0x67 +#define POLY47D 0x73 + +#define POLY48A 0x9D +#define POLY48B 0xBD +#define POLY48C 0xCB +#define POLY48D 0xEF + +#define POLY49A 0x133 +#define POLY49B 0x15D +#define POLY49C 0x1DB +#define POLY49D 0x1E5 + +typedef struct +{ + WORD16 impulse_response[CHC_RATE*CHC_K]; + WORD16 temp[CHC_RATE*CHC_K]; +} conv_encoder_t; + +typedef struct +{ + WORD32 metric; /* Metric of the node after updating */ + WORD32 oldmetric; /* Metric of the node before updating */ + WORD16 base_output; /* Output of the node when the input is 0 */ + WORD16 continue_path_from; /* Last node from which the actual node + will continue the path */ + WORD16 new_entry; /* Value to be added to the path (0 or 1) */ + WORD16 path[BLOCK*CHC_K]; /* Path ending in the node */ + WORD16 temppath[BLOCK*CHC_K]; /* Temp path used for the updating */ + +} node_t; + +typedef struct +{ + node_t nodes[NUM_NODES]; + WORD16 number_of_steps; +} viterbi_t; + +void polynomials(WORD16 rate, WORD16 k, + WORD16* polya, WORD16* polyb, + WORD16* polyc, WORD16* polyd); + +#endif