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

📄 wib_dl_source_gen.c

📁 802.16e物理层下行解调算法实现。严格按照802.16e实现。
💻 C
📖 第 1 页 / 共 5 页
字号:
			ul_burst_type = dl_subframe_tx->zone[i].burst[j].burst_type;	
			
			/* HARQ ACK Channel burst */
			if(ul_burst_type == 0){

				/************************** Insert HARQ ACK Region Allocation IE  **************************/
				/* assign HARQ ACK Region Allocation IE Content */
				ul_harq_ackch.cid = ul_subframe_tx->zone[i].burst[j].cid_burst;                         // CID
				ul_harq_ackch.uiuc = 11;                                                                // UIUC = 11 for Extended-2 UIUC
				ul_harq_ackch.ext_uiuc = 0x08;                                                          // Extended-2 UIUC = 0x08
				ul_harq_ackch.len = 3                                                                   // Length in bytes 
				ul_harq_ackch.symbol_ofst = ul_subframe_tx->zone[i].burst[j].ofdma_symbol_offset;       // OFDMA Symbol offset
				ul_harq_ackch.subchn_ofst = ul_subframe_tx->zone[i].burst[j].subchannel_offset;         // Subchannel offset
				ul_harq_ackch.symbol_num = ul_subframe_tx->zone[i].burst[j].number_of_symbol;           // Number of OFDMA symbols
				ul_harq_ackch.subchn_num = ul_subframe_tx->zone[i].burst[j].number_of_subchannel;       // Number of subchannels


				/* get the address of HARQ ACK Region Allocation IE */
				p_ul_harq_ackch = (UINT8*)(&ul_harq_ackch);

				
				    /* if current last byte is aligned to byte */
					if(byte_align_flag == 0){
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 1);	 // CID[15:8]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch);	     // CID[7:0]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 2);	 // UIUC, Extended-2 UIUC
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 3);	 // Length in bytes
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 6);	 // OFDMA Symbol offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 5);	 // Subchannel offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 4);	 // Number of OFDMA symbols
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 3);	 // Number of subchannels
						dlul_map_len++;
					}
					/* if current last byte is not aligned to byte */
					else if(byte_align_flag == 1){
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 1);	 // CID[15:8]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch);	     // CID[7:0]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 2);	 // UIUC, Extended-2 UIUC
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 3);	 // Length in bytes
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 6);	 // OFDMA Symbol offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 5);	 // Subchannel offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 4);	 // Number of OFDMA symbols
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_harq_ackch + 3);	 // Number of subchannels

						/* All byte shift left 4bits */
						*(p_dlul_map + dlul_map_len - 7) = (UINT8)(*(p_dlul_map + dlul_map_len - 7) >> 4);
						
						for(l = 0; l < 8; l++){
							*(p_dlul_map + dlul_map_len - 7 + l) = (UINT8)(((*(p_dlul_map + dlul_map_len - 7 + l)) << 4) 
								| ((*(p_dlul_map + dlul_map_len - 6 + l)) >> 4));
						}
					}
			}
			/* Fast Feedback Channel burst */
			else if(ul_burst_type == 1){

				/************************** Insert FAST FEEDBACK Allocation IE  **************************/
				/* assign FAST FEEDBACK IE Content */
				ul_fast_feedback.cid = ul_subframe_tx->zone[i].burst[j].cid_burst;                      // CID
				ul_fast_feedback.uiuc = 0;                                                              // UIUC = 0 for	FAST-FEEDBACK Allocation IE
				ul_fast_feedback.byte_align = 0;                                                        // align to byte boundary
				ul_fast_feedback.symbol_ofst = ul_subframe_tx->zone[i].burst[j].ofdma_symbol_offset;    // OFDMA Symbol offset
				ul_fast_feedback.subchn_ofst = ul_subframe_tx->zone[i].burst[j].subchannel_offset;      // Subchannel offset
				ul_fast_feedback.symbol_num = ul_subframe_tx->zone[i].burst[j].number_of_symbol;        // Number of OFDMA symbols
				ul_fast_feedback.subchn_num = ul_subframe_tx->zone[i].burst[j].number_of_subchannel;    // Number of subchannels
				ul_fast_feedback.reserved = 0;


				/* get the address of FAST FEEDBACK IE */
				p_ul_fast_feedback = (UINT8*)(&ul_fast_feedback);

				    
				    /* if current last byte is aligned to byte */
					if(byte_align_flag == 0){
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 1);	 // CID[15:8]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback);	     // CID[7:0]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 2);	 // Byte align[3:0] ,UIUC
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 6);	 // OFDMA Symbol offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 5);	 // Subchannel offset[6:0], Number of OFDMA symbols[6]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 4);	 // Number of OFDMA symbols[5:0], Number of subchannels[6:5]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 3);	 // Number of subchannels[4:0], Reserved[2:0]


						/* All bytes after CID shift left 4bits */
						for(l = 0; l < 5; l++){
							*(p_dlul_map + dlul_map_len - 4 + l) = (UINT8)(((*(p_dlul_map + dlul_map_len - 4 + l)) << 4) 
								| ((*(p_dlul_map + dlul_map_len - 3 + l)) >> 4));
						}

						byte_align_flag = 1;		
					}
					/* if current last byte is not aligned to byte */
					else if(byte_align_flag == 1){
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 1);	 // CID[15:8]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback);	     // CID[7:0]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 2);	 // Byte align[3:0] ,UIUC
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 6);	 // OFDMA Symbol offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 5);	 // Subchannel offset[6:0], Number of OFDMA symbols[6]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 4);	 // Number of OFDMA symbols[5:0], Number of subchannels[6:5]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_fast_feedback + 3);	 // Number of subchannels[4:0], Reserved[2:0]

						
						/* All bytes shift left 4bits */
						*(p_dlul_map + dlul_map_len - 7) = (UINT8)(*(p_dlul_map + dlul_map_len - 7) >> 4);
						
						for(l = 0; l < 8; l++){
							*(p_dlul_map + dlul_map_len - 7 + l) = (UINT8)(((*(p_dlul_map + dlul_map_len - 7 + l)) << 4) 
								| ((*(p_dlul_map + dlul_map_len - 6 + l)) >> 4));
						}


						/* All bytes after CID shift left 4bits */
						*(p_dlul_map + dlul_map_len - 5) = (UINT8)(*(p_dlul_map + dlul_map_len - 5) >> 4);
						
						for(l = 0; l < 5; l++){
							*(p_dlul_map + dlul_map_len - 5 + l) = (UINT8)(((*(p_dlul_map + dlul_map_len - 5 + l)) << 4) 
								| ((*(p_dlul_map + dlul_map_len - 4 + l)) >> 4));
						}

						byte_align_flag = 0;	
					}
			}
			/* Initial Ranging/Handover Ranging burst */
			else if(ul_burst_type == 2){

				/****************************** Insert CDMA RANGING IE  ********************************/
				/* assign CDMA RANGING IE Content */
				ul_cdma_ranging.cid = ul_subframe_tx->zone[i].burst[j].cid_burst;                       // CID
				ul_cdma_ranging.byte_align = 0;                                                         // align to byte boundary
				ul_cdma_ranging.uiuc = 12;                                                              // UIUC = 12 for CDMA RANGING IE
				ul_cdma_ranging.symbol_ofst = ul_subframe_tx->zone[i].burst[j].ofdma_symbol_offset;     // OFDMA Symbol offset
				ul_cdma_ranging.subchn_ofst = ul_subframe_tx->zone[i].burst[j].subchannel_offset;       // Subchannel offset
				ul_cdma_ranging.symbol_num = ul_subframe_tx->zone[i].burst[j].number_of_symbol;         // Number of OFDMA symbols
				ul_cdma_ranging.subchn_num = ul_subframe_tx->zone[i].burst[j].number_of_subchannel;     // Number of subchannels
				ul_cdma_ranging.ran_method = 0b00;                                                      // Ranging method
				ul_cdma_ranging.dedic_ranging = 0;                                                      // Dedicated ranging indicator


				/* get the address of CDMA RANGING IE */
				p_ul_cdma_ranging = (UINT8*)(&ul_cdma_ranging);

				    
				    /* if current last byte is aligned to byte */
					if(byte_align_flag == 0){
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 1);	     // CID[15:8]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging);	         // CID[7:0]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 2);	     // Byte align[3:0] ,UIUC
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 6);	     // OFDMA Symbol offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 5);	     // Subchannel offset[6:0], Number of OFDMA symbols[6]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 4);	     // Number of OFDMA symbols[5:0], Number of subchannels[6:5]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 3);	     // Number of subchannels[4:0], Ranging method[1:0], Dedicated ranging indicator


						/* All bytes after CID shift left 4bits */
						for(l = 0; l < 5; l++){
							*(p_dlul_map + dlul_map_len - 4 + l) = (UINT8)(((*(p_dlul_map + dlul_map_len - 4 + l)) << 4) 
								| ((*(p_dlul_map + dlul_map_len - 3 + l)) >> 4));
						}

						byte_align_flag = 1;		
					}
					/* if current last byte is not aligned to byte */
					else if(byte_align_flag == 1){
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 1);	     // CID[15:8]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging);	         // CID[7:0]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 2);	     // Byte align[3:0] ,UIUC
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 6);	     // OFDMA Symbol offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 5);	     // Subchannel offset[6:0], Number of OFDMA symbols[6]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 4);	     // Number of OFDMA symbols[5:0], Number of subchannels[6:5]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 3);	     // Number of subchannels[4:0], Ranging method[1:0], Dedicated ranging indicator

						
						/* All bytes shift left 4bits */
						*(p_dlul_map + dlul_map_len - 7) = (UINT8)(*(p_dlul_map + dlul_map_len - 7) >> 4);
						
						for(l = 0; l < 8; l++){
							*(p_dlul_map + dlul_map_len - 7 + l) = (UINT8)(((*(p_dlul_map + dlul_map_len - 7 + l)) << 4) 
								| ((*(p_dlul_map + dlul_map_len - 6 + l)) >> 4));
						}


						/* All bytes after CID shift left 4bits */
						*(p_dlul_map + dlul_map_len - 5) = (UINT8)(*(p_dlul_map + dlul_map_len - 5) >> 4);
						
						for(l = 0; l < 5; l++){
							*(p_dlul_map + dlul_map_len - 5 + l) = (UINT8)(((*(p_dlul_map + dlul_map_len - 5 + l)) << 4) 
								| ((*(p_dlul_map + dlul_map_len - 4 + l)) >> 4));
						}

						byte_align_flag = 0;	
					}
			}
			/* Periodic Ranging/Bandwidth Request burst */
			else if(ul_burst_type == 3){

				/****************************** Insert CDMA RANGING IE  ********************************/
				/* assign CDMA RANGING IE Content */
				ul_cdma_ranging.cid = ul_subframe_tx->zone[i].burst[j].cid_burst;                       // CID
				ul_cdma_ranging.byte_align = 0;                                                         // align to byte boundary
				ul_cdma_ranging.uiuc = 12;                                                              // UIUC = 12 for CDMA RANGING IE
				ul_cdma_ranging.symbol_ofst = ul_subframe_tx->zone[i].burst[j].ofdma_symbol_offset;     // OFDMA Symbol offset
				ul_cdma_ranging.subchn_ofst = ul_subframe_tx->zone[i].burst[j].subchannel_offset;       // Subchannel offset
				ul_cdma_ranging.symbol_num = ul_subframe_tx->zone[i].burst[j].number_of_symbol;         // Number of OFDMA symbols
				ul_cdma_ranging.subchn_num = ul_subframe_tx->zone[i].burst[j].number_of_subchannel;     // Number of subchannels
				ul_cdma_ranging.ran_method = 0b10;                                                      // Ranging method
				ul_cdma_ranging.dedic_ranging = 0;                                                      // Dedicated ranging indicator


				/* get the address of CDMA RANGING IE */
				p_ul_cdma_ranging = (UINT8*)(&ul_cdma_ranging);

				    
				    /* if current last byte is aligned to byte */
					if(byte_align_flag == 0){
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 1);	     // CID[15:8]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging);	         // CID[7:0]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 2);	     // Byte align[3:0] ,UIUC
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 6);	     // OFDMA Symbol offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 5);	     // Subchannel offset[6:0], Number of OFDMA symbols[6]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 4);	     // Number of OFDMA symbols[5:0], Number of subchannels[6:5]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 3);	     // Number of subchannels[4:0], Ranging method[1:0], Dedicated ranging indicator


						/* All bytes after CID shift left 4bits */
						for(l = 0; l < 5; l++){
							*(p_dlul_map + dlul_map_len - 4 + l) = (UINT8)(((*(p_dlul_map + dlul_map_len - 4 + l)) << 4) 
								| ((*(p_dlul_map + dlul_map_len - 3 + l)) >> 4));
						}

						byte_align_flag = 1;		
					}
					/* if current last byte is not aligned to byte */
					else if(byte_align_flag == 1){
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 1);	     // CID[15:8]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging);	         // CID[7:0]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 2);	     // Byte align[3:0] ,UIUC
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 6);	     // OFDMA Symbol offset
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 5);	     // Subchannel offset[6:0], Number of OFDMA symbols[6]
						dlul_map_len++;
						*(p_dlul_map + dlul_map_len) = (UINT8)(*p_ul_cdma_ranging + 4);	     // Number of OFDMA symbols[5:0], Number of subchannels[6:5]
						dlul_map_len++;

⌨️ 快捷键说明

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