📄 qam2.c
字号:
#include <stdio.h>
#include <math.h>
#include "gauss.c"
#include "bernoulli.c"
#include "bit_decide.c"
#define M 50000
main()
{
int map(int,int);
int flag=0;
int bit_demod[4];
int i;
int p;
int real;
int image;
int error_bit=0;
int error_symbol=0;
int bit_original[4];
double mean=0;
double sigma;
double real_receive;
double imagel_receive;
double real_noise;
double image_noise;
double temp;
long int seed=13579;
FILE *fp_error_symbol,*fp_error_bit;
fp_error_symbol=fopen("error_symbol.dat","wb+");
fp_error_bit=fopen("error_bit.dat","wb+");
for(sigma=0;sigma<2;sigma=sigma+0.05)
{ for(p=0;p<M;p++)
{
for(i=0;i<4;i++)
bit_original[i]=bernoulli(0.5,&seed);
//mapping
real=map(bit_original[0],bit_original[1]);
image=map(bit_original[2],bit_original[3]);
//+noise
real_noise=gauss(mean,sigma,&seed);
image_noise=gauss(mean,sigma,&seed);
real_receive=real+real_noise;
imagel_receive=image+image_noise;
for(i=0;i<4;i++)
{
bit_demod[i]=detect(real_receive,imagel_receive,i+1);
if(bit_demod[i]!=bit_original[i])
{ error_bit++;flag=1;}
}
error_symbol=error_symbol+flag;
flag=0;
//***************************************
//for(i=0;i<4;i++)
// printf("%d",bit_original[i]);
//
//printf("\t");
//for(i=0;i<4;i++)
//printf("%d",bit_demod[i]);
//
//
//printf("\n");
//***************************************
}
printf("%f %f\n",error_bit/(M*4.0),(double)error_symbol/M);
temp=(double)error_symbol/M;
fwrite(&temp,sizeof(double),1,fp_error_symbol);
temp=error_bit/(M*4.0);
fwrite(&temp,sizeof(double),1,fp_error_bit);
error_bit=0;
error_symbol=0;
}
}
int map(int bit_original,int b)
{
int result_mapped;
if(bit_original==0&&b==0)
result_mapped=-3;
else if(bit_original==0&&b==1)
result_mapped=-1;
else if(bit_original==1&&b==1)
result_mapped=1;
else if(bit_original==1&&b==0)
result_mapped=3;
return result_mapped;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -