Loading...
Searching...
No Matches
juce::dsp::FilterDesign< FloatType > Struct Template Reference

`#include <juce_FilterDesign.h>`

## Classes

struct | IIRPolyphaseAllpassStructure

## Public Types

using | FIRCoefficientsPtr = typename FIR::Coefficients<FloatType>::Ptr
using | IIRCoefficients = typename IIR::Coefficients<FloatType>
using | WindowingMethod = typename WindowingFunction<FloatType>::WindowingMethod

## Static Public Member Functions

static FIRCoefficientsPtr | designFIRLowpassWindowMethod (FloatType frequency, double sampleRate, size_t order, WindowingMethod type, FloatType beta=static_cast< FloatType >(2))
static FIRCoefficientsPtr | designFIRLowpassKaiserMethod (FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType amplitudedB)
static FIRCoefficientsPtr | designFIRLowpassTransitionMethod (FloatType frequency, double sampleRate, size_t order, FloatType normalisedTransitionWidth, FloatType spline)
static FIRCoefficientsPtr | designFIRLowpassLeastSquaresMethod (FloatType frequency, double sampleRate, size_t order, FloatType normalisedTransitionWidth, FloatType stopBandWeight)
static FIRCoefficientsPtr | designFIRLowpassHalfBandEquirippleMethod (FloatType normalisedTransitionWidth, FloatType amplitudedB)
static ReferenceCountedArray< IIRCoefficients > | designIIRLowpassHighOrderButterworthMethod (FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
static ReferenceCountedArray< IIRCoefficients > | designIIRLowpassHighOrderButterworthMethod (FloatType frequency, double sampleRate, int order)
static ReferenceCountedArray< IIRCoefficients > | designIIRHighpassHighOrderButterworthMethod (FloatType frequency, double sampleRate, int order)
static ReferenceCountedArray< IIRCoefficients > | designIIRLowpassHighOrderChebyshev1Method (FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
static ReferenceCountedArray< IIRCoefficients > | designIIRLowpassHighOrderChebyshev2Method (FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
static ReferenceCountedArray< IIRCoefficients > | designIIRLowpassHighOrderEllipticMethod (FloatType frequency, double sampleRate, FloatType normalisedTransitionWidth, FloatType passbandAmplitudedB, FloatType stopbandAmplitudedB)
static IIRPolyphaseAllpassStructure | designIIRLowpassHalfBandPolyphaseAllpassMethod (FloatType normalisedTransitionWidth, FloatType stopbandAmplitudedB)

## Detailed Description

template<typename FloatType>
struct juce::dsp::FilterDesign< FloatType >

This class provides a set of functions which generates FIR::Coefficients and IIR::Coefficients, of high-order low-pass filters. They can be used for processing directly audio as an equalizer, in resampling algorithms etc.

see FIRFilter::Coefficients, FIRFilter, WindowingFunction, IIRFilter::Coefficients, IIRFilter

Definition at line 39 of file juce_FilterDesign.h.

## Class Documentation

## juce::dsp::FilterDesign::IIRPolyphaseAllpassStructure

struct juce::dsp::FilterDesign::IIRPolyphaseAllpassStructure

template<typename FloatType>
struct juce::dsp::FilterDesign< FloatType >::IIRPolyphaseAllpassStructure

The structure returned by the function designIIRLowpassHalfBandPolyphaseAllpassMethod.

The two first members of this structure directPath and delayedPath are arrays of IIR::Coefficients, made of polyphase second order allpass filters and an additional delay in the second array, that can be used in cascaded filters processed in two parallel paths, which must be summed at the end to get the high order efficient low-pass filtering. The last member is an array with the useful parameters for simulating the structure using any custom processing function.

Definition at line 256 of file juce_FilterDesign.h.

Class Members
Array< double > | alpha |
ReferenceCountedArray< IIRCoefficients > | delayedPath |
ReferenceCountedArray< IIRCoefficients > | directPath |

## Member Typedef Documentation

## FIRCoefficientsPtr

template<typename FloatType>

using juce::dsp::FilterDesign< FloatType >::FIRCoefficientsPtr = typename FIR::Coefficients<FloatType>::Ptr

Definition at line 41 of file juce_FilterDesign.h.

## IIRCoefficients

template<typename FloatType>

using juce::dsp::FilterDesign< FloatType >::IIRCoefficients = typename IIR::Coefficients<FloatType>

Definition at line 42 of file juce_FilterDesign.h.

## WindowingMethod

template<typename FloatType>

using juce::dsp::FilterDesign< FloatType >::WindowingMethod = typename WindowingFunction<FloatType>::WindowingMethod

Definition at line 44 of file juce_FilterDesign.h.

## Member Function Documentation

## designFIRLowpassHalfBandEquirippleMethod()

template<typename FloatType>

FIR::Coefficients< FloatType >::Ptr juce::dsp::FilterDesign< FloatType >::designFIRLowpassHalfBandEquirippleMethod | ( | FloatType | normalisedTransitionWidth,
|  | FloatType | amplitudedB )

static

This method generates a FIR::Coefficients for a low-pass filter, with a cutoff frequency at half band, using an algorithm described in the article "Design of Half-Band FIR Filters for Signal Compression" from Pavel Zahradnik, to get an equiripple like high order FIR filter, without the need of an iterative method and convergence failure risks.

It generates linear phase filters coefficients.

Parameters

  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  amplitudedB | the maximum amplitude in dB expected in the stop band (must be negative)

Definition at line 235 of file juce_FilterDesign.cpp.

## designFIRLowpassKaiserMethod()

template<typename FloatType>

FIR::Coefficients< FloatType >::Ptr juce::dsp::FilterDesign< FloatType >::designFIRLowpassKaiserMethod | ( | FloatType | frequency,
|  | double | sampleRate,
|  | FloatType | normalisedTransitionWidth,
|  | FloatType | amplitudedB )

static

This a variant of the function designFIRLowpassWindowMethod, which allows the user to specify a transition width and a negative gain in dB, to get a low-pass filter using the Kaiser windowing function, with calculated values of the filter order and of the beta parameter, to satisfy the constraints.

It generates linear phase filters coefficients.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  amplitudedB | the maximum amplitude in dB expected in the stop band (must be negative)

Definition at line 65 of file juce_FilterDesign.cpp.

## designFIRLowpassLeastSquaresMethod()

template<typename FloatType>

FIR::Coefficients< FloatType >::Ptr juce::dsp::FilterDesign< FloatType >::designFIRLowpassLeastSquaresMethod | ( | FloatType | frequency,
|  | double | sampleRate,
|  | size_t | order,
|  | FloatType | normalisedTransitionWidth,
|  | FloatType | stopBandWeight )

static

This method generates a FIR::Coefficients for a low-pass filter, by minimizing the average error between the generated filter and an ideal one using the least squares error criterion and matrices operations.

It generates linear phase filters coefficients.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  order | the order of the filter
  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  stopBandWeight | between 1.0 and 100.0, indicates how much we want attenuation in the stop band, against some oscillation in the pass band

Definition at line 126 of file juce_FilterDesign.cpp.

## designFIRLowpassTransitionMethod()

template<typename FloatType>

FIR::Coefficients< FloatType >::Ptr juce::dsp::FilterDesign< FloatType >::designFIRLowpassTransitionMethod | ( | FloatType | frequency,
|  | double | sampleRate,
|  | size_t | order,
|  | FloatType | normalisedTransitionWidth,
|  | FloatType | spline )

static

This method is also a variant of the function designFIRLowpassWindowMethod, using a rectangular window as a basis, and a spline transition between the pass band and the stop band, to reduce the Gibbs phenomenon.

It generates linear phase filters coefficients.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  order | the order of the filter
  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  spline | between 1.0 and 4.0, indicates how much the transition is curved, with 1.0 meaning a straight line

Definition at line 93 of file juce_FilterDesign.cpp.

## designFIRLowpassWindowMethod()

template<typename FloatType>

FIR::Coefficients< FloatType >::Ptr juce::dsp::FilterDesign< FloatType >::designFIRLowpassWindowMethod | ( | FloatType | frequency,
|  | double | sampleRate,
|  | size_t | order,
|  | WindowingMethod | type,
|  | FloatType | beta = static_cast<FloatType> (2) )

static

This method generates a FIR::Coefficients for a low-pass filter, using the windowing design method, applied to a sinc impulse response. It is one of the simplest method used to generate a high order low-pass filter, which has the downside of needing more coefficients than more complex method to perform a given attenuation in the stop band.

It generates linear phase filters coefficients.

Note: The flatTop WindowingMethod generates an impulse response with a maximum amplitude higher than one, and might be normalised if necessary depending on the applications.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  order | the order of the filter
  type | the type, must be a WindowingFunction::WindowingType
  beta | an optional additional parameter useful for the Kaiser windowing function

Definition at line 31 of file juce_FilterDesign.cpp.

Referenced by designFIRLowpassKaiserMethod().

## designIIRHighpassHighOrderButterworthMethod()

template<typename FloatType>

ReferenceCountedArray< IIR::Coefficients< FloatType > > juce::dsp::FilterDesign< FloatType >::designIIRHighpassHighOrderButterworthMethod | ( | FloatType | frequency,
|  | double | sampleRate,
|  | int | order )

static

This method returns an array of IIR::Coefficients, made to be used in cascaded IIRFilters, providing a minimum phase high-pass filter without any ripple in the pass band and in the stop band.

Parameters

  frequency | the cutoff frequency of the high-pass filter
  sampleRate | the sample rate being used in the filter design
  order | the order of the resulting IIR filter, providing an attenuation of -6 dB times order / octave

Definition at line 577 of file juce_FilterDesign.cpp.

## designIIRLowpassHalfBandPolyphaseAllpassMethod()

template<typename FloatType>

FilterDesign< FloatType >::IIRPolyphaseAllpassStructure juce::dsp::FilterDesign< FloatType >::designIIRLowpassHalfBandPolyphaseAllpassMethod | ( | FloatType | normalisedTransitionWidth,
|  | FloatType | stopbandAmplitudedB )

static

This method generates arrays of IIR::Coefficients for a low-pass filter, with a cutoff frequency at half band, using an algorithm described in the article "Digital Signal Processing Schemes for efficient interpolation and decimation" from Pavel Valenzuela and Constantinides.

The result is a IIRPolyphaseAllpassStructure object.

The two members of this structure directPath and delayedPath are arrays of IIR::Coefficients, made of polyphase second order allpass filters and an additional delay in the second array, that can be used in cascaded filters processed in two parallel paths, which must be summed at the end to get the high order efficient low-pass filtering.

The gain of the resulting pass-band is 6 dB, so don't forget to compensate it if you want to use that method for something else than two times oversampling.

Parameters

  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  stopbandAmplitudedB | the maximum amplitude in dB expected in the stop band (must be negative)

Definition at line 612 of file juce_FilterDesign.cpp.

## designIIRLowpassHighOrderButterworthMethod() [1/2]

template<typename FloatType>

ReferenceCountedArray< IIR::Coefficients< FloatType > > juce::dsp::FilterDesign< FloatType >::designIIRLowpassHighOrderButterworthMethod | ( | FloatType | frequency,
|  | double | sampleRate,
|  | FloatType | normalisedTransitionWidth,
|  | FloatType | passbandAmplitudedB,
|  | FloatType | stopbandAmplitudedB )

static

This method returns an array of IIR::Coefficients, made to be used in cascaded IIRFilters, providing a minimum phase low-pass filter without any ripple in the pass band and in the stop band.

The algorithms are based on "Lecture Notes on Elliptic Filter Design" by Sophocles J. Orfanidis.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  passbandAmplitudedB | the highest gain in dB expected in the pass band (must be negative)
  stopbandAmplitudedB | the gain in dB expected in the stop band (must be negative)

Definition at line 337 of file juce_FilterDesign.cpp.

## designIIRLowpassHighOrderButterworthMethod() [2/2]

template<typename FloatType>

ReferenceCountedArray< IIR::Coefficients< FloatType > > juce::dsp::FilterDesign< FloatType >::designIIRLowpassHighOrderButterworthMethod | ( | FloatType | frequency,
|  | double | sampleRate,
|  | int | order )

static

This method returns an array of IIR::Coefficients, made to be used in cascaded IIRFilters, providing a minimum phase low-pass filter without any ripple in the pass band and in the stop band.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  order | the order of the resulting IIR filter, providing an attenuation of -6 dB times order / octave

Definition at line 542 of file juce_FilterDesign.cpp.

## designIIRLowpassHighOrderChebyshev1Method()

template<typename FloatType>

ReferenceCountedArray< IIR::Coefficients< FloatType > > juce::dsp::FilterDesign< FloatType >::designIIRLowpassHighOrderChebyshev1Method | ( | FloatType | frequency,
|  | double | sampleRate,
|  | FloatType | normalisedTransitionWidth,
|  | FloatType | passbandAmplitudedB,
|  | FloatType | stopbandAmplitudedB )

static

This method returns an array of IIR::Coefficients, made to be used in cascaded IIRFilters, providing a minimum phase low-pass filter without any ripple in the stop band only.

The algorithms are based on "Lecture Notes on Elliptic Filter Design" by Sophocles J. Orfanidis.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  passbandAmplitudedB | the highest amplitude in dB expected in the pass band (must be negative)
  stopbandAmplitudedB | the lowest amplitude in dB expected in the stop band (must be negative)

Definition at line 348 of file juce_FilterDesign.cpp.

## designIIRLowpassHighOrderChebyshev2Method()

template<typename FloatType>

ReferenceCountedArray< IIR::Coefficients< FloatType > > juce::dsp::FilterDesign< FloatType >::designIIRLowpassHighOrderChebyshev2Method | ( | FloatType | frequency,
|  | double | sampleRate,
|  | FloatType | normalisedTransitionWidth,
|  | FloatType | passbandAmplitudedB,
|  | FloatType | stopbandAmplitudedB )

static

This method returns an array of IIR::Coefficients, made to be used in cascaded IIRFilters, providing a minimum phase low-pass filter without any ripple in the pass band only.

The algorithms are based on "Lecture Notes on Elliptic Filter Design" by Sophocles J. Orfanidis.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  passbandAmplitudedB | the highest amplitude in dB expected in the pass band (must be negative)
  stopbandAmplitudedB | the lowest amplitude in dB expected in the stop band (must be negative)

Definition at line 359 of file juce_FilterDesign.cpp.

## designIIRLowpassHighOrderEllipticMethod()

template<typename FloatType>

ReferenceCountedArray< IIR::Coefficients< FloatType > > juce::dsp::FilterDesign< FloatType >::designIIRLowpassHighOrderEllipticMethod | ( | FloatType | frequency,
|  | double | sampleRate,
|  | FloatType | normalisedTransitionWidth,
|  | FloatType | passbandAmplitudedB,
|  | FloatType | stopbandAmplitudedB )

static

This method returns an array of IIR::Coefficients, made to be used in cascaded IIR::Filters, providing a minimum phase low-pass filter with ripples in both the pass band and in the stop band.

The algorithms are based on "Lecture Notes on Elliptic Filter Design" by Sophocles J. Orfanidis.

Parameters

  frequency | the cutoff frequency of the low-pass filter
  sampleRate | the sample rate being used in the filter design
  normalisedTransitionWidth | the normalised size between 0 and 0.5 of the transition between the pass band and the stop band
  passbandAmplitudedB | the highest amplitude in dB expected in the pass band (must be negative)
  stopbandAmplitudedB | the lowest amplitude in dB expected in the stop band (must be negative)

Definition at line 370 of file juce_FilterDesign.cpp.

The documentation for this struct was generated from the following files:

- juce_FilterDesign.h
- juce_FilterDesign.cpp