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

📄 func.h

📁 同样是浮点型的fft算法一样为vc开发的
💻 H
📖 第 1 页 / 共 2 页
字号:
}

// 是按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 + -