📄 bearing.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 + -