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

📄 sw.c

📁 希尔伯特-黄变换的c程序
💻 C
字号:
//sw.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "user_func.h"
//#include "user_face.h"


void main()
{ 
  int i=0;
  int j=0;
  int cnum=0;
  int zeronum=0;
  int maxnum=0;
  int minnum=0;
  int cflag=0;
  int flag;
  float sdnum,a,b,power;
  float input[SIZE],m[SIZE];
  float zeroteam[SIZE],maxteam[SIZE],minteam[SIZE];
  float spline_value_up[SIZE],spline_value_down[SIZE];
  float c1[SIZE],c2[SIZE],c3[SIZE],c4[SIZE],c5[SIZE],h[SIZE];
  float c[SIZE],pre[SIZE],r[SIZE];
  float * p_in;
  while(1)
  {
  p_in=input;
  for(i=0;i<SIZE;i++)
   { a=((float)i/63);
     b=((float)i/63);
     power=2*sin(PAI*b);
     input[i]=power*cos(2*PAI*a*4)+power*cos(2*PAI*a*10);}
  for(j=0;j<TIMES;j++)
    { zeronum=0; maxnum=0; minnum=0;
    zeroplot(p_in,zeroteam,&zeronum);
  mnflag(p_in,maxteam,minteam,&maxnum,&minnum);
  if(maxnum>=2) splinevalue(spline_value_up,maxnum,p_in,maxteam);
  if(minnum>=2) splinevalue(spline_value_down,minnum,p_in,minteam);
  average(spline_value_up,spline_value_down,m);
      for(i=0;i<SIZE;i++)
      pre[i]=p_in[i];
      for(i=0;i<SIZE;i++)
      h[i]=p_in[i]-m[i];
      sdnum=sd(h,pre);
      if(sdnum<0.3)
         {for(i=0;i<SIZE;i++)
          c1[i]=h[i];cnum++;break;}
       else p_in=h;
     }
 
      for(i=0;i<SIZE;i++)
      r[i]=input[i]-c1[i];
      p_in=r;
  for(j=0;j<TIMES;j++)
  {   zeronum=0; maxnum=0; minnum=0;
      if(cflag==0)  
      {if(cnum==1)
         {for(i=0;i<SIZE;i++)
         r[i]=input[i]-c1[i];p_in=r;}
      else if(cnum==2)
         {for(i=0;i<SIZE;i++)
         r[i]=input[i]-c1[i]-c2[i];p_in=r;}
      else if(cnum==3)
         {for(i=0;i<SIZE;i++)
         r[i]=input[i]-c1[i]-c2[i]-c3[i];p_in=r;}
      else if(cnum==4)
         {for(i=0;i<SIZE;i++)
         r[i]=input[i]-c1[i]-c2[i]-c3[i]-c4[i];p_in=r;}
      else   {for(i=0;i<SIZE;i++) r[i]=input[i]-c1[i]-c2[i]-c3[i]-c4[i]-c5[i];p_in=r;}
      }
      cflag=1;
      zeroplot(p_in,zeroteam,&zeronum);
      mnflag(p_in,maxteam,minteam,&maxnum,&minnum);
      splinevalue(spline_value_up,maxnum,p_in,maxteam);
      splinevalue(spline_value_down,minnum,p_in,minteam);
      average(spline_value_up,spline_value_down,m);
      for(i=0;i<SIZE;i++)
      pre[i]=p_in[i];
      for(i=0;i<SIZE;i++)
      h[i]=p_in[i]-m[i];
      sdnum=sd(h,pre);
      p_in=h;
      while(sdnum<0.3)
         {++cnum;
          if(cnum==2)     {for(i=0;i<SIZE;i++)    c2[i]=h[i];cflag=0;break;}
         else if(cnum==3) {for(i=0;i<SIZE;i++)    c3[i]=h[i];cflag=0;break;}
         else if(cnum==4) {for(i=0;i<SIZE;i++)    c4[i]=h[i];cflag=0;break;}
         else             {for(i=0;i<SIZE;i++)    c5[i]=h[i];cflag=0;break;} 
         }
      flag=1;
      flag=low(m);
      if(!flag)
       break;
   
   }
     
 
   

 for(i=0;i<cnum;i++)
  {
    if(i==0) {  for(j=0;j<SIZE;j++)
                  c[j]=c1[j];
                hilbth(c1);
                 phase(c1,c);
             }
    
    else if(i==1) {  for(j=0;j<SIZE;j++)
                     c[j]=c2[j];
                     hilbth(c2);
                     phase(c2,c);
                  }
    else if(i==2) {  for(j=0;j<SIZE;j++)
                     c[j]=c3[j];
                     hilbth(c3);
                     phase(c3,c);
                  }
    else if(i==3) {  for(j=0;j<SIZE;j++)
                     c[j]=c4[j];
                     hilbth(c4);
                     phase(c4,c);
                  }
    else          {  for(j=0;j<SIZE;j++)
                     c[j]=c5[j];
                     hilbth(c5);
                     phase(c5,c);
                  }

   }
  
 
  } 
}


⌨️ 快捷键说明

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