📄 test_gsmchannel.c
字号:
#include "test_GSMChannel.h"
int DebugGSMChannel(double sigFrame[2][BURSTLEN*OVERSAMPLE],
double sigRecv[2][BURSTLEN*OVERSAMPLE],double SNR,long seed[1])
{
int i,j;
double noise[2];
// long s[1];
double sigma;
//Ideal Channel
for (i=0;i<BURSTLEN;i++)
{
for (j=0;j<OVERSAMPLE;j++)
{
sigRecv[0][i*OVERSAMPLE+j]=sigFrame[0][i*OVERSAMPLE+j];
sigRecv[1][i*OVERSAMPLE+j]=sigFrame[1][i*OVERSAMPLE+j];
//sigRecv[0][i*4+j]=tempArray[0][i*4+j];
//sigRecv[1][i*4+j]=tempArray[1][i*4+j];
}
}
//ISI
/*for (i=0;i<BURSTLEN;i++)
{
if (i>0)
{
for (j=0;j<4;j++)
{
sigRecv[0][i*4+j]=sigFrame[0][i*4+j]+0.5*sigFrame[0][(i-1)*4+j+3];
sigRecv[1][i*4+j]=sigFrame[1][i*4+j]+0.5*sigFrame[1][(i-1)*4+j+3];
}
}
else
{
for (j=0;j<4;j++)
{
//sigRecv[0][i*4+j]=sigFrame[0][i*4+j];
//sigRecv[1][i*4+j]=sigFrame[1][i*4+j];
sigRecv[0][i*4+j]=0;
sigRecv[1][i*4+j]=0;
}
}
}*/
/*for (i=0;i<BURSTLEN;i++)
{
if (i>4)
{
for (j=0;j<4;j++)
{
sigRecv[0][i*4+j]=sigFrame[0][i*4+j]+0.5*sigFrame[0][(i-1)*4+j]
+0.0*sigFrame[0][(i-2)*4+j]+0.0*sigFrame[0][(i-3)*4+j]
+0.0*sigFrame[0][(i-4)*4+j]+0.0*sigFrame[0][(i-5)*4+j];
sigRecv[1][i*4+j]=sigFrame[1][i*4+j]+0.5*sigFrame[1][(i-1)*4+j]
+0.0*sigFrame[1][(i-2)*4+j]+0.0*sigFrame[1][(i-3)*4+j]
+0.0*sigFrame[1][(i-4)*4+j]+0.0*sigFrame[1][(i-5)*4+j];
}
}
else
{
for (j=0;j<4;j++)
{
sigRecv[0][i*4+j]=sigFrame[0][i*4+j];
sigRecv[1][i*4+j]=sigFrame[1][i*4+j];
}
}
}*/
//Add AWGN;
sigma = pow(10.0,(SNR/10));
// sigma = pow(10.0,(SNR[0]/10));
for (i=0;i<BURSTLEN;i++)
{
for (j=0;j<OVERSAMPLE;j++)
{
DebugCgauss(noise,seed);
//For Debug
//printf("%f %f ",noise[0],noise[1]);
sigRecv[0][i*OVERSAMPLE+j]=sigRecv[0][i*OVERSAMPLE+j]+noise[0]/(sqrt(2*sigma));
sigRecv[1][i*OVERSAMPLE+j]=sigRecv[1][i*OVERSAMPLE+j]+noise[1]/(sqrt(2*sigma));
}
//printf("\n");
}
/* mean = 0;
sigma = 1*exp(-SNR/10);
//s[0] = (unsigned)time( NULL );
s[0] = 12;
for (i=0;i<BURSTLEN;i++)
{
for (j=0;j<OVERSAMPLE;j++)
{
noise = gauss(mean,sigma,s);
//For Debug
//printf("%f ",noise);
noise = noise/sqrt(2);
sigRecv[0][i*OVERSAMPLE+j]=sigRecv[0][i*OVERSAMPLE+j]+noise;
sigRecv[1][i*OVERSAMPLE+j]=sigRecv[1][i*OVERSAMPLE+j]+noise;
}
//printf("\n");
}
*/
return 0;
}
int DebugCgauss(double noise[2],long seed[1])
{
double y,r1,v1,v2;
r1 = 0;
y = 0;
do {
v1 = (2.0 * uniform(seed)) - 1.0;
v2 = (2.0 * uniform(seed)) - 1.0;
r1 = (v1*v1);
r1 = r1+(v2*v2);
} while (r1 >= 1.0);
y = log(r1);
// y = log(r1);
y = -2.0*y/r1;
y = sqrt(y);
noise[0] = v2*y;
noise[1] = v1*y;
return 0;
}
double uniform(long seed[1])
//--------------------------------------------------------------------
// Returns uniform deviate between 0.0 and 1.0.
// Used to generate PN data
//---------------------------------------------------------------------
{
double r1;
long hi;
hi = seed[0]/LQ;
seed[0] = LA*(seed[0]-hi*LQ) - LR*hi;
if ((seed[0]) < 0) (seed[0]) += LM;
r1 = LAM*(seed[0]);
return(r1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -