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

📄 debugendpointdetection.c

📁 这是一个语音去除噪声的程序
💻 C
字号:
/*
	This program is for debug EndPointDetection
*/

#include <stdio.h>
#include "EndPointDetection.h"

#define INPUTDATAFILE "inputdata1.dat"
#define GAMA 5
#define FRAMENUMBER 100
#define ALPHA 0.0001
#define	BETA  0.0001


void main(void)
{
	FILE *fp;

	static float fEb[BANDSUM], fEsum;
	InputData inputdata;
	OrignalData oridata;
	int i;
	EnergyBand eneband;
	Filter filter;
	int iFileRet = 1;
	int iFrameNum = 0;
	int iNub1;
	float fEmin1;//add on Mar 5th,2006
	float fNoiseFre, fBNoiseFre;
	float fHVariance1, fHMean1;
	float fEVariance1, fEMean1;
	float fFrameNoiseE[FRAMENUMBER],fFrameNoiseH[FRAMENUMBER];		// this is problem, not limit
	float fHFrame1;
	float fTEntropy = 0, fTEnergy = 0;
	char cSpeechFrame[FRAMENUMBER];
	float fFrameH[FRAMENUMBER],fFrameE[FRAMENUMBER]; 

	fp = fopen(INPUTDATAFILE, "rb");
	if ( fp == NULL)
	{
		printf("cannot open file\n");
		return;
	}

	iFileRet = fread( &inputdata, sizeof(inputdata), 1, fp);
	for ( i=0; i<FRAMELENGTH; i++ )
	{
		oridata.fAr[i] = (float)inputdata.fAr[i];
		oridata.fAi[i] = 0;
	}

	while (iFileRet == 1)
	{
		fft(oridata.fAr, oridata.fAi);
		FmelFilter(&filter);
		FreqEner(&oridata, &eneband, &filter);
		if ( iFrameNum >= FRAMESUM )
		{
			if ( eneband.fEsum >= GAMA * fTEnergy )
			{
				cSpeechFrame[iFrameNum] = 1;

				/*------------------------分析设计-------------------*/
				fFrameNoiseH[iFrameNum] = fFrameNoiseH[iFrameNum - 1];
				fFrameNoiseE[iFrameNum] = fFrameNoiseE[iFrameNum - 1];
				
				fNoiseFre = fFrameNoiseE[iFrameNum];
				fBNoiseFre = fNoiseFre / BANDSUM;
				fEmin1 = SequBEner( &eneband );
				iNub1 = NusefulBand(fEmin1, &eneband);//add on Mar 5th ,2006
//				iNub1 = NusefulBand( fBNoiseFre );
				fHFrame1 = FrameEntropy( iNub1, fEmin1, &eneband );//add on Mar 5th,2006
				fFrameH[iFrameNum] = fHFrame1;
				fFrameE[iFrameNum] = eneband.fEsum;
				/*----------------------------------------------------*/
			}
			else if ( eneband.fEsum <= fTEnergy )
			{
				cSpeechFrame[iFrameNum] = 0;
				
				/*----------------计算噪声水平-----------------*/
				fNoiseFre = 0;
			
				for( i = iFrameNum - 2; i<=iFrameNum; i ++ )
				{
					fNoiseFre = fNoiseFre + fFrameNoiseE[i];
				}
				fNoiseFre = fNoiseFre / 2;
				fBNoiseFre = fNoiseFre / BANDSUM;
				/*-----------------------------------------------*/

				fEmin1 = SequBEner( &eneband );
				iNub1 = NusefulBand(fEmin1, &eneband);//add on Mar 5th ,2006
//				iNub1 = NusefulBand( fBNoiseFre );
				fHFrame1 = FrameEntropy( iNub1, fEmin1, &eneband );
				
				fFrameH[iFrameNum] = fHFrame1;
				fFrameE[iFrameNum] = eneband.fEsum;			
				fFrameNoiseH[iFrameNum] = fHFrame1;		// add by ling
				fFrameNoiseE[iFrameNum] = eneband.fEsum; // add by ling

				/*重新估计参数值*/
			/*	fTEntropy = Mean( &fFrameNoiseH[iFrameNum] );
				fTEnergy = Mean( &fFrameNoiseE[iFrameNum] );*/

				fHVariance1 = MeanVariance( &fFrameNoiseH[iFrameNum], &fHMean1 );
				fEVariance1 = MeanVariance( &fFrameNoiseE[iFrameNum], &fEMean1 );
				fTEntropy = fHMean1 + (float) ALPHA * fHVariance1;
				fTEnergy =  fEMean1 + (float)BETA * fEVariance1;
				
				fFrameNoiseH[iFrameNum] = fTEntropy;
				fFrameNoiseE[iFrameNum] = fTEnergy;
			}
			else
			{
				/*-----计算噪声水平--------*/
				fNoiseFre = 0;
				
				for( i = iFrameNum - 2; i<=iFrameNum; i ++ )
				{
					fNoiseFre = fNoiseFre + fFrameNoiseE[i];
				}
				fNoiseFre = fNoiseFre / 3;
				fBNoiseFre = fNoiseFre / BANDSUM;
				/*-------------------------*/

				fEmin1 = SequBEner( &eneband );
				iNub1 = NusefulBand(fEmin1, &eneband);//add on Mar 5th ,2006
//				iNub1 = NusefulBand( fBNoiseFre );
				fHFrame1 = FrameEntropy( iNub1, fEmin1, &eneband );

				if (fHFrame1 > fTEntropy)
				{
					cSpeechFrame[iFrameNum] = 1;

					/*------------------------分析设计------------------*/
					fFrameNoiseH[iFrameNum] = fFrameNoiseH[iFrameNum - 1];
					fFrameNoiseE[iFrameNum] = fFrameNoiseE[iFrameNum - 1];

					fFrameH[iFrameNum] = fHFrame1;
					fFrameE[iFrameNum] = eneband.fEsum;
					/*--------------------------------------------------*/
				}
				else
				{
					cSpeechFrame[iFrameNum] = 0;

					fFrameH[iFrameNum] = fHFrame1;
					fFrameE[iFrameNum] = eneband.fEsum;	
					fFrameNoiseH[iFrameNum] = fHFrame1;			// add by ling
					fFrameNoiseE[iFrameNum] = eneband.fEsum;	// add by ling

					/*重新估计参数值*/
				/*	fTEntropy = Mean( &fFrameNoiseH[iFrameNum] );
					fTEnergy = Mean( &fFrameNoiseE[iFrameNum] );*/

					fHVariance1 = MeanVariance( &fFrameNoiseH[iFrameNum], &fHMean1 );
					fEVariance1 = MeanVariance( &fFrameNoiseE[iFrameNum], &fEMean1 );
					fTEntropy = fHMean1 + (float) ALPHA * fHVariance1;
					fTEnergy =  fEMean1 + (float)BETA * fEVariance1;

					fFrameNoiseH[iFrameNum] = fTEntropy;
					fFrameNoiseE[iFrameNum] = fTEnergy;	
	
				}
			}
		}

        /*---------初始化(前五帧)------------*/
		else
		{
			
			fEmin1 = SequBEner( &eneband );
			iNub1 = BANDSUM-2;
			fHFrame1 = FrameEntropy( iNub1, fEmin1, &eneband );

			fFrameH[iFrameNum] = fHFrame1;
			fFrameE[iFrameNum] = eneband.fEsum;
			fFrameNoiseH[iFrameNum] = fHFrame1;
			fFrameNoiseE[iFrameNum] = eneband.fEsum;

			if ( iFrameNum == ( FRAMESUM -1 ))
			{
			/*	fTEntropy = Mean( &fFrameNoiseH[iFrameNum] );
				fTEnergy = Mean( &fFrameNoiseE[iFrameNum] );*/
				fHVariance1 = MeanVariance( &fFrameNoiseH[iFrameNum], &fHMean1 );	// debug on Mar 4th, 2006
				fEVariance1 = MeanVariance( &fFrameNoiseE[iFrameNum], &fEMean1 );	// debug on Mar 4th, 2006
				fTEntropy = fHMean1 + (float) ALPHA * fHVariance1;	// debug on Mar 4th, 2006
				fTEnergy =  fEMean1 + (float)BETA * fEVariance1;	// debug on Mar 4th, 2006
		
			}

			cSpeechFrame[iFrameNum] = 0;
		}
		
		iFrameNum ++;
		if ( iFrameNum >= FRAMENUMBER )
		{
			break;	// jump out from while
		}

		iFileRet = fread( &inputdata, sizeof(inputdata), 1, fp);
		for ( i=0; i<FRAMELENGTH; i++ )
		{
			oridata.fAr[i] = (float)inputdata.fAr[i];
			oridata.fAi[i] = 0;
		}

	}		// while loop

	fp = fopen("fFrameNoiseE1.dat", "wb");
	if ( fp == NULL)
	{
		printf("cannot open file\n");
		return;
	}
	for( i = 0; i<iFrameNum;i ++ )
	{
		if( fwrite( &fFrameNoiseE[i], sizeof (float),1,fp )!= 1)
			printf ( "file write error \n");
	}

	fp = fopen("fFrameNoiseH1.dat", "wb");
	if ( fp == NULL)
	{
		printf("cannot open file\n");
		return;
	}
	for( i = 0; i<iFrameNum;i ++ )
	{
		if( fwrite( &fFrameNoiseH[i], sizeof (float),1,fp )!= 1)
			printf ( "file write error \n");
	}

	fp = fopen("fFrameE1.dat", "wb");
	if ( fp == NULL)
	{
		printf("cannot open file\n");
		return;
	}
	for( i = 0; i<iFrameNum;i ++ )
	{
		if( fwrite( &fFrameE[i], sizeof (float),1,fp )!= 1)
			printf ( "file write error \n");
	}

	fp = fopen("fFrameH1.dat", "wb");
	if ( fp == NULL)
	{
		printf("cannot open file\n");
		return;
	}
	for( i = 0; i<iFrameNum;i ++ )
	{
		if( fwrite( &fFrameH[i], sizeof (float),1,fp )!= 1)
			printf ( "file write error \n");
	}

	fp = fopen("cSpeechFrame1.dat", "wb");
	if ( fp == NULL)
	{
		printf("cannot open file\n");
		return;
	}
	for( i = 0; i<iFrameNum;i ++ )
	{
		if( fwrite( &cSpeechFrame[i], sizeof (char),1,fp )!= 1)
			printf ( "file write error \n");
	}


	printf("Now to the end of this program\n");
}

⌨️ 快捷键说明

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