?? awgn.cpp
字號:
/*
**********************************************************************************
產生一個AWGN信道
********************************************************************************
* INCLUDE FILES
********************************************************************************
*/
#include <stdio.h>
#include <math.h>
#include "channel.h"
/*
*******************************************************************************
* constants and define declarations
*******************************************************************************
*/
#define PI 3.14159
/*
********************************************************************************
生成一個(0,1)內均勻分布的數
********************************************************************************
*/
double random_u(struct seed *rseed)
{
double result;
rseed->x = (rseed->x * 249) % 61967;
rseed->y = (rseed->y * 251) % 63443;
rseed->z = (rseed->z * 252) % 63599;
result = (double)(rseed->x/61967.0 + rseed->y/63443.0 + rseed->z/63599.0)
- (int)(rseed->x/61967.0 + rseed->y/63443.0 + rseed->z/63599.0);
return result;
}
/*
********************************************************************************
生成一個高斯隨機變量,均值、方差由輸入決定
********************************************************************************
*/
double gauss_g(struct awgn *gauss)
{
double u1,u2;
double x;
double sigma;
double ave;
struct seed *pseed;
pseed = &(gauss->gauss_seed);
sigma = gauss->sigma;
ave = gauss->ave;
u1=random_u(pseed);
u2=random_u(pseed);
x=sqrt((double)(-2)*log(1.0-u1))*(double)cos(2.0*PI*u2);
x=sigma*x + ave;
return x;
}
/*
********************************************************************************
高斯信道初始化
********************************************************************************
*/
void initial_gauss(struct awgn *point,struct seed *pseed, double ave, double sigma)
{
point->gauss_seed = *pseed;
point->sigma = sigma;
point->ave = ave;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -