📄 debugendpointdetection.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 + -