⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 channel.cpp

📁 这个程序主要是基于空时编码的编解码实现过程。
💻 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 + -