📄 demod.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 + -