📄 channel.cpp
字号:
#include <string.h>
#include <math.h>
#include "Global.h"
#include "Channel.h"
extern Random Rnd;
extern IO IO;
void ComplexChannel::Init( int nt, int pathNum, int nr, int frameLen )
{
Nt = nt;
PathNum = pathNum;
Nr = nr;
FrameLen = frameLen;
}
void ComplexChannel::AWGN( double sigma, Complex *x, int length )
{
int i;
if( strcmp( _SimulationMode, "TEST" ) != 0 )
for( i=0; i<length; i++ )
x[i] += Rnd.ComplexNoise(sigma );//
}
void ComplexChannel::ChannelSetup( char *type )
{
if( strcmp( type, "AWGN" ) == 0 ) AWGNChannelSetup( );
else if( strcmp( type, "SlowFade" ) == 0 ) SlowFadeChannelSetup( );
else if( strcmp( type, "FastFade" ) == 0 ) FastFadeChannelSetup( );
else IO.ErrorMessage( "Unknow channel condition" );
}
void ComplexChannel::AWGNChannelSetup( )
{
int nt, l, nr, len;
Complex h;
h.Re = 1 / (float) sqrt( PathNum );
h.Im = 0;
for( nt=0; nt<Nt; nt++ ) for( l=0; l<PathNum; l++ ) for( nr=0; nr<Nr; nr++ ) for( len=0; len<FrameLen; len++ )
_H[nt][l][nr][len] = h;
}
void ComplexChannel::SlowFadeChannelSetup( )
{
int nt, l, nr, len;
float p = (float) sqrt( PathNum );
for( nt=0; nt<Nt; nt++ ) for( l=0; l<PathNum; l++ ) for( nr=0; nr<Nr; nr++ )
{
_H[nt][l][nr][0] = Rnd.RayleighGenerator( p );
for( len=1; len<FrameLen; len++ )
_H[nt][l][nr][len] = _H[nt][l][nr][0];
}
}
void ComplexChannel::FastFadeChannelSetup( )
{
int nt, l, nr, len;
float p = (float) sqrt( PathNum );
for( nt=0; nt<Nt; nt++ ) for( l=0; l<PathNum; l++ ) for( nr=0; nr<Nr; nr++ ) for( len=0; len<FrameLen; len++ )
_H[nt][l][nr][len] = Rnd.RayleighGenerator( p );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -