wirelessgateway/calculation/Calculation.hpp

161 lines
2.7 KiB
C++
Raw Permalink 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_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);
//获取样本方差
float getSample_variance(std::vector<float> a);
//去数据的直流分量
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);
//hanning 窗
void Hanning(std::vector<float> & vecData,std::vector<float> & vecHanningData);
//快速傅里叶变换函数
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);
void _iFFT(std::vector<float> & vecData, std::vector<float> & vecFFTSpecData,std::vector<float> & veciFFTData);
void _FFT(std::vector<float> & vecData, std::vector<float> & vecFFTrealData,std::vector<float> & vecFFTimageData);
//通道幅值和相位提取
//输入为FFT变换后的数据长度及数据指定的频率输出为计算后得到的幅值 和 相位
void caculateAmp_Pha(int n, fftw_complex* in, int frequency, double &amplitude, double &phase);
//希尔伯特变换
void hilbert(std::vector<float> & vecData, std::vector<float> & vecHilbertData, int N);
//生成正弦信号
void GenerateSin(std::vector<float> & vecData);
//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,int StartFrequency,int EndFrequency);
void Integration(std::vector<float> & vecData,std::vector<float>& retData,double & resolution);
};
#endif