FreeCalypso > hg > fc-magnetite
diff src/cs/layer1/gtt_include/ctm/init_interleaver.h @ 0:945cf7f506b2
src/cs: chipsetsw import from tcs211-fcmodem
binary blobs and LCD demo files have been excluded,
all line endings are LF only
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Sep 2016 22:50:11 +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/init_interleaver.h Sun Sep 25 22:50:11 2016 +0000 @@ -0,0 +1,184 @@ +/* +******************************************************************************* +* +* COPYRIGHT (C) 2000 BY ERICSSON EUROLAB DEUTSCHLAND GmbH +* 90411 NUERNBERG, GERMANY, Tel Int + 49 911 5217 100 +* +* 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 : init_interleaver.h +* Purpose : initialization of the diagonal (chain) interleaver; +* definition of the type interleaver_state_t +* +******************************************************************************* +*/ +#ifndef init_interleaver_h +#define init_interleaver_h "$Id: $" + +/* +******************************************************************************* +* INCLUDE FILES +******************************************************************************* +*/ + +#include "ctm_typedefs.h" + +/* +******************************************************************************* +* DECLARATION OF PROTOTYPES +******************************************************************************* +*/ +#if (TTY_SYNC_MCU == 1) + #define RESYNC_OFFSET 384 +#endif + +/* --------------------------------------------------------------------- */ +/* interleaver_state_t: */ +/* type definition for storing the states of the diag_interleaver and */ +/* diag_deinterleaver, respectively (each instance of */ +/* interleavers/deinterleavers must have its own variable of this type */ +/* --------------------------------------------------------------------- */ + +typedef struct { + WORD16 B, D; /* dimensions of the (de)interleaver */ + WORD16 rows; /* Number of rows in buffer */ + WORD16 clmn; /* actual index within the (de)interleaver matrix */ + WORD16 ready; /* Number of ready rows in (de)interleaver */ + WORD16 *vector; /* memory of the (de)interleaver */ + WORD16 num_sync_lines1;/* number of preceding lines in the interl. matrix*/ + WORD16 num_sync_lines2;/* number of preceding lines in the interl. matrix*/ + WORD16 num_sync_bits; /* number of sync bits (demodulator sync) */ + WORD16 *sync_index_vec;/* indices of the bits for deintl. synchronization*/ + WORD16 *scramble_vec; /* sequence for scrambling */ + WORD16 *sequence; /* m-sequence for synchronisation */ + +} interleaver_state_t; + + +/* --------------------------------------------------------------------- */ +/* init_interleaver: */ +/* function for initialization of diag_interleaver and */ +/* diag_deinterleaver, respectively. The dimensions of the interleaver */ +/* must be specified: */ +/* B = (horizontal) blocklength, D = (vertical distance) */ +/* According to this specifications, this function initializes a */ +/* variable of type interleaver_state_t. */ +/* */ +/* Additionally, this function adds two types of sync information to the */ +/* bitstream. The first sync info is for the demodulator and consists */ +/* of a sequence of alternating bits so that the tones produced by the */ +/* modulator are not the same all the time. This is essential for the */ +/* demodulator to find the transitions between adjacent bits. The bits */ +/* for this demodulator synchronization simply precede the bitstream. */ +/* A good choice for this is e.g. num_sync_lines1=2, which results in */ +/* 14 additional bits in case of the (B=7, D=2) interleaver. */ +/* */ +/* The second sync info is for synchronizing the deinterleaver and */ +/* of a m-sequence with excellent autocorrelation properties. These bits */ +/* are positioned at the locations of the dummy bits, which are not used */ +/* by the interleaver. In addition, even more bits for this */ +/* can be spent by inserting additional sync bits, which precede the */ +/* interleaver's bitstream. This is indicated by chosing */ +/* num_sync_lines2>0. */ +/* */ +/* Example: (B=7, D=2)-interleaver, */ +/* num_sync_lines1=2 (demodulator sync bits are marked by 'd') */ +/* num_sync_lines2=1 (deinterleaver sync bits are marked by 'x')*/ +/* */ +/* d d d d d d d */ +/* d d d d d d d */ +/* x x x x x x x */ +/* 1 x x x x x x */ +/* 8 x x x x x x */ +/* 15 2 x x x x x */ +/* 22 9 x x x x x */ +/* 29 16 3 x x x x */ +/* 36 23 10 x x x x */ +/* 43 30 17 4 x x x */ +/* 50 37 24 11 x x x */ +/* 57 44 31 18 5 x x */ +/* 64 51 38 25 12 x x */ +/* 71 58 45 32 19 6 x */ +/* 78 65 52 39 26 13 x */ +/* 85 72 59 46 33 20 7 */ +/* 92 79 66 53 40 27 14 */ +/* 99 86 73 60 47 34 21 */ +/* --------------------------------------------------------------------- */ + +void init_interleaver(interleaver_state_t *intl_state, + WORD16 B, WORD16 D, + WORD16 num_sync_lines1, WORD16 num_sync_lines2); +/* + *********************************************************************** + * Shutdown_interleaver() * + * ********************* * + * Deallocate dyamically created buffers. * + * * + * Input variables: * + * intl_state : pointer to a variable of interleaver_state_t * + * containing the interleaver state machine. * + *********************************************************************** +*/ +void Shutdown_interleaver(interleaver_state_t *intl_state); + +/* --------------------------------------------------------------------- */ +/* reinit_interleaver: */ +/* Same as init_interleaver() but without new allocation of buffers. */ +/* This function shall be used for initiation each new burst. */ +/* --------------------------------------------------------------------- */ + +void reinit_interleaver(interleaver_state_t *intl_state); + + +void init_deinterleaver(interleaver_state_t *intl_state, + WORD16 B, WORD16 D); + +/* + *********************************************************************** + * Shutdown_deinterleaver() * + * ************************ * + * Deallocate dyamically created buffers. * + * * + * Input variables: * + * intl_state : pointer to a variable of interleaver_state_t * + * containing the deinterleaver state machine. * + *********************************************************************** +*/ +void Shutdown_deinterleaver(interleaver_state_t *intl_state); + +void reinit_deinterleaver(interleaver_state_t *intl_state); + +/* --------------------------------------------------------------------- */ +/* calc_mute_positions: */ +/* Calculation of the indices of the bits that have to be muted within */ +/* one burst. The indices are returned in the vector mute_positions. */ +/* --------------------------------------------------------------------- */ + +void calc_mute_positions(WORD16 *mute_positions, + WORD16 num_rows_to_mute, + WORD16 start_position, + WORD16 B, + WORD16 D); + +BOOL mutingRequired(WORD16 actualIndex, + WORD16 *mute_positions, + WORD16 length_mute_positions); + +/* --------------------------------------------------------------------- */ +/* generate_scrambling_sequence: */ +/* Generation of the sequence used for scrambling. The sequence consists */ +/* of 0 and 1 elements. The sequence is stored into the vector *sequence */ +/* and the length of the sequence is specified by the variable length. */ +/* --------------------------------------------------------------------- */ + +void generate_scrambling_sequence(WORD16 *sequence, WORD16 length); + +#endif + + +