📄 awgnchannel.c
字号:
/*
*******************************************************
ANSI C source code
filename:
AWGNchannel.c
abstract:
to support the AWGNchannel
author:
Shen Ke
version:
V 1.0
refernce:
随机过程--陈明
********************************************************
*/
#include "QAMSoftDem.h"
#include <math.h>
#include "stdio.h"
#define PI 3.14159
double random_u(struct AWGN *gauss)
{
double temp;
gauss->ix = (gauss->ix*249) % 61967;
gauss->iy = (gauss->iy*251) % 63443;
gauss->iz = (gauss->iz*252) % 63599;
temp= ( (double)gauss->ix/(double)61967 + (double)gauss->iy/(double)63443+ (double)gauss->iz/(double)63599 )
-(int)( (double)gauss->ix/(double)61967+ (double)gauss->iy/(double)63443+(double)gauss->iz/(double)63599 );
return(temp);
}
double gauss_g(struct AWGN *gauss)
{
double u1,u2;
double x;
double var;
var = gauss->sigma;
u1=random_u(gauss);
u2=random_u(gauss);
x=(double)sqrt((double)(-2)*log((double)1-u1))*(double)cos((double)2*(double)PI*u2);
x=(double)var*x; /*** 常数系数指标准差 ***/
return(x);
}
void awgn_channel (double *in_real ,double *in_img, double *out_real,double*out_img, struct AWGN *gauss , int len)
{
int i;
double add;
int COLUMN;
FILE *fpc;
fpc=fopen("gass.txt","w");
COLUMN = len;
for (i=0;i<COLUMN;i++)
{
add = gauss_g(gauss);
out_real[i] = in_real[i] + add;
fprintf(fpc,"%f\n",add);
add = gauss_g(gauss);
out_img[i] = in_img[i] + add;
fprintf(fpc,"%f\n",add);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -