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

📄 rake.h

📁 这是一个c++编写的WCDMA链路采用RAKE接收的方针源代码
💻 H
字号:
/* | | Copyright disclaimer: |   This software was developed at the National Institute of Standards |   and Technology by employees of the Federal Government in the course |   of their official duties. Pursuant to title 17 Section 105 of the |   United States Code this software is not subject to copyright |   protection and is in the public domain. | |   We would appreciate acknowledgement if the software is used. |*//* | Project:     WCDMA simulation environment | Module:	WCDMA rake receiver | Author: 	Maarit Melvasalo/NIST and |              Tommi Makelainen /Nokia Research Center | Date:        February 12, 1999 | | History: |              February 20, 1999  |                      Initial version. | |              April 7, 1999  |		Modified finger processing and restructured  |		algorithm. | |              May 7, 1999 Tommi Makelainen |                      Corrected indexing error in finger combining. | |              May 20, 1999 Tommi Makelainen |                      Corrected indexing error in spreading of |                      delayed chips. |                      If channel changes, finger allocation  |                      now changes allocation after FAST_FADE_TIME |                      slots. | */#ifndef RAKE_H#define RAKE_H/* ------------ D E F I N E S ---------------------------------------- *//* * Maximum number of slots that allocated channel tap can * be non-existing before the finger is released. */#define FAST_FADE_TIME 2/* * Maximum change in tap location (in chip/10). */#define CHANNEL_TAP_DRIFT 0/* * Threshold to for tap amplitude level to select finger. */#define FINGER_ALLOC_THRESHOLD 0.001#if 0/* * Max spreading factor. */#define MAX_SPREADING_FACTOR 256#endif/* * Maximum number of channel taps. */#define MAX_CHANNEL_LEN MAX_CHANNEL_TAPS/* * Maximum number of fingers. */#define MAX_FINGERS MAX_CHANNEL_LEN/* * Maximum number of receiver output symbols (soft bits). */#define MAX_OUTPUT_SYMBOLS 6000#define FINGER_OUT_BUFFER 2*MAX_OUTPUT_SYMBOLS/* * Maximum number of rake receivers in simulation. */#ifndef MAX_RAKES#define MAX_RAKES 4#endif /* MAX_RAKES *//* ------------ D A T A   T Y P E S ---------------------------------- *//* * Data type for each finger. */struct rake_finger_type {    int delay;			/* finger delay in chips */    double amplitude;		/* relative tap amplitude (0-1) */    double weight;		/* weight of finger output */ /* optional */    int status;			/* -1 = not allocated, 0 = active,                                   >0 = N block times not on its place                                   in channel estimate. */    int old_chips;  	        /* old chips affecting the current output */    double output[FINGER_OUT_BUFFER]; /* finger output symbols */    int nOutputs;               /* number of available output */    int fill_index;             /* index to put next output symbols */    int combine_index;          /* index to put next output symbols */};typedef struct rake_finger_type finger_type;/* * Data type to store unused chips from previous function call. */struct old_chips_type {    int len;				/* Number of old samples saved */    double chips[MAX_SPREADING_FACTOR];	/* old chips */};typedef struct old_chips_type mem_chips_t;/* * Misc. data related to rake receiver. */struct rake_misc_data_t {    int min_delay;	/* delay of shortest path in fingers */    int max_delay;	/* delay of longest path in fingers */    int output_symbols;	/* number of soft bits we on this round */};typedef struct rake_misc_data_t rake_data_type;/* * Misc. debug related data. */#define DEBUG_DATA_LEN 10int debug_data[DEBUG_DATA_LEN];/* ------------------------------------------------------------------- */int wcdma_rake_init(        int pilot_len,          /* IN: length of pilot in a slot, in chips */        double finger_inc_level,/* IN: finger selection threshold */        int nFingers);          /* IN: amount of fingers to use */int wcdma_rake_finger_alloc(			int instance,		/* IN: rake instance number */        int init_flag,	        /* IN: TRUE = first call, FALSE otherwise */        int tap_delays[],	/* IN: vector of tap delays (in chips) */        double tap_amplitudes[],  /* IN: vector of tap amplitudes (0-1) */        int ch_len,		/* IN: number of taps in channel estimate */        int code_len,           /* IN: length of spreading code */        int data_len,           /* IN: length of input data vector */        int nFingers,		/* IN: number of rake fingers to use */        finger_type *fingers,	/* IN/OUT: vector of finger data structures */        mem_chips_t *prev_rake_chips,  /* IN: data for old chips in memory */        rake_data_type *misc_data);  /* OUT: rake data */int wcdma_rake_symbol_direct(	int finger_id,		/* IN: id number of current finger */        double input[],		/* IN: input received samples */        int in_len,		/* IN: length of input vector */        int code[],		/* IN: spreading code */        int code_len,		/* IN: length of spreading code */        finger_type *fingers,	/* IN/OUT: vector of finger data structures */        mem_chips_t *prev_samples);  /* IN: old saved samples */int wcdma_rake_symbol_delayed(	int finger_id,		/* IN: id number of current finger */        double input[],		/* IN: input received samples */        int in_len,		/* IN: length of input vector */        int code[],		/* IN: spreading code */        int code_len,		/* IN: length of spreading code */        finger_type *fingers,	/* IN/OUT: vector of finger data structures */        mem_chips_t *prev_samples);  /* IN: old saved samples */int wcdma_rake_finger_memory_save(        double *input,		/* IN: input received samples */        int in_len,             /* IN: input length */        int code_len,           /* IN: spreading code length */        mem_chips_t *prev_samples);  /* IN/OUT: old saved samples */int wcdma_rake_fingers_combine(        finger_type *fingers,	/* IN: vector of finger data structures */        int nFingers,		/* IN: number of fingers to combine */        double output[],	/* OUT: output symbols */        int *nOutputs);         /* OUT: length of output vector */int wcdma_rake_receiver(        int instance,		/* IN: instance number */        double data[], 		/* IN: input data symbol vector */        int data_len,  		/* IN: length of input data vector */        int code[],    		/* IN: spreading code vector */        int code_len,  		/* IN: length of spreading code */        int sf,        		/* IN: Chip/data rate, i.e. spreading factor */        int ch_delays[], 	/* IN: Channel estimate */        double ch_amplitudes[], /* IN: Channel estimate */        int ch_len,    		/* IN: Channel estimate */        int *out_len, 		/* OUT: Number of of output symbols */        int *out_delay,		/* OUT: Tx to Rx delay in chips */        double out[]); 		/* OUT: desreaded output symbol vector */	#endif /* RAKE_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -