156 lines
2.2 KiB
C++
156 lines
2.2 KiB
C++
|
#ifndef CALCULATION_H_
|
|||
|
|
|||
|
#define CALCULATION_H_
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#include <vector>
|
|||
|
|
|||
|
#include <math.h>
|
|||
|
|
|||
|
#include <fftw3.h>
|
|||
|
|
|||
|
#include <algorithm>
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
|
|||
|
#include <fstream>
|
|||
|
|
|||
|
#include <string.h>
|
|||
|
|
|||
|
#include "../utility/SH_MySingleton.hpp"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#define pi 3.1415
|
|||
|
|
|||
|
|
|||
|
|
|||
|
typedef struct
|
|||
|
|
|||
|
{
|
|||
|
|
|||
|
float real,imag;
|
|||
|
|
|||
|
}complex;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
class Calculation : public MySingleton<Calculation>
|
|||
|
{
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
Calculation();
|
|||
|
|
|||
|
~Calculation();
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//最大值
|
|||
|
|
|||
|
float max(std::vector<float> & vecData);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//最小值
|
|||
|
|
|||
|
float min(std::vector<float> & vecData);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//将数据取绝对值
|
|||
|
|
|||
|
void absVec(std::vector<float> & vecAbsData, std::vector<float> & vecData);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//将数据取平均值
|
|||
|
|
|||
|
float mean(std::vector<float> & vecData);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//将数据平方处理 数据有效值
|
|||
|
|
|||
|
float rms(std::vector<float> & vecData);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//去数据的直流分量
|
|||
|
|
|||
|
void drop_mean(std::vector<float> & vecDropMeanData, std::vector<float> & vecData);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//方根幅值
|
|||
|
|
|||
|
float srm(std::vector<float> & vecData);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//方差
|
|||
|
|
|||
|
float variance(std::vector<float> & vecDropMeanData);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//偏态指标
|
|||
|
|
|||
|
float skew_state(std::vector<float> & vecDropMeanData, float fVariance);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//峭度指标
|
|||
|
|
|||
|
float kurtosis(std::vector<float> & vecDropMeanData, float fVariance);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//快速傅里叶变换函数
|
|||
|
|
|||
|
void FFT(int n, fftw_complex* in, fftw_complex* out);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//快速傅里叶实数变换函数
|
|||
|
|
|||
|
void FFT_R(int n, std::vector<float> & 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);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//希尔伯特变换
|
|||
|
|
|||
|
void hilbert(std::vector<float> & vecData, std::vector<float> & vecHilbertData, int N);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//FFT shift
|
|||
|
|
|||
|
void fftShift(fftw_complex* in, int l);
|
|||
|
//频谱图数据
|
|||
|
void FFTSpec(std::vector<float> & vecData, std::vector<float> & vecFFTSpecData);
|
|||
|
//包络图谱数据
|
|||
|
void envSpec(std::vector<float> & vecData, std::vector<float> & vecEnvSpecData);
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif
|