#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "fft_rand.h"
struct SET
{
int no_run, no_snr, seed;
int source, r_b, error;
double snr_f, t_signal, r_signal;
};
void para_set(SET *p_set);
void gen_s(SET *p_set);
void modulation(SET *p_set);
void result_print(SET *p_set);
void error_check(SET *p_set);
void demod(SET *p_set);
void AWGN(SET *p_set);
int main()
{
SET set;
para_set(&set);
int i,j;
for(i=0; i<set.no_snr; i++)
{
set.error = 0;
set.snr_f = pow(10.0,0.05*i);
for(j=0; j<set.no_run; j++)
{
gen_s(&set);
modulation(&set);
AWGN(&set);
demod(&set);
error_check(&set);
}
result_print(&set);
}
return 0;
}
void result_print(SET *p_set)
{
FILE *fp;
fp = fopen("result.txt","a");
fprintf(fp,"%lf \n",(double)p_set->error/(double)p_set->no_run);
fclose(fp);
}
void error_check(SET *p_set)
{
p_set->error += (p_set->source + p_set->r_b)%2;
}
void demod(SET *p_set)
{
if(p_set->r_signal > 0)
p_set->r_b = 0;
else
p_set->r_b = 1;
}
void AWGN(SET *p_set)
{
p_set->r_signal = p_set->t_signal + sqrt(0.5)*randn(&(p_set->seed));
}
void modulation(SET *p_set)
{
p_set->t_signal = (1-2*(p_set->source))*(p_set->snr_f);
}
void gen_s(SET *p_set)
{
double num;
num = randu(&(p_set->seed));
if(num>0.5)
p_set->source = 0;
else
p_set->source = 1;
}
void para_set(SET *p_set)
{
p_set->no_run = 1000000;
p_set->no_snr = 10;
p_set->seed = -13;
}