MSHV-269-Non-Gendered/src/HvDecoderMs/decoderpom.h
2024-02-12 11:29:54 +11:00

111 lines
4.2 KiB
C++

/* MSHV decoderpom
* Copyright 2015 Hrisimir Hristov, LZ2HV
* (Edited by Harper Innes, VK1TTY - to remove Gendered Language and Replace with Non-Gendered language) NOTE:May be used under the terms of the GNU General Public License (GPL)
*/
#ifndef DECODERPOM_H
#define DECODERPOM_H
#include <complex.h>
#define complex _Complex
#include "../Hv_Lib_fftw/fftw3.h"
#define NPMAX 100
class HvThr
{
public:
void four2a_c2c(double complex *a,double complex *a1,fftw_plan *pc,int &cpc,int nfft,int isign,int iform);
void four2a_d2c(double complex *a,double complex *a1,double *d,double *d1,fftw_plan *pd,int &cpd,
int nfft,int isign,int iform);
void DestroyPlans(fftw_plan *pc,int &cpc,fftw_plan *pd,int &cpd,bool imid);
private:
int nn_c2c[NPMAX+10];
int ns_c2c[NPMAX+10];
int nf_c2c[NPMAX+10];
int nn_d2c[NPMAX+10];
int ns_d2c[NPMAX+10];
int nf_d2c[NPMAX+10];
};
class F2a
{
public:
void four2a_c2c(double complex *a,int nfft,int isign,int iform,int thr = 0);
void four2a_d2c(double complex *a,double *d,int nfft,int isign,int iform,int thr = 0);
void DestroyPlansAll(bool imid);
private:
HvThr HvThr0;
HvThr HvThr1;
HvThr HvThr2;
HvThr HvThr3;
HvThr HvThr4;
HvThr HvThr5;
};
#include <QString>//2.61
class PomAll
{
public:
void initPomAll();
double peakup(double ym,double y0,double yp);
double maxval_da_beg_to_end(double*a,int a_beg,int a_end);
int maxloc_da_end_to_beg(double*a,int a_beg,int a_end);
//int minloc_da(double *da,int count);
double db(double x);
void polyfit(double*x,double*y,double*sigmay,int npts,int nterms,int mode,double*a,double &chisqr);
void zero_double_beg_end(double*,int begin,int end);
double pctile_shell(double *yellow,int nblks,int npct);
int maxloc_da_beg_to_end(double*a,int a_beg,int a_end);
void zero_double_comp_beg_end(double complex*,int begin,int end);
double ps_hv(double complex z);
void cshift1(double complex *a,int cou_a,int ish);
double complex sum_dca_mplay_conj_dca(double complex *a,int a_beg,int a_end,double complex *b);
void indexx_msk(double *arr,int n,int *indx);
bool isStandardCall(QString);//2.61 same as MultiAnswerModW
//bool isStandardCall(char*,int);
private:
double pctile_shell_tmp[141122];//141072+50
void shell(int n,double*a);
double determ(double array_[10][10],int norder);
//bool is_digit(char c);
//bool is_letter(char c);
};
class PomFt
{
public:
void initPomFt();
void nuttal_window(double *win,int n);
void normalizebmet(double *bmet,int n);
void twkfreq1(double complex *ca,int npts,double fsample,double *a,double complex *cb);
void decode174_91(double *llr,int maxosd,int norder,bool *apmask,bool *message91,bool *cw,int &nharderror,double &dmin);//ntype,//int Keff,
//void bpdecode174_91(double *llr,bool *apmask,int maxiterations,bool *decoded77,bool *cw,int &nharderror);
//void osd174_91(double *llr,bool *apmask,int ndeep,bool *message77,bool *cw,int &nhardmin,double &dmin);
private:
PomAll pomAll;
double twopi;
double pi;
//short crc14(unsigned char const * data, int length);
void platanh(double x, double &y);
//void chkcrc14a(bool *decoded,int &nbadcrc);
int indexes_ft8_2_[2][5020];//5000+20
int fp_ft8_2[525020];//525000+20
int np_ft8_2[5020];//5000+20
void boxit91(bool &reset,bool *e2,int ntau,int npindex,int i1,int i2);
int lastpat_ft8_2;
int inext_ft8_2;
void fetchit91(bool &reset,bool *e2,int ntau,int &i1,int &i2);
bool any_ca_iand_ca_eq1_91(bool *a,bool *b,int count);
void nextpat_step1_91(bool *mi,int k,int iorder,int &iflag);
void mrbencode91(bool *me,bool *codeword,bool g2_[91][174],int N,int K);
void bshift1(bool *a,int cou_a,int ish);
void get_crc14(bool *mc,int len,int &ncrc);
bool first_osd174_91;
//N=174, K=91, M=N-K=83
char gen_osd174_91_[180][97];//integer*1 gen(K,N) out from array +3
bool first_enc174_91_nocrc;
char gen_osd174_91_nocrc[100][95];//gen(M,K) [100][95];//91 83
void encode174_91_nocrc(bool *message910,bool *codeword);
void osd174_91_1(double *llr,/*int Keff=91*/bool *apmask,int ndeep,bool *message91,bool *cw,int &nhardmin,double &dmin);
};
#endif