This commit is contained in:
2021-10-14 13:47:35 +02:00
commit 6625a8dfaa
4026 changed files with 844291 additions and 0 deletions
@@ -0,0 +1,240 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#if defined(_MSC_VER)
#pragma warning(disable : 4200)
#pragma warning(disable : 4996)
#endif
#ifndef fft_type
#define fft_type double
#endif
#ifndef cplx_type
#define cplx_type double
#endif
typedef struct cplx_t
{
cplx_type re;
cplx_type im;
} cplx_data;
typedef struct wave_set* wave_object;
wave_object wave_init(char* wname);
struct wave_set
{
char wname[50];
int filtlength;// When all filters are of the same length. [Matlab uses zero-padding to make all filters of the same length]
int lpd_len;// Default filtlength = lpd_len = lpr_len = hpd_len = hpr_len
int hpd_len;
int lpr_len;
int hpr_len;
double* lpd;
double* hpd;
double* lpr;
double* hpr;
double params[0];
};
typedef struct fft_t
{
fft_type re;
fft_type im;
} fft_data;
typedef struct fft_set* fft_object;
fft_object fft_init(int N, int sgn);
struct fft_set
{
int N;
int sgn;
int factors[64];
int lf;
int lt;
fft_data twiddle[1];
};
typedef struct fft_real_set* fft_real_object;
fft_real_object fft_real_init(int N, int sgn);
struct fft_real_set
{
fft_object cobj;
fft_data twiddle2[1];
};
typedef struct conv_set* conv_object;
conv_object conv_init(int N, int L);
struct conv_set
{
fft_real_object fobj;
fft_real_object iobj;
int ilen1;
int ilen2;
int clen;
};
typedef struct wt_set* wt_object;
wt_object wt_init(wave_object wave, char* method, int siglength, int J);
struct wt_set
{
wave_object wave;
conv_object cobj;
char method[10];
int siglength;// Length of the original signal.
int outlength;// Length of the output DWT vector
int lenlength;// Length of the Output Dimension Vector "length"
int J; // Number of decomposition Levels
int MaxIter;// Maximum Iterations J <= MaxIter
int even;// even = 1 if signal is of even length. even = 0 otherwise
char ext[10];// Type of Extension used - "per" or "sym"
char cmethod[10]; // Convolution Method - "direct" or "FFT"
int N; //
int cfftset;
int zpad;
int length[102];
double* output;
double params[0];
};
typedef struct wtree_set* wtree_object;
wtree_object wtree_init(wave_object wave, int siglength, int J);
struct wtree_set
{
wave_object wave;
conv_object cobj;
char method[10];
int siglength;// Length of the original signal.
int outlength;// Length of the output DWT vector
int lenlength;// Length of the Output Dimension Vector "length"
int J; // Number of decomposition Levels
int MaxIter;// Maximum Iterations J <= MaxIter
int even;// even = 1 if signal is of even length. even = 0 otherwise
char ext[10];// Type of Extension used - "per" or "sym"
int N; //
int nodes;
int cfftset;
int zpad;
int length[102];
double* output;
int* nodelength;
int* coeflength;
double params[0];
};
typedef struct wpt_set* wpt_object;
wpt_object wpt_init(wave_object wave, int siglength, int J);
struct wpt_set
{
wave_object wave;
conv_object cobj;
int siglength;// Length of the original signal.
int outlength;// Length of the output DWT vector
int lenlength;// Length of the Output Dimension Vector "length"
int J; // Number of decomposition Levels
int MaxIter;// Maximum Iterations J <= MaxIter
int even;// even = 1 if signal is of even length. even = 0 otherwise
char ext[10];// Type of Extension used - "per" or "sym"
char entropy[20];
double eparam;
int N; //
int nodes;
int length[102];
double* output;
double* costvalues;
double* basisvector;
int* nodeindex;
int* numnodeslevel;
int* coeflength;
double params[0];
};
typedef struct cwt_set* cwt_object;
cwt_object cwt_init(char* wave, double param, int siglength, double dt, int J);
struct cwt_set
{
char wave[10];// Wavelet - morl/morlet,paul,dog/dgauss
int siglength;// Length of Input Data
int J;// Total Number of Scales
double s0;// Smallest scale. It depends on the sampling rate. s0 <= 2 * dt for most wavelets
double dt;// Sampling Rate
double dj;// Separation between scales. eg., scale = s0 * 2 ^ ( [0:N-1] *dj ) or scale = s0 *[0:N-1] * dj
char type[10];// Scale Type - Power or Linear
int pow;// Base of Power in case type = pow. Typical value is pow = 2
int sflag;
int pflag;
int npad;
int mother;
double m;// Wavelet parameter param
double smean;// Input Signal mean
cplx_data* output;
double* scale;
double* period;
double* coi;
double params[0];
};
void dwt(wt_object wt, double* inp);
void idwt(wt_object wt, double* dwtop);
void wtree(wtree_object wt, double* inp);
void dwpt(wpt_object wt, double* inp);
void idwpt(wpt_object wt, double* dwtop);
void swt(wt_object wt, double* inp);
void iswt(wt_object wt, double* swtop);
void modwt(wt_object wt, double* inp);
void imodwt(wt_object wt, double* dwtop);
void setDWTExtension(wt_object wt, char* extension);
void setWTREEExtension(wtree_object wt, char* extension);
void setDWPTExtension(wpt_object wt, char* extension);
void setDWPTEntropy(wpt_object wt, char* entropy, double eparam);
void setWTConv(wt_object wt, char* cmethod);
int getWTREENodelength(wtree_object wt, int X);
void getWTREECoeffs(wtree_object wt, int X, int Y, double* coeffs, int N);
int getDWPTNodelength(wpt_object wt, int X);
void getDWPTCoeffs(wpt_object wt, int X, int Y, double* coeffs, int N);
int setCWTScales(cwt_object wt, double s0, double dj, char* type, int power);
void setCWTScaleVector(cwt_object wt, double* scale, int J, double s0, double dj);
void setCWTPadding(cwt_object wt, int pad);
int cwt(cwt_object wt, double* inp);
void icwt(cwt_object wt, double* cwtop);
int getCWTScaleLength(int N);
void wave_summary(wave_object obj);
void wt_summary(wt_object wt);
void wtree_summary(wtree_object wt);
void wpt_summary(wpt_object wt);
void cwt_summary(cwt_object wt);
void wave_free(wave_object object);
void wt_free(wt_object object);
void wtree_free(wtree_object object);
void wpt_free(wpt_object object);
void cwt_free(cwt_object object);
#ifdef __cplusplus
}
#endif