JUCE  v5.4.1-191-g0ab5e696f
JUCE API
Looking for a senior C++ dev?
I'm looking for work. Hire me!
juce::dsp::LookupTableTransform< FloatType > Class Template Reference

Class for approximating expensive arithmetic operations. More...

#include <juce_LookupTable.h>

Inheritance diagram for juce::dsp::LookupTableTransform< FloatType >:
Collaboration diagram for juce::dsp::LookupTableTransform< FloatType >:

Public Member Functions

 LookupTableTransform ()
 Creates an uninitialised LookupTableTransform object. More...
 
 LookupTableTransform (const std::function< FloatType(FloatType)> &functionToApproximate, FloatType minInputValueToUse, FloatType maxInputValueToUse, size_t numPoints)
 Creates and initialises a LookupTableTransform object. More...
 
void initialise (const std::function< FloatType(FloatType)> &functionToApproximate, FloatType minInputValueToUse, FloatType maxInputValueToUse, size_t numPoints)
 Initialises or changes the parameters of a LookupTableTransform object. More...
 
FloatType operator() (FloatType index) const noexcept
 
FloatType operator[] (FloatType index) const noexcept
 
void process (const FloatType *input, FloatType *output, size_t numSamples) const noexcept
 Processes an array of input values with range checking. More...
 
FloatType processSample (FloatType value) const noexcept
 Calculates the approximated value for the given input value with range checking. More...
 
FloatType processSampleUnchecked (FloatType value) const noexcept
 Calculates the approximated value for the given input value without range checking. More...
 
void processUnchecked (const FloatType *input, FloatType *output, size_t numSamples) const noexcept
 Processes an array of input values without range checking. More...
 

Static Public Member Functions

static double calculateMaxRelativeError (const std::function< FloatType(FloatType)> &functionToApproximate, FloatType minInputValue, FloatType maxInputValue, size_t numPoints, size_t numTestPoints=0)
 Calculates the maximum relative error of the approximation for the specified parameter set. More...
 

Static Private Member Functions

static double calculateRelativeDifference (double, double) noexcept
 

Private Attributes

LookupTable< FloatType > lookupTable
 
FloatType maxInputValue
 
FloatType minInputValue
 
FloatType offset
 
FloatType scaler
 

Detailed Description

template<typename FloatType>
class juce::dsp::LookupTableTransform< FloatType >

Class for approximating expensive arithmetic operations.

Once initialised, this class can be used just like the function it approximates via operator().

Example:

LookupTableTransform<float> tanhApprox ([] (float x) { return std::tanh (x); }, -5.0f, 5.0f, 64);
auto outValue = tanhApprox (4.2f);

Note: If you try to call the function with an input outside the provided range, it will return either the first or the last recorded LookupTable value.

See also
LookupTable

{DSP}

Constructor & Destructor Documentation

◆ LookupTableTransform() [1/2]

template<typename FloatType>
juce::dsp::LookupTableTransform< FloatType >::LookupTableTransform ( )
inline

Creates an uninitialised LookupTableTransform object.

You need to call initialise() before using the object. Prefer using the non-default constructor instead.

See also
initialise

◆ LookupTableTransform() [2/2]

template<typename FloatType>
juce::dsp::LookupTableTransform< FloatType >::LookupTableTransform ( const std::function< FloatType(FloatType)> &  functionToApproximate,
FloatType  minInputValueToUse,
FloatType  maxInputValueToUse,
size_t  numPoints 
)
inline

Creates and initialises a LookupTableTransform object.

Parameters
functionToApproximateThe function to be approximated. This should be a mapping from a FloatType to FloatType.
minInputValueToUseThe lowest input value used. The approximation will fail for values lower than this.
maxInputValueToUseThe highest input value used. The approximation will fail for values higher than this.
numPointsThe number of pre-calculated values stored.

Member Function Documentation

◆ calculateMaxRelativeError()

template<typename FloatType>
static double juce::dsp::LookupTableTransform< FloatType >::calculateMaxRelativeError ( const std::function< FloatType(FloatType)> &  functionToApproximate,
FloatType  minInputValue,
FloatType  maxInputValue,
size_t  numPoints,
size_t  numTestPoints = 0 
)
static

Calculates the maximum relative error of the approximation for the specified parameter set.

The closer the returned value is to zero the more accurate the approximation is.

This function compares the approximated output of this class to the function it approximates at a range of points and returns the maximum relative error. This can be used to determine if the approximation is suitable for the given problem. The accuracy of the approximation can generally be improved by increasing numPoints.

Parameters
functionToApproximateThe approximated function. This should be a mapping from a FloatType to FloatType.
minInputValueThe lowest input value used.
maxInputValueThe highest input value used.
numPointsThe number of pre-calculated values stored.
numTestPointsThe number of input values used for error calculation. Higher numbers can increase the accuracy of the error calculation. If it's zero then 100 * numPoints will be used.

◆ calculateRelativeDifference()

template<typename FloatType>
static double juce::dsp::LookupTableTransform< FloatType >::calculateRelativeDifference ( double  ,
double   
)
staticprivatenoexcept

◆ initialise()

template<typename FloatType>
void juce::dsp::LookupTableTransform< FloatType >::initialise ( const std::function< FloatType(FloatType)> &  functionToApproximate,
FloatType  minInputValueToUse,
FloatType  maxInputValueToUse,
size_t  numPoints 
)

Initialises or changes the parameters of a LookupTableTransform object.

Parameters
functionToApproximateThe function to be approximated. This should be a mapping from a FloatType to FloatType.
minInputValueToUseThe lowest input value used. The approximation will fail for values lower than this.
maxInputValueToUseThe highest input value used. The approximation will fail for values higher than this.
numPointsThe number of pre-calculated values stored.

◆ operator()()

template<typename FloatType>
FloatType juce::dsp::LookupTableTransform< FloatType >::operator() ( FloatType  index) const
inlinenoexcept
See also
processSample

◆ operator[]()

template<typename FloatType>
FloatType juce::dsp::LookupTableTransform< FloatType >::operator[] ( FloatType  index) const
inlinenoexcept

◆ process()

template<typename FloatType>
void juce::dsp::LookupTableTransform< FloatType >::process ( const FloatType *  input,
FloatType *  output,
size_t  numSamples 
) const
inlinenoexcept

Processes an array of input values with range checking.

See also
processUnchecked

◆ processSample()

template<typename FloatType>
FloatType juce::dsp::LookupTableTransform< FloatType >::processSample ( FloatType  value) const
inlinenoexcept

Calculates the approximated value for the given input value with range checking.

This can be called with any input values. Out-of-range input values will be clipped to the specified input range.

If the index is guaranteed to be in range use the faster processSampleUnchecked() instead.

Parameters
valueThe approximation is calculated for this input value.
Returns
The approximated value for the provided input value.
See also
processSampleUnchecked, operator(), operator[]

◆ processSampleUnchecked()

template<typename FloatType>
FloatType juce::dsp::LookupTableTransform< FloatType >::processSampleUnchecked ( FloatType  value) const
inlinenoexcept

Calculates the approximated value for the given input value without range checking.

Use this if you can guarantee that the input value is within the range specified in the constructor or initialise(), otherwise use processSample().

Parameters
valueThe approximation is calculated for this input value.
Returns
The approximated value for the provided input value.
See also
processSample, operator(), operator[]

◆ processUnchecked()

template<typename FloatType>
void juce::dsp::LookupTableTransform< FloatType >::processUnchecked ( const FloatType *  input,
FloatType *  output,
size_t  numSamples 
) const
inlinenoexcept

Processes an array of input values without range checking.

See also
process

Member Data Documentation

◆ lookupTable

template<typename FloatType>
LookupTable<FloatType> juce::dsp::LookupTableTransform< FloatType >::lookupTable
private

◆ maxInputValue

template<typename FloatType>
FloatType juce::dsp::LookupTableTransform< FloatType >::maxInputValue
private

◆ minInputValue

template<typename FloatType>
FloatType juce::dsp::LookupTableTransform< FloatType >::minInputValue
private

◆ offset

template<typename FloatType>
FloatType juce::dsp::LookupTableTransform< FloatType >::offset
private

◆ scaler

template<typename FloatType>
FloatType juce::dsp::LookupTableTransform< FloatType >::scaler
private

The documentation for this class was generated from the following file: