awgnchannel.c
来自「该文件包内包含了一个16QAM调制解调程序」· C语言 代码 · 共 68 行
C
68 行
/*
*******************************************************
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 + =
减小字号Ctrl + -
显示快捷键?