2022-07-30 11:50:01 +08:00
|
|
|
|
#ifndef CALCULATION_H_
|
|
|
|
|
|
#define CALCULATION_H_
|
|
|
|
|
|
|
|
|
|
|
|
#include <QVector>
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
#include <math.h>
|
|
|
|
|
|
#include "fftw3.h"
|
|
|
|
|
|
#include <QMath.h>
|
|
|
|
|
|
#include <complex>
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
float real,imag;
|
|
|
|
|
|
}complex;
|
|
|
|
|
|
|
|
|
|
|
|
class Calculation
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
Calculation();
|
|
|
|
|
|
~Calculation();
|
|
|
|
|
|
|
|
|
|
|
|
//将数据取绝对值
|
|
|
|
|
|
void absVec(QVector<float> & vecAbsData, QVector<float> & vecData);
|
|
|
|
|
|
|
|
|
|
|
|
//将数据取平均值
|
|
|
|
|
|
static float mean(QVector<float> & vecData);
|
|
|
|
|
|
|
|
|
|
|
|
//将数据平方处理 数据有效值
|
|
|
|
|
|
float rms(QVector<float> & vecData);
|
|
|
|
|
|
|
|
|
|
|
|
//去数据的直流分量
|
|
|
|
|
|
static void drop_mean(QVector<float> & vecDropMeanData, QVector<float> & vecData);
|
|
|
|
|
|
|
|
|
|
|
|
//方根幅值
|
|
|
|
|
|
float srm(QVector<float> & vecData);
|
|
|
|
|
|
|
|
|
|
|
|
//方差
|
|
|
|
|
|
float variance(QVector<float> & vecDropMeanData);
|
|
|
|
|
|
|
|
|
|
|
|
//偏态指标
|
|
|
|
|
|
float skew_state(QVector<float> & vecDropMeanData, float fVariance);
|
|
|
|
|
|
|
|
|
|
|
|
//峭度指标
|
|
|
|
|
|
float kurtosis(QVector<float> & vecDropMeanData, float fVariance);
|
|
|
|
|
|
|
|
|
|
|
|
//快速傅里叶变换函数
|
|
|
|
|
|
static void FFT(int n, fftw_complex* in, fftw_complex* out);
|
|
|
|
|
|
|
|
|
|
|
|
//快速傅里叶实数变换函数
|
|
|
|
|
|
void FFT_R(int n, QVector<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);
|
|
|
|
|
|
|
|
|
|
|
|
//希尔伯特变换
|
|
|
|
|
|
static void hilbert(QVector<double> & vecData, QVector<double> & vecHilbertData, int N);
|
|
|
|
|
|
|
|
|
|
|
|
//FFT shift
|
|
|
|
|
|
static void fftShift(fftw_complex* in, int l);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//频谱图数据
|
|
|
|
|
|
static void FFTSpec(QVector<double> & vecData, QVector<double> & vecFFTSpecData);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void _FFT(QVector<double> & vecData, QVector<double> & vecFFTrealData,QVector<double> & vecFFTimageData);
|
|
|
|
|
|
void _fft(QVector<double> & vecData, QVector<double> & vecFFTrealData,QVector<double> & vecFFTimageData);
|
|
|
|
|
|
void _iFFT(QVector<double> & vecData, QVector<double> & vecFFTSpecData,QVector<double> & veciFFTData);
|
|
|
|
|
|
|
2022-08-02 10:19:41 +08:00
|
|
|
|
//积分
|
|
|
|
|
|
void _Integration(QVector<double> & vecData,QVector<double>& retData,double& RMS);
|
|
|
|
|
|
//微分
|
|
|
|
|
|
void _Differentiation(QVector<double> & vecData,QVector<double>& retData);
|
2022-07-30 11:50:01 +08:00
|
|
|
|
//包络图谱数据
|
|
|
|
|
|
void envSpec(QVector<double> & vecData, QVector<double> & vecEnvSpecData,int StartFrequency,int EndFrequency,bool PolarPlot=false);
|
|
|
|
|
|
|
|
|
|
|
|
//hanning 窗
|
|
|
|
|
|
void Hanning(QVector<double> & vecData,QVector<double> & vecHanningData);
|
|
|
|
|
|
|
|
|
|
|
|
//相位计算
|
|
|
|
|
|
double Phase(QVector<double> & vecData);
|
|
|
|
|
|
|
|
|
|
|
|
QVector<double> ComputeDenCoeffs(int FilterOrder, double Lcutoff, double Ucutoff);
|
|
|
|
|
|
|
|
|
|
|
|
QVector<double> TrinomialMultiply(int FilterOrder, QVector<double>& b, QVector<double>& c);
|
|
|
|
|
|
|
|
|
|
|
|
QVector<double> ComputeNumCoeffs(int FilterOrder, double Lcutoff, double Ucutoff, QVector<double>& DenC);
|
|
|
|
|
|
|
|
|
|
|
|
QVector<double> ComputeLP(int FilterOrder);
|
|
|
|
|
|
|
|
|
|
|
|
QVector<double> ComputeHP(int FilterOrder);
|
|
|
|
|
|
|
|
|
|
|
|
//vector<double> filter(int ord, vector<double> a, vector<double> b, int np, vector<double> x);
|
|
|
|
|
|
//巴特沃斯滤波
|
|
|
|
|
|
QVector<double> filter(QVector<double>&x, QVector<double>& coeff_b, QVector<double>& coeff_a);
|
|
|
|
|
|
|
|
|
|
|
|
void ButterWorth(QVector<double>& inData,double *FrequencyBands,QVector<double>& outData);
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|