📄 init_interleaver.h
字号:
/*
*******************************************************************************
*
* 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);
#if (TTY_SYNC_MCU_2 == 1)
void zero_pad_deint(interleaver_state_t *intl_state);
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -