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

📄 ccoder.c

📁 TETRA中的一种编码格式 本实现用于语音编码的实现
💻 C
字号:
/************************************************************************
*
*	FILENAME		:	ccoder.c
*
*	DESCRIPTION		:	Main program for speech channel encoding
*
************************************************************************
*
*	USAGE			:	ccoder serial_file cenc_file
*					(Executable_File Input1 Output1)
*
*	INPUT FILE(S)		:	
*
*		INPUT1	:	- Description : serial stream input file 
*					- Format : binary file 16 bit-samples
*					  each 16 bit-sample represents one encoded bit
*					  138 (= 1 + 137) bits per frame
*
*	OUTPUT FILE(S)	:	
*
*		OUTPUT1	:	- Description : channel encoded serial stream 
*					- Format : binary file 16 bit-samples
*					  each 16 bit-sample represents one encoded bit
*
*	COMMENTS		:	- Values of channel encoded samples are 
*					either -127 or +127
*					- 2 input frames are encoded together to produce
*					1 single output frame of 432 samples written in
*					the ouput1 file according to a specific format
*					compatible with the error insertion device
*
************************************************************************
*
*	INCLUDED FILES	:	channel.h
*					stdlib.h
*
************************************************************************/

/* LIBRARIES USED */
#include <stdlib.h>
#include "channel.h"

#ifndef TRUE
# define TRUE   (1==1)
# define FALSE  (1==0)
#endif

Word16  FS_Flag = 0;	/* Frame Stealing Flag :
					 0 = no stealing in the time-slot, 
					!0 = stealing of the first speech frame
							in the time-slot
					This flag is set/reset by external world */


int    main( int argc, char *argv[] )

{
	FILE    *fin, *fout;
	Word32  Loop_counter = 0;
	short   first_pass = TRUE;
	Word16  i;
	Word16  Vocod_array[274];       /* Input Buffer : 2 vocoder frames */
	Word16  Coded_array[432];
	Word16  Interleaved_coded_array[432]; /* Output Buffer */

	/* Parse arguments */
	/*if ( argc != 3 )
	{
		puts( "usage : ccoder infile outfile" );
		puts( "Channel coding time-slot per time-slot" );
		puts( "format for input file : 138 (BFI + 137) bits frame" );
		puts( "format for output :  $6B21...114 bits...$6B22...114..." );
		puts( "        ...$6B26...114...$6B21");
		exit( 1 );
	}*/
	if ( (fin = fopen( "/tmp/out", "rb" )) == NULL )
	{
		puts("chanlcod: can't open input file" );
		exit( 1 );
	}
	if ( (fout = fopen( "/tmp/ccout", "wb" )) == NULL )
	{
		puts("chanlcod: can't open output file" );
		exit( 1 );
	}

	while( 1 )
	{
			      /* Skip over bfi bit */
		if( fread( Vocod_array, sizeof(short), 1, fin ) != 1 ) {
			puts( "chanlcod: reached end of file" );
			break;
		}
			     /* 1st speech frame */
		if( fread( Vocod_array, sizeof(short), 137, fin ) != 137 ) {
			puts( "chanlcod: reached end of file" );
			break;
		}
			      /* Skip over bfi bit */
		if( fread( Vocod_array+137, sizeof(short), 1, fin ) != 1 ) {
			puts( "chanlcod: reached end of file" );
			break;
		}
			     /* 2nd speech frame */
		if( fread( Vocod_array+137, sizeof(short), 137, fin ) != 137 ) {
			puts( "chanlcod: reached end of file" );
			break;
		}

/* Channel Encoding */
		Channel_Encoding(first_pass,FS_Flag,Vocod_array,Coded_array);
		first_pass = FALSE;

/* Interleaving */


	if (!FS_Flag)
		Interleaving_Speech(Coded_array,Interleaved_coded_array);
	else
		{
		Interleaving_Signalling(	Coded_array + 216,Interleaved_coded_array + 216);
		for (i = 0; i < 216; i++)
		  Interleaved_coded_array[i] = Coded_array[i];      
		}
	
/* Increment Loop counter */
		Loop_counter++;

/* write Output_array (1 TETRA frame = 2 speech frames) to output file */
		if (Write_Tetra_File (fout, Interleaved_coded_array) == -1)
		  {
		  puts ("chanlcod: cannot write to output file");
		  break;
		  }
	}
	printf("%ld Speech Frames processed\n",2*Loop_counter);
	//printf("ie %ld Channel Frames\n",Loop_counter);
	
	/* closing files */
	fclose( fin );
	fclose( fout );

return (EXIT_SUCCESS);
}

⌨️ 快捷键说明

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