www.pudn.com > 16QAMsoftdemodulation.rar > 16_QAM.cpp
#include#include #include #include #define data_len 10000 //仿真所用数据总的比特数目 #define code_len data_len/4 //仿真所用数据总的码元数目 #define pi 3.1415926 //用结构体定义复数 struct complex { double Real; //实部 double Imag; //虚部 }; //A、B是复数,此函数用来计算|A-B|^2的值 double abs(struct complex a,struct complex b) { return((a.Real-b.Real)*(a.Real-b.Real)+(a.Imag-b.Imag)*(a.Imag-b.Imag)); }; void main() { float SNR=-18; //输入信噪比(dB) double coef_AWGN=sqrt(5/pow(10,SNR/10)); //乘AWGN噪声(0,1)用于产生所需要的噪声功率 int data[data_len]; //存放仿真所用0 1 数据 int receive_data[data_len]; //存放经判决后的数据 srand(time(0)); //产生随机数的种子 //产生随机数存放在data数组里面 for(int i=0;i 0) R[i]=Y[i]/2147483563; else R[i]=2147483562.0/2147483563.0; //printf("\n%f",R[i]); } //i=2*code_len-1 Y[i]=fmod((noise_I[i]-noise_Q[i]),2147483562); while(Y[i]<0) { Y[i]=Y[i]+2147483562; } if(Y[i]>0) R[i]=Y[i]/2147483563; else R[i]=2147483562.0/2147483563.0; for(i=0;i 0)receive_data[4*i]=0; else receive_data[4*i]=1; if(LLR_BQ1[i]>0)receive_data[4*i+1]=0; else receive_data[4*i+1]=1; if(LLR_BI2[i]>0)receive_data[4*i+2]=0; else receive_data[4*i+2]=1; if(LLR_BQ2[i]>0)receive_data[4*i+3]=0; else receive_data[4*i+3]=1; } //将发送数据和接收数据同时输出 for(i=0;i