📄 sim.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -