📄 func.h
字号:
}
// 是按E值从大到小对i0[M]排序,按E值从大到小取出前F个点作为b;
///void serial(int *i0,int *E,int *temp)
void serial(short int *i0,unsigned int *E,short int *temp)
{ short int i,k,n,max_serial[M];
int max1;
unsigned int max_E[M];
k=0;
max_serial[0]=N1/2;
for(n=0;n<M;n++)
if(i0[n]>=0 && i0[n]<160)
{
i=i0[n];
max_serial[k]=i;//to order from small to big.
max_E[k]=E[i];
k++;
}
for(n=k;n<M;n++)
max_E[n]=0;
for (i=0;i<F;i++)
{
max1=max_float(max_E,M);
k=point;////point is a whole parameter which is changed during the call of the function max;
max_E[k]=0;
temp[i]=max_serial[k]+32;
}
}
////////////////////////////////////////////////////////////////////////
void corre(short int *b_previous,short int *b_final)
{ short int i,j,k,n;
short int max1;
short int b4[F*F];
short int a4[F*F],temp[F];
for (k=0;k<F;k++)
{ for (i=0;i<F;i++)
for (j=0;j<F;j++)
if(b_final[j]-b_previous[i]>=0)
{
a4[i*F+j]=-(b_final[j]-b_previous[i]);
b4[i*F+j]=a4[i*F+j];
}
else
{
a4[i*F+j]=(b_final[j]-b_previous[i]);
b4[i*F+j]=a4[i*F+j];
}
max1=max(b4,F*F);
n=point;
j=n%F;
i=n/F;
temp[i]=b_final[j];
b_previous[i]=1000;
b_final[j]=3000;
}
for (k=0;k<F;k++)
b_final[k]=temp[k];
}
void spe_sil(short int y[N],short int index,short int *flag)
{
int n,s,tn,u,n_pre,s_pre,u_pre,tn_pre;
short int i,y_pre,y_now,result,result_pre;
const float Ts=2;
const int Tmin=193536;
short int y_abs[N],max_y,count_y;
for(i=0;i<N;i++)
y_abs[i]=abs(y[i]);
max_y=max(y_abs,N);
count_y=0;
while(max_y<16384)
{
for(i=0;i<N;i++)
y[i]=y[i]<<1;
max_y=max_y<<1;
count_y++;
}
if(index==0)
{
u=(int)abs((y[1]<<10)-((31130*y[0])>>5));
s=u;
n=u;
tn=n;
if(s>Ts*tn+Tmin)
result=1;
else
result=0;
if(result==0)
(*flag)=1;
u_pre=u;
s_pre=s;
n_pre=n;
tn_pre=tn;
y_pre=y[1];
result_pre=result;
for(i=2;i<N;i++)
{
y_now=y[i];
u=(int)abs((y_now<<10)-((31130*y_pre)>>5));
//u=fabs(y_now-0.95*y_pre);
if(s_pre<u)
s=u;
else //s=(1-Bs)*u+Bs*s_pre;
s=u+(int)((65483*(double)(s_pre-u))/65536);
if(n_pre<u)
n=u;
else //n=(1-Bn)*u+Bn*n_pre;
n=u+(int)((65024*(double)(n_pre-u))/65536);
if(tn_pre<n)
//tn=(1-Bt)*n+Bt*tn_pre;
tn=n+(int)((65534*(double)(tn_pre-n))/65536);
else tn=n;
if//(s>Ts*tn+Tmin)
(s>Ts*tn+(Tmin<<count_y))
result=1;
else if //(s>=Tn*tn+Tmin)
(s>=((int)((46334*(double)tn)/32768)+(Tmin<<count_y)))
result=result_pre;
else
result=0;
if(result==1)
(*flag)=0;
result_pre=result;
y_pre=y_now;
u_pre=u;
s_pre=s;
n_pre=n;
tn_pre=tn;
}
yss0=y_now>>count_y;
s0=s;
n0=n;
tn0=tn;
result0=result;
count_y_pre=count_y;
}
else
{
result_pre=result0;
y_pre=(yss0<<count_y);
if(count_y>count_y_pre)
{
s_pre=s0<<(count_y-count_y_pre);
n_pre=n0<<(count_y-count_y_pre);
tn_pre=tn0<<(count_y-count_y_pre);
}
else
{
s_pre=s0>>(count_y_pre-count_y);
n_pre=n0>>(count_y_pre-count_y);
tn_pre=tn0>>(count_y_pre-count_y);
}
for (i=0;i<N;i++)
{
y_now=y[i];
// u=fabs(y_now-0.95*y_pre);
u=(int)abs((y_now<<10)-((31130*y_pre)>>5));
if(s_pre<u)
s=u;
else s=u+(int)((65483*(double)(s_pre-u))/65536);
if(n_pre<u)
n=u;
else n=u+(int)((65024*(double)(n_pre-u))/65536);
if(tn_pre<n)
tn=n+(int)((65534*(double)(tn_pre-n))/65536);
else tn=n;
if(s>(Ts*tn+(Tmin<<count_y)))
result=1;
else if (s>=(int)((46334*(double)tn)/32768)+(Tmin<<count_y))
result=result_pre;
else
result=0;
if(result==1)
(*flag)=0;
u_pre=u;
s_pre=s;
n_pre=n;
tn_pre=tn;
y_pre=y_now;
result_pre=result;
}
yss0=y_now>>count_y;
s0=s;
n0=n;
tn0=tn;
result0=result;
count_y_pre=count_y;
}//end else
}//end function
void silencefre(short int lss,short int x[N1],unsigned int p[160],short int* flag,short int* flag_pre,short int sil[3])
{
short int yss[N],i,k;
unsigned int E_sum,Ess[160];
short int a1[3];
for(i=0;i<N;i++)
yss[i]=x[i];
spe_sil(yss,lss,flag);
for(i=0;i<N;i++)
yss[i]=x[i+N];
spe_sil(yss,lss,flag);
if ((*flag)==1)
for(k=0;k<160;k++)
Ess[k]=p[k];
if ((*flag_pre)==0 && (*flag)==1)
{
//determining procedure
E_sum=0;
for(k=0;k<160;k++)
E_sum=E_sum+Ess[k];
maximum(Ess,a1,3);//The length of A is 257;
E_sum=E_sum/160;
printf("E_sum=%e\n ",E_sum);////////////////////////pppppppppppppppppppppppp
for (i=0;i<3;i++)
{
sil[i]=1;
printf("a1[%d]=%d ",i,a1[i]+32);//////////ppppppppppppppppppppppppppppppp
printf("E=%e ",p[a1[i]]);/////////////pppppppppppppppppppppppppppppp
if (p[a1[i]]>E_sum*BEISHU)
sil[i]=a1[i]+32;
}
}//if
printf("flag=%d flag_fre=%d\n",(*flag),(*flag_pre));
(*flag_pre)=(*flag);
(*flag)=1;
}
void sil_b3(short int m,short int b2[3],short int b[9][3],short int sil[3],short int b3[3])
{
short int count1[F],count0[F],flag_b2[F],flag_b3,sil1[3];
short int i,j,k;
for(i=0;i<3;i++)
{
flag_b2[i]=0;
count0[i]=0;
count1[i]=0;
sil1[i]=sil[i];
}
for(k=m-4;k<m;k++)
for(i=0;i<F;i++)
for(j=0;j<F;j++)
{
if(b2[i]>b[k][j]-3 && b2[i]<b[k][j]+3)
{
count1[i]++;
// break;
}
if(sil1[i]>b[k][j]-3 && sil1[i]<b[k][j]+3)
{
count0[i]++;
// break;
}
}
for(i=0;i<3;i++)
{
printf("count0[%d]=%d ",i,count0[i]);
printf("count1[%d]=%d ",i,count1[i]);
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
if(b2[i]>sil1[j]-3 && b2[i]<sil1[j]+3)
{
flag_b3=0;
for(k=0;k<i;k++)
if (b3[k]<sil1[j]+3 && b3[k]>sil1[j]-3)
{
flag_b3=1;
}
if(flag_b3==0)
{
b3[i]=sil1[j];
flag_b2[i]=1;
printf("b3[%d]=%d,hello1\n",i,b3[i]);
break;
}
sil1[j]=1;
}
if(flag_b2[i]==0)
for(j=0;j<3;j++)
if(sil1[j]!=1 && count0[j]>0)
{
flag_b3=0;
for(k=0;k<i;k++)
if (b3[k]<sil1[j]+3 && b3[k]>sil1[j]-3)
{
flag_b3=1;
}
if(flag_b3==0)
{
b3[i]=sil1[j];
flag_b2[i]=1;
printf("b3[%d]=%d,hello2\n",i,b3[i]);
break;
}
sil1[j]=1;
}
if(flag_b2[i]==0)
for(j=0;j<3;j++)
{
if(count1[j]>=3)
{
flag_b3=0;
for(k=0;k<i;k++)
if (b3[k]<b2[j]+3 && b3[k]>b2[j]-3)
{
flag_b3=1;
}
count1[j]=0;
if(flag_b3==0)
{
b3[i]=b2[j];
flag_b2[i]=1;
printf("b3[%d]=%d,hello3\n",i,b3[i]);
break;
}
}
}
if(flag_b2[i]==0)
b3[i]=257;
} //end for
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -