mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-25 09:18:54 -05:00
WDSP: NBP (notched bandpass) use double prceision as much as possible
This commit is contained in:
parent
7f1cb0e203
commit
5d68bf73b3
66
wdsp/nbp.cpp
66
wdsp/nbp.cpp
@ -46,10 +46,10 @@ namespace WDSP {
|
||||
a->master_run = master_run;
|
||||
a->maxnotches = maxnotches;
|
||||
a->nn = 0;
|
||||
a->fcenter = new float[a->maxnotches]; // (float *) malloc0 (a->maxnotches * sizeof (float));
|
||||
a->fwidth = new float[a->maxnotches]; // (float *) malloc0 (a->maxnotches * sizeof (float));
|
||||
a->nlow = new float[a->maxnotches]; // (float *) malloc0 (a->maxnotches * sizeof (float));
|
||||
a->nhigh = new float[a->maxnotches]; // (float *) malloc0 (a->maxnotches * sizeof (float));
|
||||
a->fcenter = new double[a->maxnotches]; // (float *) malloc0 (a->maxnotches * sizeof (float));
|
||||
a->fwidth = new double[a->maxnotches]; // (float *) malloc0 (a->maxnotches * sizeof (float));
|
||||
a->nlow = new double[a->maxnotches]; // (float *) malloc0 (a->maxnotches * sizeof (float));
|
||||
a->nhigh = new double[a->maxnotches]; // (float *) malloc0 (a->maxnotches * sizeof (float));
|
||||
a->active = new int[a->maxnotches]; // (int *) malloc0 (a->maxnotches * sizeof (int ));
|
||||
return a;
|
||||
}
|
||||
@ -69,7 +69,7 @@ void NOTCHDB::destroy_notchdb (NOTCHDB *b)
|
||||
* *
|
||||
********************************************************************************************************/
|
||||
|
||||
float* NBP::fir_mbandpass (int N, int nbp, float* flow, float* fhigh, float rate, float scale, int wintype)
|
||||
float* NBP::fir_mbandpass (int N, int nbp, double* flow, double* fhigh, double rate, double scale, int wintype)
|
||||
{
|
||||
int i, k;
|
||||
float* impulse = new float[N * 2]; // (float *) malloc0 (N * sizeof (complex));
|
||||
@ -87,9 +87,9 @@ float* NBP::fir_mbandpass (int N, int nbp, float* flow, float* fhigh, float rate
|
||||
return impulse;
|
||||
}
|
||||
|
||||
float NBP::min_notch_width (NBP *a)
|
||||
double NBP::min_notch_width (NBP *a)
|
||||
{
|
||||
float min_width;
|
||||
double min_width;
|
||||
switch (a->wintype)
|
||||
{
|
||||
case 0:
|
||||
@ -105,23 +105,23 @@ float NBP::min_notch_width (NBP *a)
|
||||
int NBP::make_nbp (
|
||||
int nn,
|
||||
int* active,
|
||||
float* center,
|
||||
float* width,
|
||||
float* nlow,
|
||||
float* nhigh,
|
||||
float minwidth,
|
||||
double* center,
|
||||
double* width,
|
||||
double* nlow,
|
||||
double* nhigh,
|
||||
double minwidth,
|
||||
int autoincr,
|
||||
float flow,
|
||||
float fhigh,
|
||||
float* bplow,
|
||||
float* bphigh,
|
||||
double flow,
|
||||
double fhigh,
|
||||
double* bplow,
|
||||
double* bphigh,
|
||||
int* havnotch
|
||||
)
|
||||
{
|
||||
int nbp;
|
||||
int nnbp, adds;
|
||||
int i, j, k;
|
||||
float nl, nh;
|
||||
double nl, nh;
|
||||
int* del = new int[1024]; // (int *) malloc0 (1024 * sizeof (int));
|
||||
if (fhigh > flow)
|
||||
{
|
||||
@ -202,8 +202,8 @@ int NBP::make_nbp (
|
||||
void NBP::calc_nbp_lightweight (NBP *a)
|
||||
{ // calculate and set new impulse response; used when changing tune freq or shift freq
|
||||
int i;
|
||||
float fl, fh;
|
||||
float offset;
|
||||
double fl, fh;
|
||||
double offset;
|
||||
NOTCHDB *b = a->ptraddr;
|
||||
if (a->fnfrun)
|
||||
{
|
||||
@ -249,7 +249,7 @@ void NBP::calc_nbp_impulse (NBP *a)
|
||||
{ // calculates impulse response; for create_fircore() and parameter changes
|
||||
int i;
|
||||
float fl, fh;
|
||||
float offset;
|
||||
double offset;
|
||||
NOTCHDB *b = a->ptraddr;
|
||||
if (a->fnfrun)
|
||||
{
|
||||
@ -309,11 +309,11 @@ NBP* NBP::create_nbp(
|
||||
int mp,
|
||||
float* in,
|
||||
float* out,
|
||||
float flow,
|
||||
float fhigh,
|
||||
double flow,
|
||||
double fhigh,
|
||||
int rate,
|
||||
int wintype,
|
||||
float gain,
|
||||
double gain,
|
||||
int autoincr,
|
||||
int maxpb,
|
||||
NOTCHDB* ptraddr
|
||||
@ -326,7 +326,7 @@ NBP* NBP::create_nbp(
|
||||
a->size = size;
|
||||
a->nc = nc;
|
||||
a->mp = mp;
|
||||
a->rate = (float)rate;
|
||||
a->rate = (double) rate;
|
||||
a->wintype = wintype;
|
||||
a->gain = gain;
|
||||
a->in = in;
|
||||
@ -336,8 +336,8 @@ NBP* NBP::create_nbp(
|
||||
a->fhigh = fhigh;
|
||||
a->maxpb = maxpb;
|
||||
a->ptraddr = ptraddr;
|
||||
a->bplow = new float[a->maxpb]; // (float *) malloc0 (a->maxpb * sizeof (float));
|
||||
a->bphigh = new float[a->maxpb]; // (float *) malloc0 (a->maxpb * sizeof (float));
|
||||
a->bplow = new double[a->maxpb]; // (float *) malloc0 (a->maxpb * sizeof (float));
|
||||
a->bphigh = new double[a->maxpb]; // (float *) malloc0 (a->maxpb * sizeof (float));
|
||||
calc_nbp_impulse (a);
|
||||
a->p = FIRCORE::create_fircore (a->size, a->in, a->out, a->nc, a->mp, a->impulse);
|
||||
// print_impulse ("nbp.txt", a->size + 1, impulse, 1, 0);
|
||||
@ -433,7 +433,7 @@ void NBP::UpdateNBPFilters(RXA& rxa)
|
||||
}
|
||||
}
|
||||
|
||||
int NBP::NBPAddNotch (RXA& rxa, int notch, float fcenter, float fwidth, int active)
|
||||
int NBP::NBPAddNotch (RXA& rxa, int notch, double fcenter, double fwidth, int active)
|
||||
{
|
||||
NOTCHDB *b;
|
||||
int i, j;
|
||||
@ -463,7 +463,7 @@ int NBP::NBPAddNotch (RXA& rxa, int notch, float fcenter, float fwidth, int acti
|
||||
return rval;
|
||||
}
|
||||
|
||||
int NBP::NBPGetNotch (RXA& rxa, int notch, float* fcenter, float* fwidth, int* active)
|
||||
int NBP::NBPGetNotch (RXA& rxa, int notch, double* fcenter, double* fwidth, int* active)
|
||||
{
|
||||
NOTCHDB *a;
|
||||
int rval;
|
||||
@ -512,7 +512,7 @@ int NBP::NBPDeleteNotch (RXA& rxa, int notch)
|
||||
return rval;
|
||||
}
|
||||
|
||||
int NBP::NBPEditNotch (RXA& rxa, int notch, float fcenter, float fwidth, int active)
|
||||
int NBP::NBPEditNotch (RXA& rxa, int notch, double fcenter, double fwidth, int active)
|
||||
{
|
||||
NOTCHDB *a;
|
||||
int rval;
|
||||
@ -539,7 +539,7 @@ void NBP::NBPGetNumNotches (RXA& rxa, int* nnotches)
|
||||
*nnotches = a->nn;
|
||||
}
|
||||
|
||||
void NBP::NBPSetTuneFrequency (RXA& rxa, float tunefreq)
|
||||
void NBP::NBPSetTuneFrequency (RXA& rxa, double tunefreq)
|
||||
{
|
||||
NOTCHDB *a;
|
||||
a = rxa.ndb.p;
|
||||
@ -551,7 +551,7 @@ void NBP::NBPSetTuneFrequency (RXA& rxa, float tunefreq)
|
||||
}
|
||||
}
|
||||
|
||||
void NBP::NBPSetShiftFrequency (RXA& rxa, float shift)
|
||||
void NBP::NBPSetShiftFrequency (RXA& rxa, double shift)
|
||||
{
|
||||
NOTCHDB *a;
|
||||
a = rxa.ndb.p;
|
||||
@ -589,7 +589,7 @@ void NBP::NBPSetRun (RXA& rxa, int run)
|
||||
a->run = run;
|
||||
}
|
||||
|
||||
void NBP::NBPSetFreqs (RXA& rxa, float flow, float fhigh)
|
||||
void NBP::NBPSetFreqs (RXA& rxa, double flow, double fhigh)
|
||||
{
|
||||
NBP *a;
|
||||
a = rxa.nbp0.p;
|
||||
@ -651,7 +651,7 @@ void NBP::NBPSetMP (RXA& rxa, int mp)
|
||||
}
|
||||
}
|
||||
|
||||
void NBP::NBPGetMinNotchWidth (RXA& rxa, float* minwidth)
|
||||
void NBP::NBPGetMinNotchWidth (RXA& rxa, double* minwidth)
|
||||
{
|
||||
NBP *a;
|
||||
a = rxa.nbp0.p;
|
||||
|
66
wdsp/nbp.hpp
66
wdsp/nbp.hpp
@ -39,14 +39,14 @@ class WDSP_API NOTCHDB
|
||||
{
|
||||
public:
|
||||
int master_run;
|
||||
float tunefreq;
|
||||
float shift;
|
||||
double tunefreq;
|
||||
double shift;
|
||||
int nn;
|
||||
int* active;
|
||||
float* fcenter;
|
||||
float* fwidth;
|
||||
float* nlow;
|
||||
float* nhigh;
|
||||
double* fcenter;
|
||||
double* fwidth;
|
||||
double* nlow;
|
||||
double* nhigh;
|
||||
int maxnotches;
|
||||
|
||||
static NOTCHDB* create_notchdb (int master_run, int maxnotches);
|
||||
@ -65,17 +65,17 @@ public:
|
||||
int mp; // minimum phase flag
|
||||
float* in; // input buffer
|
||||
float* out; // output buffer
|
||||
float flow; // low bandpass cutoff freq
|
||||
float fhigh; // high bandpass cutoff freq
|
||||
double flow; // low bandpass cutoff freq
|
||||
double fhigh; // high bandpass cutoff freq
|
||||
float* impulse; // filter impulse response
|
||||
float rate; // sample rate
|
||||
double rate; // sample rate
|
||||
int wintype; // filter window type
|
||||
float gain; // filter gain
|
||||
double gain; // filter gain
|
||||
int autoincr; // auto-increment notch width
|
||||
int maxpb; // maximum number of passbands
|
||||
NOTCHDB* ptraddr; // ptr to addr of notch-database data structure
|
||||
float* bplow; // array of passband lows
|
||||
float* bphigh; // array of passband highs
|
||||
double* bplow; // array of passband lows
|
||||
double* bphigh; // array of passband highs
|
||||
int numpb; // number of passbands
|
||||
FIRCORE *p;
|
||||
int havnotch;
|
||||
@ -90,11 +90,11 @@ public:
|
||||
int mp,
|
||||
float* in,
|
||||
float* out,
|
||||
float flow,
|
||||
float fhigh,
|
||||
double flow,
|
||||
double fhigh,
|
||||
int rate,
|
||||
int wintype,
|
||||
float gain,
|
||||
double gain,
|
||||
int autoincr,
|
||||
int maxpb,
|
||||
NOTCHDB* ptraddr
|
||||
@ -111,40 +111,40 @@ public:
|
||||
// RXA Properties
|
||||
static void UpdateNBPFiltersLightWeight (RXA& rxa);
|
||||
static void UpdateNBPFilters(RXA& rxa);
|
||||
static int NBPAddNotch (RXA& rxa, int notch, float fcenter, float fwidth, int active);
|
||||
static int NBPGetNotch (RXA& rxa, int notch, float* fcenter, float* fwidth, int* active);
|
||||
static int NBPAddNotch (RXA& rxa, int notch, double fcenter, double fwidth, int active);
|
||||
static int NBPGetNotch (RXA& rxa, int notch, double* fcenter, double* fwidth, int* active);
|
||||
static int NBPDeleteNotch (RXA& rxa, int notch);
|
||||
static int NBPEditNotch (RXA& rxa, int notch, float fcenter, float fwidth, int active);
|
||||
static int NBPEditNotch (RXA& rxa, int notch, double fcenter, double fwidth, int active);
|
||||
static void NBPGetNumNotches (RXA& rxa, int* nnotches);
|
||||
static void NBPSetTuneFrequency (RXA& rxa, float tunefreq);
|
||||
static void NBPSetShiftFrequency (RXA& rxa, float shift);
|
||||
static void NBPSetTuneFrequency (RXA& rxa, double tunefreq);
|
||||
static void NBPSetShiftFrequency (RXA& rxa, double shift);
|
||||
static void NBPSetNotchesRun (RXA& rxa, int run);
|
||||
static void NBPSetRun (RXA& rxa, int run);
|
||||
static void NBPSetFreqs (RXA& rxa, float flow, float fhigh);
|
||||
static void NBPSetFreqs (RXA& rxa, double flow, double fhigh);
|
||||
static void NBPSetWindow (RXA& rxa, int wintype);
|
||||
|
||||
static void NBPSetNC (RXA& rxa, int nc);
|
||||
static void NBPSetMP (RXA& rxa, int mp);
|
||||
|
||||
static void NBPGetMinNotchWidth (RXA& rxa, float* minwidth);
|
||||
static void NBPGetMinNotchWidth (RXA& rxa, double* minwidth);
|
||||
static void NBPSetAutoIncrease (RXA& rxa, int autoincr);
|
||||
|
||||
private:
|
||||
static float* fir_mbandpass (int N, int nbp, float* flow, float* fhigh, float rate, float scale, int wintype);
|
||||
static float min_notch_width (NBP *a);
|
||||
static float* fir_mbandpass (int N, int nbp, double* flow, double* fhigh, double rate, double scale, int wintype);
|
||||
static double min_notch_width (NBP *a);
|
||||
static int make_nbp (
|
||||
int nn,
|
||||
int* active,
|
||||
float* center,
|
||||
float* width,
|
||||
float* nlow,
|
||||
float* nhigh,
|
||||
float minwidth,
|
||||
double* center,
|
||||
double* width,
|
||||
double* nlow,
|
||||
double* nhigh,
|
||||
double minwidth,
|
||||
int autoincr,
|
||||
float flow,
|
||||
float fhigh,
|
||||
float* bplow,
|
||||
float* bphigh,
|
||||
double flow,
|
||||
double fhigh,
|
||||
double* bplow,
|
||||
double* bphigh,
|
||||
int* havnotch
|
||||
);
|
||||
static void calc_nbp_lightweight (NBP *a);
|
||||
|
Loading…
Reference in New Issue
Block a user