📄 cvsd.c
字号:
{
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 + -