📄 wib_dl_phy.c
字号:
/*
* 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 + -