16 #ifndef R8B_CDSPSINCFILTERGEN_INCLUDED 17 #define R8B_CDSPSINCFILTERGEN_INCLUDED 107 const double*
const Params = NULL,
const bool UsePower =
false )
111 fl2 = (int) floor( Len2 );
112 KernelLen = fl2 + fl2 + 1;
114 setWindow( WinType, Params, UsePower,
true );
132 const double*
const Params = NULL,
const bool UsePower =
false )
136 fl2 = (int) floor( Len2 );
137 KernelLen = fl2 + fl2 + 1;
141 setWindow( WinType, Params, UsePower,
true );
159 const double*
const Params = NULL,
const bool UsePower =
false )
163 fl2 = (int) floor( Len2 );
164 KernelLen = fl2 + fl2 + 1;
166 setWindow( WinType, Params, UsePower,
true );
185 const double*
const Params = NULL,
const bool UsePower =
false )
189 fl2 = (int) ceil( Len2 );
190 KernelLen = fl2 +
fl2;
192 setWindow( WinType, Params, UsePower,
false,
FracDelay );
201 return( 0.5 + 0.5 * w1.
generate() );
210 return( 0.54 + 0.46 * w1.
generate() );
228 return( 0.355768 + 0.487396 * w1.
generate() +
238 return( 0.3635819 + 0.4891775 * w1.
generate() +
291 *op = ( *this.*wfunc )();
295 const double v = ( *this.*wfunc )();
306 *op =
pows(( *this.*wfunc )(), Power );
310 const double v =
pows(( *this.*wfunc )(), Power );
346 ( *this.*wfunc )() / t /
M_PI;
362 pows(( *this.*wfunc )(), Power ) / t /
M_PI;
384 static const double fvalues[ 2 ] = { 0.0, 2.0 };
397 const double v = fvalues[ t & 1 ] *
398 ( *this.*wfunc )() / t /
M_PI;
411 const double v = fvalues[ t & 1 ] *
412 pows( ( *this.*wfunc )(), Power ) / t /
M_PI;
434 const int opinc = 1 )
459 *op = f[ t & 1 ] * ( *this.*wfunc )() / ( t +
FracDelay ) /
467 *op = ( fabs( ut ) <= 1e-13 ? ( *this.*wfunc )() :
468 f[ t & 1 ] * ( *this.*wfunc )() / ut /
M_PI );
476 *op = f[ t & 1 ] * ( *this.*wfunc )() / ( t +
FracDelay ) /
483 *op = ( ut > Len2 ? 0.0 :
484 f[ t & 1 ] * ( *this.*wfunc )() / ut /
M_PI );
490 *op = f[ t & 1 ] *
pows( ( *this.*wfunc )(), Power ) /
498 *op = ( fabs( ut ) <= 1e-13 ?
pows( ( *this.*wfunc )(), Power ) :
499 f[ t & 1 ] *
pows( ( *this.*wfunc )(), Power ) / ut /
M_PI );
507 *op = f[ t & 1 ] *
pows( ( *this.*wfunc )(), Power ) /
514 *op = ( ut > Len2 ? 0.0 :
515 f[ t & 1 ] *
pows( ( *this.*wfunc )(), Power ) / ut /
M_PI );
572 void setWindowKaiser(
const double* Params,
const bool UsePower,
573 const bool IsCentered )
575 wn = ( IsCentered ? 0 : -
fl2 );
580 Power = ( UsePower ? 1.9718457932433306 : -1.0 );
585 Power = ( UsePower ? fabs( Params[ 1 ]) : -1.0 );
605 void setWindowGaussian(
const double* Params,
const bool UsePower,
606 const bool IsCentered )
608 wn = ( IsCentered ? 0 : -
fl2 );
618 Power = ( UsePower ? fabs( Params[ 1 ]) : -1.0 );
642 const double*
const Params,
const bool UsePower,
643 const bool IsCentered,
const double UseFracDelay = 0.0 )
658 w1.
init( step1,
M_PI * 0.5 - step1 * fl2 +
662 w2.
init( step2,
M_PI * 0.5 - step2 * fl2 +
666 w3.
init( step3,
M_PI * 0.5 - step3 * fl2 +
670 Power = ( UsePower && Params != NULL ? Params[ 0 ] : -1.0 );
675 setWindowKaiser( Params, UsePower, IsCentered );
678 if( WinType == wftGaussian )
680 setWindowGaussian( Params, UsePower, IsCentered );
687 #endif // R8B_CDSPSINCFILTERGEN_INCLUDED Sine signal generator class.
Definition: r8bbase.h:674
double clampr(const double Value, const double minv, const double maxv)
Function "clamps" (clips) the specified value so that it is not lesser than "minv", and not greater than "maxv".
Definition: r8bbase.h:1151
#define M_2PI
The M_2PI macro equals to "2 * pi" constant, fits 53-bit floating point mantissa. ...
Definition: r8bbase.h:103
Generalized cosine window function.
Definition: CDSPSincFilterGen.h:78
double calcWindowHamming()
Definition: CDSPSincFilterGen.h:208
#define R8BASSERT(e)
Assertion macro used to check for certain run-time conditions.
Definition: r8bconf.h:72
void initFrac(const EWindowFunctionType WinType=wftCosine, const double *const Params=NULL, const bool UsePower=false)
Function initializes *this structure for generation of full-bandwidth fractional delay sinc filter ke...
Definition: CDSPSincFilterGen.h:184
double Freq1
Required corner circular frequency 1 [0; pi].
Definition: CDSPSincFilterGen.h:50
void generateHilbert(T *op, CWindowFunc wfunc=&CDSPSincFilterGen ::calcWindowBlackman)
Function calculates windowed Hilbert transformer filter kernel.
Definition: CDSPSincFilterGen.h:381
double FracDelay
Fractional delay in the range [0; 1], used.
Definition: CDSPSincFilterGen.h:62
void initWindow(const EWindowFunctionType WinType=wftCosine, const double *const Params=NULL, const bool UsePower=false)
Function initializes *this structure for generation of a window function, odd-sized.
Definition: CDSPSincFilterGen.h:106
Sinc function-based FIR filter generator class.
Definition: CDSPSincFilterGen.h:31
int fl2
Internal "half kernel length" value.
Definition: CDSPSincFilterGen.h:41
Gaussian window function.
Definition: CDSPSincFilterGen.h:84
void generateWindow(T *op, CWindowFunc wfunc=&CDSPSincFilterGen ::calcWindowBlackman)
Function calculates window function only.
Definition: CDSPSincFilterGen.h:281
void generateBand(T *op, CWindowFunc wfunc=&CDSPSincFilterGen ::calcWindowBlackman)
Function calculates band-limited windowed sinc function-based filter kernel.
Definition: CDSPSincFilterGen.h:330
double(CDSPSincFilterGen ::* CWindowFunc)()
Window.
Definition: CDSPSincFilterGen.h:89
double KaiserDiv
Kaiser window function's divisor.
Definition: CDSPSincFilterGen.h:544
double calcWindowBlackmanNuttall()
Definition: CDSPSincFilterGen.h:236
void initBand(const EWindowFunctionType WinType=wftCosine, const double *const Params=NULL, const bool UsePower=false)
Function initializes *this structure for generation of band-limited sinc filter kernel.
Definition: CDSPSincFilterGen.h:131
The "base" inclusion file with basic classes and functions.
double GaussianSigma
Gaussian window function's "Sigma".
Definition: CDSPSincFilterGen.h:552
double KaiserBeta
Kaiser window function's "Beta".
Definition: CDSPSincFilterGen.h:541
int KernelLen
Resulting length of the filter kernel, this variable.
Definition: CDSPSincFilterGen.h:38
double KaiserLen2Frac
Equals FracDelay / Len2.
Definition: CDSPSincFilterGen.h:546
double GaussianSigmaFrac
Equals FracDelay / GaussianSigma.
Definition: CDSPSincFilterGen.h:555
#define M_3PI
The M_3PI macro equals to "3 * pi" constant, fits 53-bit floating point mantissa. ...
Definition: r8bbase.h:112
double calcWindowNuttall()
Definition: CDSPSincFilterGen.h:226
double pows(const double v, const double p)
Definition: r8bbase.h:1185
double calcWindowBlackman()
Definition: CDSPSincFilterGen.h:217
double sqr(const double x)
Definition: r8bbase.h:1174
#define M_PI
The macro equals to "pi" constant, fits 53-bit floating point mantissa.
Definition: r8bbase.h:94
double calcWindowhann()
Definition: CDSPSincFilterGen.h:199
double Freq2
Required corner circular frequency 2 [0; pi].
Definition: CDSPSincFilterGen.h:53
double Len2
Required half filter kernel's length in samples (can be.
Definition: CDSPSincFilterGen.h:34
EWindowFunctionType
Window function type.
Definition: CDSPSincFilterGen.h:76
Kaiser window function.
Definition: CDSPSincFilterGen.h:81
void generateFrac(T *op, CWindowFunc wfunc=&CDSPSincFilterGen ::calcWindowBlackman, const int opinc=1)
Function calculates windowed fractional delay filter kernel.
Definition: CDSPSincFilterGen.h:432
double generate()
Definition: r8bbase.h:749
double besselI0(const double x)
Definition: r8bbase.h:1216
The "r8brain-free-src" library namespace.
Definition: CDSPBlockConvolver.h:21
void init(const double si, const double ph)
Function initializes *this sine signal generator.
Definition: r8bbase.h:721
void initHilbert(const EWindowFunctionType WinType=wftCosine, const double *const Params=NULL, const bool UsePower=false)
Function initializes *this structure for Hilbert transformation filter calculation.
Definition: CDSPSincFilterGen.h:158
double calcWindowKaiser()
Definition: CDSPSincFilterGen.h:246
double calcWindowGaussian()
Definition: CDSPSincFilterGen.h:263