#ifndef CALCULATION_H_ #define CALCULATION_H_ #include #include #include #include "fftw3.h" #include #include typedef struct { float real,imag; }complex; class Calculation { public: Calculation(); ~Calculation(); //将数据取绝对值 void absVec(QVector & vecAbsData, QVector & vecData); //将数据取平均值 static float mean(QVector & vecData); //将数据平方处理 数据有效值 float rms(QVector & vecData); //去数据的直流分量 static void drop_mean(QVector & vecDropMeanData, QVector & vecData); //方根幅值 float srm(QVector & vecData); //方差 float variance(QVector & vecDropMeanData); //偏态指标 float skew_state(QVector & vecDropMeanData, float fVariance); //峭度指标 float kurtosis(QVector & vecDropMeanData, float fVariance); //快速傅里叶变换函数 static void FFT(int n, fftw_complex* in, fftw_complex* out); //快速傅里叶实数变换函数 void FFT_R(int n, QVector & vecData, fftw_complex* out); //快速傅里叶逆变换 void iFFT(int n, fftw_complex* in, fftw_complex* out); //通道幅值和相位提取 //输入为FFT变换后的数据长度及数据,指定的频率,输出为计算后得到的幅值 和 相位 void caculateAmp_Pha(int n, fftw_complex* in, int frequency, double &litude, double &phase); //希尔伯特变换 static void hilbert(QVector & vecData, QVector & vecHilbertData, int N); //FFT shift static void fftShift(fftw_complex* in, int l); //频谱图数据 static void FFTSpec(QVector & vecData, QVector & vecFFTSpecData); void _FFT(QVector & vecData, QVector & vecFFTrealData,QVector & vecFFTimageData); void _fft(QVector & vecData, QVector & vecFFTrealData,QVector & vecFFTimageData); void _iFFT(QVector & vecData, QVector & vecFFTSpecData,QVector & veciFFTData); //积分 void _Integration(QVector & vecData,QVector& retData,double& RMS); //微分 void _Differentiation(QVector & vecData,QVector& retData); //包络图谱数据 void envSpec(QVector & vecData, QVector & vecEnvSpecData,int StartFrequency,int EndFrequency,bool PolarPlot=false); //hanning 窗 void Hanning(QVector & vecData,QVector & vecHanningData); //相位计算 double Phase(QVector & vecData); QVector ComputeDenCoeffs(int FilterOrder, double Lcutoff, double Ucutoff); QVector TrinomialMultiply(int FilterOrder, QVector& b, QVector& c); QVector ComputeNumCoeffs(int FilterOrder, double Lcutoff, double Ucutoff, QVector& DenC); QVector ComputeLP(int FilterOrder); QVector ComputeHP(int FilterOrder); //vector filter(int ord, vector a, vector b, int np, vector x); //巴特沃斯滤波 QVector filter(QVector&x, QVector& coeff_b, QVector& coeff_a); void ButterWorth(QVector& inData,double *FrequencyBands,QVector& outData); }; #endif