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

📄 wib_dl_phy.c

📁 802.16e物理层下行子载波分配。严格按照802.16e实现。
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
 * Copyright (c) 2006-2007, Jushri Co.Ltd, Shanghai
 * 
 * Filename: main.c
 * Authors: yiming song (sym); 
 * Version: 0.1				Date: 2006/12/14
 * 
 * 
 * Project: Fixed C simulation platform for IEEE 802.16e-2005
 * 
 * Description: 
 *   This is the definition file of the subcarries_allocation function.
 * 
 * Function list:
 *   1.
 *   2.
 * 
 * Historys:
 * Authors    Date         Version  Description
 * sym      2006-12-14      0.1     Create
*/
 
/*
 ***************************************************************************************    
 *                                     DEFINES
 ***************************************************************************************
 */
#include "..\include\wib_dl_cc.h"
#include "..\include\wib_dl_channel.h"
#include "..\include\wib_dl_chest.h"
#include "..\include\wib_dl_hcs_crc.h"
#include "..\include\wib_dl_ctc.h"
#include "..\include\wib_dl_dif.h"
#include "..\include\wib_dl_fft.h"
#include "..\include\wib_dl_frame_desc_gen.h"
#include "..\include\wib_dl_frame_gen.h"
#include "..\include\wib_dl_modulation.h"
#include "..\include\wib_dl_rand.h"
#include "..\include\wib_dl_sc_alloc.h"
#include "..\include\wib_dl_source_gen.h"
#include "..\include\wib_dl_syn.h"
#include "..\include\wib_phy_def.h"
#include "..\include\wib_dl_fft.h"
#include "..\include\wib_dl_chest.h"
#include "..\include\wib_dl_channel.h"

/*****************************************************************
				global variable definition
*****************************************************************/
	/* global data type of downlink */
	/* frame global data structure definition */

	DL_SUBFRAME_STRUCT dl_subframe_desc_tx;	
	DL_SUBFRAME_STRUCT dl_subframe_desc_rx;

	FRM_DATA_DL_STRUCT dl_data; 


	FFT_TBL fft_tbl_inst;
 
	UINT16 slot_coded_len[22] = {
		12,		/* QPSK_1_2_CC FEC CODE TYPE = 0 */
		12,		/* QPSK_3_4_CC FEC CODE TYPE = 1 */
		24,		/* QAM16_1_2_CC FEC CODE TYPE = 2 */
		24,		/* QAM16_3_4_CC FEC CODE TYPE = 3 */
		36,		/* QAM64_1_2_CC FEC CODE TYPE = 4 */
		36,		/* QAM64_2_3_CC FEC CODE TYPE = 5 */
		36,		/* QAM64_3_4_CC FEC CODE TYPE = 6 */
		0,		/* QPSK_1_2_BTC FEC CODE TYPE = 7 */
		0,		/* QPSK_3_4_BTC FEC CODE TYPE = 8 */
		0,		/* QAM16_3_5_BTC FEC CODE TYPE = 9 */
		0,		/* QAM16_4_5_BTC FEC CODE TYPE = 10 */
		0,		/* QAM64_2_3_BTC FEC CODE TYPE = 11 */
		0,		/* QAM64_5_6_BTC FEC CODE TYPE = 12 */
		12,		/* QPSK_1_2_CTC FEC CODE TYPE = 13 */
		0,		/* RESERVED1 FEC CODE TYPE = 14 */
		12,		/* QPSK_3_4_CTC FEC CODE TYPE = 15 */
		24,		/* QAM16_1_2_CTC FEC CODE TYPE = 16 */
		24,		/* QAM16_3_4_CTC FEC CODE TYPE = 17 */
		36,		/* QAM64_1_2_CTC FEC CODE TYPE = 18 */
		36,		/* QAM64_2_3_CTC FEC CODE TYPE = 19 */
		36,		/* QAM64_3_4_CTC FEC CODE TYPE = 20 */
		36		/* QAM64_5_6_CTC FEC CODE TYPE = 21 */			
	};


void dl_phy_tx()
{
 /*
 * *************************************************************************************
 *                             GLOBAL   VARIABLES
 * *************************************************************************************
 */

	/*
	***************************************************************************************
	*                                     Constant definition
	***************************************************************************************
	*/
	INT16 coef_std;
	UINT16 data_width;

/*

*/
 /*
 * *************************************************************************************
 * function name: main
 * parameters: 
 * description: main function.
 * -------------------------------------------------------------------------------------
 */

	

	/*
	***************************************************************************************
	*                                     Variable definition
	***************************************************************************************
	*/

	DL_SUBFRAME_STRUCT *p_dl_subframe_desc_tx; 
	FRM_DATA_DL_STRUCT *p_dl_data;
	FILE *fp_test_data,*fp_fch_data,*fp_dlmap_data,*fp_source_data,*fp_rand_data,*fp_encode_data,
				*fp_repet_data,*fp_modulation_data,*fp_logic_frame,*fp_physc_frame,
				*fp_physc_rand_frame,*fp_ifft_data,*fp_ifft_exponent,*fp_addcp_data;	

	UINT16 frame_len_symbol;
	/* Source data generate variable*/
	UINT16 dlmap_length_pdu;
	UINT32 source_data_len;
	UINT16 i,j,k,l,m,n;
	
	/* Encode and Modulation block variable*/
	UINT16 blocksize_fch;				// Block size of FCH
	UINT16 fec_code_type_fch;			// FEC Code type of FCH
	UINT16 modulation_type_fch;			// Modulation type of FCH

	UINT32 data_source_len_frame;		// Source data length of Frame

	UINT16 fec_code_type_bst;			// FEC Code type of current burst
	UINT16 repet_facotor_bst;			// Repetition coding factor
	UINT16 slot_len_coded_bst;			// Slot coded data length of current burst 
	
	UINT16 block_len_uncoded;			// Block length of uncoded
	UINT16 block_len_coded;				// Block length of coded
	UINT16 block_index_modulation;		// Block modulation data index

	UINT8 *p_source_data_block;
	UINT8 *p_data_prerepet_block;
	UINT8 *p_data_repet_slot;
	UINT8 *p_cc_data;
	COMPLEX16 *p_data_map_slot; 
	COMPLEX16 *p_log_frame;

	/* Frame generate variable */
	UINT16 *p_datasc_subchn_even,*p_datasc_subchn_odd;
	UINT16 *p_pilotsc_even,*p_pilotsc_odd;
	UINT16 *p_physc_even,*p_physc_odd;
	UINT16 zone_perm_type;
	UINT16 zone_use_all_sc;
	UINT16 zone_dl_permbase;
	UINT16 zone_PRBS_ID;
	UINT16 *p_fch_bitmap;
	UINT16 symbol_parity;
	UINT16 segment_id;
	UINT16 first_dl_flag;

	UINT16 sym_num_frame;
	INT16 tmp1;

	
	COMPLEX16 *p_tmp1,*p_tmp2;
	INT16 ifft_exponent_ref;
	static COMPLEX16 ifft_shift_data[FFT_SIZE];


	/*
	 ***************************************************************************************
	 *                             function definition
	 ***************************************************************************************
	 */

	/* create new file to store debug data */
	fp_test_data = fopen("dl_test_data.txt","w");
	fp_fch_data = fopen("dl_fch_data.txt","w");
	fp_dlmap_data = fopen("dl_dlmap_data.txt","w");
	fp_source_data = fopen("dl_source_data.txt","w");
	fp_rand_data = fopen("dl_rand_data.txt","w");
	fp_encode_data = fopen("dl_encode_data.txt","w");
	fp_repet_data = fopen("dl_repet_data.txt","w");
	fp_modulation_data = fopen("dl_modulation_data.txt","w");
	fp_logic_frame = fopen("dl_logic_frame.txt","w");
	fp_physc_frame = fopen("dl_physc_frame.txt","w");
	fp_physc_rand_frame = fopen("dl_physc_rand_frame.txt","w");
	fp_ifft_data = fopen("dl_ifft_data.txt","w");
	fp_ifft_exponent = fopen("dl_ifft_exponent.txt","w");
	fp_addcp_data = fopen("dl_addcp_data.txt","w");


    coef_std = (INT16)((0x01 << (10)) - 1);    // =(2^(coef_prec-2) -1), coef_prec bit
	data_width = 10;
	/********************* Generate Downlink Frame***************************************/

	dl_subframe_desc_tx.bit_map[0] = 1;
	dl_subframe_desc_tx.bit_map[1] = 1;
	dl_subframe_desc_tx.bit_map[2] = 1;
	dl_subframe_desc_tx.bit_map[3] = 1;
	dl_subframe_desc_tx.bit_map[4] = 0;
	dl_subframe_desc_tx.bit_map[5] = 0;


	dl_subframe_desc_tx.cp = 256;
	dl_subframe_desc_tx.frame_number = 0x0a0b0c;
	dl_subframe_desc_tx.frame_duration_code = 0x4;
	dl_subframe_desc_tx.dcd_cnt = 0xaa;
	dl_subframe_desc_tx.bs_id_h = 0x01020304;
	dl_subframe_desc_tx.bs_id_l = 0x0506;
	dl_subframe_desc_tx.symbol_num = 40;
	dl_subframe_desc_tx.id_cell = 0;
	dl_subframe_desc_tx.number_of_zone = 1;
	dl_subframe_desc_tx.preamble_index = 0;
	dl_subframe_desc_tx.subframe_type = 0;
	
	/* zone 0 PUSC */
	dl_subframe_desc_tx.zone[0].zone_type = 0;
	dl_subframe_desc_tx.zone[0].zone_index = 0;
	dl_subframe_desc_tx.zone[0].start_symbol_offset = 1;
	dl_subframe_desc_tx.zone[0].end_symbol_offset = 40;
	dl_subframe_desc_tx.zone[0].permutation_type = 0;
	dl_subframe_desc_tx.zone[0].use_all_sc_indicator = 0;
	dl_subframe_desc_tx.zone[0].dl_permbase = 0xf;
	dl_subframe_desc_tx.zone[0].prbs_id = 1;
	dl_subframe_desc_tx.zone[0].number_of_burst = 4;

	/* DL-MAP */
	dl_subframe_desc_tx.zone[0].burst[0].burst_type = 0;
	dl_subframe_desc_tx.zone[0].burst[0].burst_index = 0;
	dl_subframe_desc_tx.zone[0].burst[0].fec_code_type = 0;
	dl_subframe_desc_tx.zone[0].burst[0].subchannel_offset = 4;
	dl_subframe_desc_tx.zone[0].burst[0].boosting = 0;
	dl_subframe_desc_tx.zone[0].burst[0].repetition_coding = 0;

	/* zone 1 PUSC 
	dl_subframe_desc_tx.zone[1].zone_type = 0;
	dl_subframe_desc_tx.zone[1].zone_index = 1;
	dl_subframe_desc_tx.zone[1].start_symbol_offset = 3;
	dl_subframe_desc_tx.zone[1].end_symbol_offset = 39;
	dl_subframe_desc_tx.zone[1].permutation_type = 0;
	dl_subframe_desc_tx.zone[1].use_all_sc_indicator = 0;
	dl_subframe_desc_tx.zone[1].dl_permbase = 15;
	dl_subframe_desc_tx.zone[1].prbs_id = 2;
	dl_subframe_desc_tx.zone[1].number_of_burst = 3;
*/
	dl_subframe_desc_tx.zone[0].burst[1].burst_type = 1;
	dl_subframe_desc_tx.zone[0].burst[1].burst_index = 0;
	dl_subframe_desc_tx.zone[0].burst[1].fec_code_type = 0;
	dl_subframe_desc_tx.zone[0].burst[1].ofdma_symbol_offset = 3;
	dl_subframe_desc_tx.zone[0].burst[1].number_of_symbol = 18;
	dl_subframe_desc_tx.zone[0].burst[1].subchannel_offset = 0;
	dl_subframe_desc_tx.zone[0].burst[1].number_of_subchannel = 15;
	dl_subframe_desc_tx.zone[0].burst[1].boosting = 0;
	dl_subframe_desc_tx.zone[0].burst[1].repetition_coding = 0;
	dl_subframe_desc_tx.zone[0].burst[1].number_of_subburst = 0;
	dl_subframe_desc_tx.zone[0].burst[1].number_of_cid = 3;

	dl_subframe_desc_tx.zone[0].burst[1].cid_burst[0] = 0x003a;
	dl_subframe_desc_tx.zone[0].burst[1].cid_burst[1] = 0x003b;
	dl_subframe_desc_tx.zone[0].burst[1].cid_burst[2] = 0x003c;

	dl_subframe_desc_tx.zone[0].burst[2].burst_type = 1;
	dl_subframe_desc_tx.zone[0].burst[2].burst_index = 1;
	dl_subframe_desc_tx.zone[0].burst[2].fec_code_type = 2;
	dl_subframe_desc_tx.zone[0].burst[2].ofdma_symbol_offset = 3;
	dl_subframe_desc_tx.zone[0].burst[2].number_of_symbol = 20;
	dl_subframe_desc_tx.zone[0].burst[2].subchannel_offset = 15;
	dl_subframe_desc_tx.zone[0].burst[2].number_of_subchannel = 5;
	dl_subframe_desc_tx.zone[0].burst[2].boosting = 0;
	dl_subframe_desc_tx.zone[0].burst[2].repetition_coding = 0;
	dl_subframe_desc_tx.zone[0].burst[2].number_of_subburst = 0;
	dl_subframe_desc_tx.zone[0].burst[2].number_of_cid = 3;

	dl_subframe_desc_tx.zone[0].burst[2].cid_burst[0] = 0x003d;
	dl_subframe_desc_tx.zone[0].burst[2].cid_burst[1] = 0x003e;
	dl_subframe_desc_tx.zone[0].burst[2].cid_burst[2] = 0x003f;

	dl_subframe_desc_tx.zone[0].burst[3].burst_type = 1;
	dl_subframe_desc_tx.zone[0].burst[3].burst_index = 1;
	dl_subframe_desc_tx.zone[0].burst[3].fec_code_type = 5;
	dl_subframe_desc_tx.zone[0].burst[3].ofdma_symbol_offset = 29;
	dl_subframe_desc_tx.zone[0].burst[3].number_of_symbol = 6;
	dl_subframe_desc_tx.zone[0].burst[3].subchannel_offset = 0;
	dl_subframe_desc_tx.zone[0].burst[3].number_of_subchannel = 20;
	dl_subframe_desc_tx.zone[0].burst[3].boosting = 0;
	dl_subframe_desc_tx.zone[0].burst[3].repetition_coding = 0;
	dl_subframe_desc_tx.zone[0].burst[3].number_of_subburst = 0;
	dl_subframe_desc_tx.zone[0].burst[3].number_of_cid = 3;

	dl_subframe_desc_tx.zone[0].burst[3].cid_burst[0] = 0x003d;
	dl_subframe_desc_tx.zone[0].burst[3].cid_burst[1] = 0x003e;
	dl_subframe_desc_tx.zone[0].burst[3].cid_burst[2] = 0x003f;

	/* zone 2 FUSC 
	dl_subframe_desc_tx.zone[2].zone_type = 0;
	dl_subframe_desc_tx.zone[2].zone_index = 2;
	dl_subframe_desc_tx.zone[2].start_symbol_offset = 23;
	dl_subframe_desc_tx.zone[2].end_symbol_offset = 42;
	dl_subframe_desc_tx.zone[2].permutation_type = 1;
	dl_subframe_desc_tx.zone[2].use_all_sc_indicator = 0;
	dl_subframe_desc_tx.zone[2].dl_permbase = 1;
	dl_subframe_desc_tx.zone[2].prbs_id = 0;
	dl_subframe_desc_tx.zone[2].number_of_burst = 2;

	dl_subframe_desc_tx.zone[2].burst[0].burst_type = 1;
	dl_subframe_desc_tx.zone[2].burst[0].burst_index = 0;
	dl_subframe_desc_tx.zone[2].burst[0].fec_code_type = 6;
	dl_subframe_desc_tx.zone[2].burst[0].ofdma_symbol_offset = 23;
	dl_subframe_desc_tx.zone[2].burst[0].number_of_symbol = 20;
	dl_subframe_desc_tx.zone[2].burst[0].subchannel_offset = 0;
	dl_subframe_desc_tx.zone[2].burst[0].number_of_subchannel = 7;
	dl_subframe_desc_tx.zone[2].burst[0].boosting = 0;
	dl_subframe_desc_tx.zone[2].burst[0].repetition_coding = 0;
	dl_subframe_desc_tx.zone[2].burst[0].number_of_subburst = 0;
	dl_subframe_desc_tx.zone[2].burst[0].number_of_cid = 3;

	dl_subframe_desc_tx.zone[2].burst[0].cid_burst[0] = 0x004a;
	dl_subframe_desc_tx.zone[2].burst[0].cid_burst[1] = 0x004b;
	dl_subframe_desc_tx.zone[2].burst[0].cid_burst[2] = 0x004c;

	dl_subframe_desc_tx.zone[2].burst[1].burst_type = 1;
	dl_subframe_desc_tx.zone[2].burst[1].burst_index = 1;
	dl_subframe_desc_tx.zone[2].burst[1].fec_code_type = 1;
	dl_subframe_desc_tx.zone[2].burst[1].ofdma_symbol_offset = 23;
	dl_subframe_desc_tx.zone[2].burst[1].number_of_symbol = 16;
	dl_subframe_desc_tx.zone[2].burst[1].subchannel_offset = 7;
	dl_subframe_desc_tx.zone[2].burst[1].number_of_subchannel = 9;
	dl_subframe_desc_tx.zone[2].burst[1].boosting = 0;
	dl_subframe_desc_tx.zone[2].burst[1].repetition_coding = 0;
	dl_subframe_desc_tx.zone[2].burst[1].number_of_subburst = 0;
	dl_subframe_desc_tx.zone[2].burst[1].number_of_cid = 3;

	dl_subframe_desc_tx.zone[2].burst[1].cid_burst[0] = 0x004d;
	dl_subframe_desc_tx.zone[2].burst[1].cid_burst[1] = 0x004e;
	dl_subframe_desc_tx.zone[2].burst[1].cid_burst[2] = 0x004f;
*/

⌨️ 快捷键说明

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