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