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

📄 demod.c

📁 完整的OFDM系统,含Matlab仿真代码和DSP源代码下载.平台Tms320C6000.含项目说明文档.绝对高质量的源代码.
💻 C
字号:
//new_demod.c
//
// Project Red 2002: High Performance OFDM Modem 
// Against Channel Imperfections
// Auther: Linus Falk

#include "demod_tab.h"

void demod(float indata_p[2], char nr_bits, unsigned char *outdata_p){
  int i=0;

  *outdata_p = 0;
  switch(nr_bits){
  case 1: //psk
	 if(indata_p[0] > 0){
		outdata_p[0] = 1;
	 }else{
		outdata_p[0] = 0;
	 }
	 break;
  case 2://4QAM
	 for(i=0; i<2; i++){
		if(indata_p[i] < 0){
		*outdata_p += (QAM_4_DEM_TABLE[0] << 1*i);
		}else{
		*outdata_p += (QAM_4_DEM_TABLE[1] << 1*i);
		}
	 }
	 break;
  case 4://16QAM
	 for(i=0; i<2; i++){
		if(indata_p[i] < QAM_16_LIMITS[0]){
			*outdata_p += (QAM_16_DEM_TABLE[0] << 2*i);
		}else if(indata_p[i] < QAM_16_LIMITS[1]){
			*outdata_p += (QAM_16_DEM_TABLE[1] << 2*i);
		}else if(indata_p[i] < QAM_16_LIMITS[2]){
			*outdata_p += (QAM_16_DEM_TABLE[2] << 2*i);
		}else{
			*outdata_p += (QAM_16_DEM_TABLE[3] << 2*i);
		}
	 }
	 break;
  case 6://64QAM
	 for(i=0; i<2; i++){
		if(indata_p[i] < QAM_64_LIMITS[0]){
			*outdata_p += (QAM_64_DEM_TABLE[0] << 3*i);
		}else if(indata_p[i] < QAM_64_LIMITS[1]){
			*outdata_p += (QAM_64_DEM_TABLE[1] << 3*i);
		}else if(indata_p[i] < QAM_64_LIMITS[2]){
			*outdata_p += (QAM_64_DEM_TABLE[2] << 3*i);
		}else if(indata_p[i] < QAM_64_LIMITS[3]){
			*outdata_p += (QAM_64_DEM_TABLE[3] << 3*i);
		}else if(indata_p[i] < QAM_64_LIMITS[4]){
			*outdata_p += (QAM_64_DEM_TABLE[4] << 3*i);
		}else if(indata_p[i] < QAM_64_LIMITS[5]){
			*outdata_p += (QAM_64_DEM_TABLE[5] << 3*i);
		}else if(indata_p[i] < QAM_64_LIMITS[6]){
			*outdata_p += (QAM_64_DEM_TABLE[6] << 3*i);
		}else{
			*outdata_p += (QAM_64_DEM_TABLE[7] << 3*i);
		}
	 }
	 break;
  /*case 8://4QAM, to bad
	for(i=0; i<2; i++){
		if(indata_p[i] < QAM_256_LIMITS[0]){
			*outdata_p += (QAM_256_DEM_TABLE[0] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[1]){
			*outdata_p += (QAM_256_DEM_TABLE[1] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[2]){
			*outdata_p += (QAM_256_DEM_TABLE[2] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[3]){
			*outdata_p += (QAM_256_DEM_TABLE[3] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[4]){
			*outdata_p += (QAM_256_DEM_TABLE[4] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[5]){
			*outdata_p += (QAM_256_DEM_TABLE[5] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[6]){
			*outdata_p += (QAM_256_DEM_TABLE[6] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[7]){
			*outdata_p += (QAM_256_DEM_TABLE[7] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[8]){
			*outdata_p += (QAM_256_DEM_TABLE[8] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[9]){
			*outdata_p += (QAM_256_DEM_TABLE[9] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[10]){
			*outdata_p += (QAM_256_DEM_TABLE[10] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[11]){
			*outdata_p += (QAM_256_DEM_TABLE[11] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[12]){
			*outdata_p += (QAM_256_DEM_TABLE[12] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[13]){
			*outdata_p += (QAM_256_DEM_TABLE[13] << 4*i);
		}else if(indata_p[i] < QAM_256_LIMITS[14]){
			*outdata_p += (QAM_256_DEM_TABLE[14] << 4*i);
		}else{
			*outdata_p += (QAM_256_DEM_TABLE[15] << 4*i);
		}
	 }
	 break;*/
  default:
	 break;
  }
}


⌨️ 快捷键说明

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