#ifndef CALCULATION_H_ #define CALCULATION_H_ #include #include #include #include #include #include #include #include "../utility/SH_MySingleton.hpp" #define pi 3.1415 typedef struct { float real,imag; }complex; class Calculation : public MySingleton { public: Calculation(); ~Calculation(); //最大值 float max(std::vector & vecData); //最小值 float min(std::vector & vecData); //将数据取绝对值 void absVec(std::vector & vecAbsData, std::vector & vecData); //将数据取平均值 float mean(std::vector & vecData); //将数据平方处理 数据有效值 float rms(std::vector & vecData); //获取样本方差 float getSample_variance(std::vector a); //去数据的直流分量 void drop_mean(std::vector & vecDropMeanData, std::vector & vecData); //方根幅值 float srm(std::vector & vecData); //方差 float variance(std::vector & vecDropMeanData); //偏态指标 float skew_state(std::vector & vecDropMeanData, float fVariance); //峭度指标 float kurtosis(std::vector & vecDropMeanData, float fVariance); //hanning 窗 void Hanning(std::vector & vecData,std::vector & vecHanningData); //快速傅里叶变换函数 void FFT(int n, fftw_complex* in, fftw_complex* out); //快速傅里叶实数变换函数 void FFT_R(int n, std::vector & vecData, fftw_complex* out); //快速傅里叶逆变换 void iFFT(int n, fftw_complex* in, fftw_complex* out); void _iFFT(std::vector & vecData, std::vector & vecFFTSpecData,std::vector & veciFFTData); void _FFT(std::vector & vecData, std::vector & vecFFTrealData,std::vector & vecFFTimageData); //通道幅值和相位提取 //输入为FFT变换后的数据长度及数据,指定的频率,输出为计算后得到的幅值 和 相位 void caculateAmp_Pha(int n, fftw_complex* in, int frequency, double &litude, double &phase); //希尔伯特变换 void hilbert(std::vector & vecData, std::vector & vecHilbertData, int N); //生成正弦信号 void GenerateSin(std::vector & vecData); //FFT shift void fftShift(fftw_complex* in, int l); //频谱图数据 void FFTSpec(std::vector & vecData, std::vector & vecFFTSpecData); //包络图谱数据 void envSpec(std::vector & vecData, std::vector & vecEnvSpecData,int StartFrequency,int EndFrequency); void Integration(std::vector & vecData,std::vector& retData,double & resolution); }; #endif