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

📄 bearing.c

📁 机械工业出版社 Lab Windows/CVI逐步深入与开发实例源代码
💻 C
字号:
#include <ansi_c.h>
#include <analysis.h>

//计算峭度
int CalculateKurtosis(double *data,int length,double *k)
{
  //定义变量
  int i;
  double rms;
  
  //计算输入数组的均方根值
  RMS (data, length, &rms);
  
  *k=0;
  //计算输入数组的四次方和
  for(i=0;i<length;i++)
    *k=*k+pow (data[i], 4);
  
  //计算峭度
  *k=(*k)*length/pow(rms,4);
  return 0;
}

//计算频谱的幅度
int CalculateSpectrum(double *data,int length,double *spec)
{
  //定义变量
  int i;
  double *real,*image;
  
  //分配内存空间
  real=malloc(sizeof(double)*length);
  image=malloc(sizeof(double)*length);
  
  //为变量赋值
  for(i=0;i<length;i++)
  {  image[i]=0;
     real[i]=data[i];
  }
  
  //快速傅立叶变换
  FFT (real, image, length);
  
  //求取幅度值
  for(i=0;i<length;i++)
    spec[i]=sqrt(pow(real[i],2)+pow(image[i],2));
  
  //释放内存空间
  free(real);
  free(image);
  return 0;
}

//计算时序模型及其残差
int CalculateARVar(double *data,int length, double *para, 
                   int rank, double *var,double *ar)
{
    //定义变量
    int i,j;
    double *diff,mean;
    
    //分配内存空间
    diff=malloc(sizeof(double)*length);
    
    //计算时序模型
    for(i=0;i<rank;i++)
      ar[i]=data[i];
    for(i=rank;i<length;i++)
    {  ar[i]=0;
       for(j=0;j<rank;j++)
       ar[i]=ar[i-rank+j]*para[j]+ar[i];
    }
    
    //计算残差
    for(i=0;i<length;i++)
      diff[i]=data[i]-ar[i];
    StdDev (diff, length, &mean, var);
    
    //释放内存
    free(diff);
    return 0;
}



//希尔伯特变换
int HilbertTran(double *data, double *hilbert,int length)
{
   //定义变量
   int i;
   double *real,*image;

   //分配内存
   real=malloc(sizeof(double)*length);
   image=malloc(sizeof(double)*length);
	
   //对输入信号作快速傅立叶变换
   for(i=0;i<length;i++)
   {   image[i] = 0;
	   real[i]=data[i];
   }
   FFT (real, image, length);
	   
   //为复信号的前半段赋值
   for(i=0;i<length/2;i++)
   {   real[i]=2*real[i]/length;
	   image[i]=2*image[i]/length;
   }
	   
   //为复信号的后半段赋值为零
   for(i=length/2;i<length;i++)
   {   real[i]=0;
	   image[i]=0;
   }
	
   //逆傅立叶变换
   InvFFT (real, image, length);
	   
   //计算包络线
   for(i=0;i<length;i++)
	   hilbert[i]=sqrt(pow(image[i],2)+pow(real[i],2));
	   
   //释放内存
   free(real);
   free(image);
   return 0;
}

⌨️ 快捷键说明

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