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

📄 sim.c

📁 zigzag纠错码是一种非常简单但却具有非常优秀性能的码。非常适合用于中码率或者高码率编码的系统。此为一位教授提供的源码。
💻 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 + -