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

📄 cvsd.c

📁 CVSD语音编码源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
			{
				t = sortdata[j];
				sortdata[j] = sortdata[j+1];
				sortdata[j+1] = t;
			}
		}
	}
	med = sortdata[21];
    return med;
	
}*/
/***********************************************************************************/
char CVSDCoder(short InData)			/*编码子程序*/
{
	double Diff = 0;
//	int j = 0;
	char OutData;
/* 	short DataCode;
	double MAX;
	int q;
	MAX = 0;
	filterX[0] = InData;
	
	for(q = 0;q<ORD;q++)
	{
		MAX = MAX + CoefB[q]*filterX[q];
	}
	for(q=1;q<ORD;q++)
	{
		MAX = MAX - CoefA[q]*filterY[q-1];
	}
	
	DataCode = (short)MAX;
	
	for(q=ORD-1;q>0;q--)
	{
		filterX[q] = filterX[q-1];
	}
	for(q=ORD-2;q>0;q--)
	{
		filterY[q] = filterY[q-1];
	}
	
	filterY[0] = (short)MAX;*/
	
	Diff = InData - ValPreCVSD;

	if((Diff >0)||(Diff == 0))
	{
		ThreeJudgeCVSD[j] = 1;
		OutData = 1;
	}
	else
	{
		ThreeJudgeCVSD[j] = 0;
		OutData = 0;
	}
	/*判断三连码*/
/*	if(((ThreeJudgeCVSD[0] == 1)&(ThreeJudgeCVSD[1] == 1)&(ThreeJudgeCVSD[2] == 1))|
	   ((ThreeJudgeCVSD[0] == 0)&(ThreeJudgeCVSD[1] == 0)&(ThreeJudgeCVSD[2] == 0)))*/
    /*判断四连码*/
	if(((ThreeJudgeCVSD[0] == 1)&(ThreeJudgeCVSD[1] == 1)&(ThreeJudgeCVSD[2] == 1)&(ThreeJudgeCVSD[3] == 1))|
	   ((ThreeJudgeCVSD[0] == 0)&(ThreeJudgeCVSD[1] == 0)&(ThreeJudgeCVSD[2] == 0)&(ThreeJudgeCVSD[3] == 0)))
	/*判断五连码*/	   
/*    if(((ThreeJudgeCVSD[0] == 1)&(ThreeJudgeCVSD[1] == 1)&(ThreeJudgeCVSD[2] == 1)&(ThreeJudgeCVSD[3] == 1)&(ThreeJudgeCVSD[4] == 1))|
	   ((ThreeJudgeCVSD[0] == 0)&(ThreeJudgeCVSD[1] == 0)&(ThreeJudgeCVSD[2] == 0)&(ThreeJudgeCVSD[3] == 0)&(ThreeJudgeCVSD[4] == 0)))*/
//	if((ThreeJudgeCVSD[0] == 1)&(ThreeJudgeCVSD[1] == 0)&(ThreeJudgeCVSD[2] == 1)&(ThreeJudgeCVSD[3] == 0))		   

	   DeltaCVSD = DeltaCVSD + Delta0CVSD;

	else 
	DeltaCVSD = Beta*DeltaCVSD;
	
	if(DeltaCVSD > DeltaMax)    DeltaCVSD = DeltaMax;
	if(DeltaCVSD < DeltaMin)    DeltaCVSD = DeltaMin;

	if(ThreeJudgeCVSD[j] == 1)
	{
		ValPreCVSD = ValPreCVSD + DeltaCVSD;
	}
	if(ThreeJudgeCVSD[j] == 0)
	{
		ValPreCVSD = ValPreCVSD - DeltaCVSD;
	}
	j++;
	j%=4;
	return OutData;
}


short CVSDDecoder(char InData)			/*解码子程序*/
{
	double Max;
//	int m = 0;
	int p = 0;
	short OutData;
	short DataDecode;

	if(InData == 0)			ThreeJudgeCVSDDE[m] = 0;
	if(InData == 1)			ThreeJudgeCVSDDE[m] = 1;
	/*判断三连码*/
/*	if(((ThreeJudgeCVSDDE[0] == 1)&(ThreeJudgeCVSDDE[1] == 1)&(ThreeJudgeCVSDDE[2] == 1))|
	   ((ThreeJudgeCVSDDE[0] == 0)&(ThreeJudgeCVSDDE[1] == 0)&(ThreeJudgeCVSDDE[2] == 0)))*/
	
	/*判断四连码*/
	if(((ThreeJudgeCVSDDE[0] == 1)&(ThreeJudgeCVSDDE[1] == 1)&(ThreeJudgeCVSDDE[2] == 1)&(ThreeJudgeCVSDDE[3] == 1))|
	   ((ThreeJudgeCVSDDE[0] == 0)&(ThreeJudgeCVSDDE[1] == 0)&(ThreeJudgeCVSDDE[2] == 0)&(ThreeJudgeCVSDDE[3] == 0)))
    /*判断五连码*/	   
/*    if(((ThreeJudgeCVSDDE[0] == 1)&(ThreeJudgeCVSDDE[1] == 1)&(ThreeJudgeCVSDDE[2] == 1)&(ThreeJudgeCVSDDE[3] == 1)&(ThreeJudgeCVSD[4] == 1))|
	   ((ThreeJudgeCVSDDE[0] == 0)&(ThreeJudgeCVSDDE[1] == 0)&(ThreeJudgeCVSDDE[2] == 0)&(ThreeJudgeCVSDDE[3] == 0)&(ThreeJudgeCVSD[4] == 0)))*/
//	if((ThreeJudgeCVSD[0] == 1)&(ThreeJudgeCVSD[1] == 0)&(ThreeJudgeCVSD[2] == 1)&(ThreeJudgeCVSD[3] == 0))		   
		
	   
	   DeltaCVSDDE = DeltaCVSDDE + Delta0CVSDDE;

	else 
		DeltaCVSDDE = Beta*DeltaCVSDDE;		

	if(DeltaCVSDDE > DeltaMax)		DeltaCVSDDE = DeltaMax;
	if(DeltaCVSDDE < DeltaMin)		DeltaCVSDDE = DeltaMin;
	if(ThreeJudgeCVSDDE[m] == 1)	
		ValPreCVSDDE +=DeltaCVSDDE;
//		ValPreCVSDDE = ValPreCVSDDE*H +DeltaCVSDDE;
	if(ThreeJudgeCVSDDE[m] == 0)	
		ValPreCVSDDE -=DeltaCVSDDE;
//		ValPreCVSDDE = ValPreCVSDDE*H - DeltaCVSDDE;
	if(ValPreCVSDDE > 32767)		ValPreCVSDDE = 32767;
	if(ValPreCVSDDE < -32768)       ValPreCVSDDE = -32768;

	m++;
	m%=4;
	OutData = (short) (H*ValPreCVSDDE);		/*椭圆IIR滤波器*/
	Max = 0;
	filterX[0] = OutData;

	for(p = 0;p<ORD;p++)
	{
		Max = Max + CoefB[p]*filterX[p];
	}
	for(p=1;p<ORD;p++)
	{
		Max = Max - CoefA[p]*filterY[p-1];
	}

	DataDecode = (short)Max;
	
	for(p=ORD-1;p>0;p--)
	{
		filterX[p] = filterX[p-1];
	}
	for(p=ORD-2;p>0;p--)
	{
		filterY[p] = filterY[p-1];
	}

	filterY[0] = (short)Max;
	return DataDecode;


//	return OutData;


}


main()
{
	FILE *file_original;
	FILE *file_new;
//	short left_in_coder;
//	short right_in_coder[3];
	char left_out_coder;
//	char right_out_coder[3];
	short left_out_decoder;
//	short right_out_decoder[3];
	short median[41] ;
	short data[41];
	short nowdata;
    int i = 0;
	long k = 0;
//	int q = 0;
//	long n = 0;
	char ch;
//	short decoder_out_left;
//	short decoder_out_right;
	short CVSDinput[1];
//	char CVSDoutput[200];
	
	short CVSDDEoutput[1];


//	char CVSDDEinput[200];
/*	for(i=0;i<21;i++)
	{
		median[i] = 0;
	}
	i=0;*/

	if((file_original = fopen("c://911.wav","rb")) == NULL)
		printf("\nFail to open the 911.wav");
	if((file_new = fopen("c://911copy1107.wav","wb"))==NULL)
		printf("\nFail to open the newnew.wav");
	


	//printf("%f\n",(float)CVSDinput);
	//printf("%f\n",(float)CVSDoutput);
    //CVSDDEinput = CVSDoutput;
    



//	for(q=0;q<5058;q++)	
	while(!feof(file_original))
	{
		if(k<FILE_HEADER)
		{
			ch = fgetc(file_original);
			fputc(ch,file_new);
			k++;
		}
		
		else
		{
			

			fread(CVSDinput,2,1, file_original);

		
/*		for(i=0;i<100;i++)
		{
			left_in_coder = CVSDinput[i*2];
			right_in_coder = CVSDinput[i*2+1];
			left_out_coder = CVSDCoder(left_in_coder);
			right_out_coder = CVSDCoder(right_in_coder);
			left_out_decoder = CVSDDecoder(left_out_coder);
			right_out_decoder = CVSDDecoder(right_out_coder);
			CVSDDEoutput[i*2] = left_out_decoder;
            
			CVSDDEoutput[i*2+1] = right_out_decoder;
		}*/

/*		for(i=0;i<3;i++)
		{

			left_out_coder[i] = CVSDCoder(CVSDinput[i*2]);
			right_out_coder[i] = CVSDCoder(CVSDinput[i*2+1]);
			left_out_decoder[i] = CVSDDecoder(left_out_coder[i]);
			right_out_decoder[i] = CVSDDecoder(right_out_decoder[i]);
			
			//CVSDDEoutput[i*2+1] = CVSDDecoder(right_out_coder);

		}		
        decoder_out_left = CVSDfilter(left_out_decoder[0],left_out_decoder[1],left_out_decoder[2]);
		decoder_out_right =  CVSDfilter(right_out_decoder[0],right_out_decoder[1],right_out_decoder[2]);

		for(i=0;i<3;i++)
		{
			CVSDDEoutput[i*2] = decoder_out_left;
			CVSDDEoutput[i*2+1] = decoder_out_right;
		}*/
			left_out_coder = CVSDCoder(CVSDinput[0]);
			left_out_decoder = CVSDDecoder(left_out_coder);
			
/*****************************1103加中值滤波*******************************************/
/*			for(i=0;i<40;i++)
			{
				data[i] = median[i];
			}
			data[40] = left_out_decoder;
			nowdata = left_out_decoder;
			
			left_out_decoder = CVSDfilter(data);*/
			
			CVSDDEoutput[0] = left_out_decoder;
/*			for(i=1;i<40;i++)            //更新中值数组
			{
				median[i-1] = median[i];
				
			}
			median[39] = nowdata;	   */ 
		
		fwrite(CVSDDEoutput,2,1,file_new);
		

		}		
		
		
	}
	fclose(file_original);
	fclose(file_new);
	
	
	
}

⌨️ 快捷键说明

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