WLG/utility/calculation.hpp

63 lines
1.9 KiB
C++

#ifndef CALCULATION_HPP_
#define CALCULATION_HPP_
#include <math.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
#include <fftw3.h>
typedef struct {
float real, imag;
} complex;
class Calculation {
public:
Calculation();
~Calculation();
//将数据取平均值
static float mean(std::vector<float>& vecData);
//获取样本方差
static float getSample_variance(std::vector<float> a);
// 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);
//希尔伯特变换
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);
static std::vector<float> fftInterpolate(const std::vector<float>& input, size_t outputSize);
};
#endif // CALCULATION_HPP_