WLG/calculation/calculation.hpp

96 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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