sim.c

来自「该程序是用C语言编写的」· C语言 代码 · 共 87 行

C
87
字号
#include <stdio.h> #include <stdlib.h> #include <math.h>#include "input.h"extern int  DataLength;int RawData[DATALENGTH];int Guess[DATALENGTH];float CodedSgnl[DATALENGTH+IVALUE*KVALUE];float CodingRate;int Counte( );int random01( );void Presim( );void CoDec( double snr );void CoDec( double snr );void DataGen( int *r );double Sim( double EbOverNo, int num );extern int InterleaverReset;extern void Channel( float *sb, double sigma );extern void Prepare( );void Presim( ){	srand48(0);	Prepare();}double Sim( double EbOverNo, int num ){	int i = 0;	double en = 0.0, EsOverSigma2 = pow( 10, EbOverNo / 10 ) * CodingRate;		while( en<num )	{		i++;		if(  ( InterleaverReset > 0 ) && ( i%InterleaverReset == 0 ) )		{			fprintf( stderr, "\n\nInterleaver Reset\n\n" );			SetShafflerule( );		}		DataGen( RawData );		CoDec( EsOverSigma2 );		en += Counte( );		fprintf( stderr, "total error number = %.0f \n", en ); 		fprintf( stderr, "for snr=%lfdB BER=%e\n",  EbOverNo, en / (double)( i * DataLength ) );	} 	fprintf( stderr, "for snr = %le \n", EbOverNo ); 	fprintf( stderr, "%.0f", en ); 	fprintf( stderr, "erorrs found in %d data\n", i * DataLength ); 	return en / (double)( i * DataLength );} void CoDec( double snr ){		double sigma = sqrt( 0.5 / snr );		Coder( &RawData[0], &CodedSgnl );	Channel( &CodedSgnl[0], sigma );	Decoder( &Guess[0], &CodedSgnl[0], sigma );}void DataGen( int *r ){	int i;	for( i=0; i<DataLength; i++ ) r[i] = random01( );}int Counte( ){	int  i, e=0; 	for( i=0; i<DataLength; i++ )		if( RawData[i] != Guess[i] ) e++;	return e;}int random01( ){	return ( lrand48( ) >> 16 ) % 2;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?