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