sst-filters
Filters submodule for the Surge Synthesizer
Namespaces | Enumerations | Functions | Variables
sst::filters::TriPoleFilter Namespace Reference

This filter is an emulation of the "Threeler" VCF by Ian Fritz (https://ijfritz.byethost4.com/Threeler_board_doc.pdf). More...

Namespaces

 OnePoleHPF
 
 OnePoleHPF_FB
 
 OnePoleLPF
 
 OnePoleLPF_FB
 
 ResWaveshaper
 

Enumerations

enum  thr_coeffs {
  thr_b0 = 0 , thr_a0 , thr_b1 , thr_a1 ,
  thr_b2 , thr_a2 , thr_k , n_thr_coeff
}
 
enum  thr_state {
  thr_z0 , thr_x0 , thr_z1 , thr_x1 ,
  thr_z2 , thr_x2 , thr_fb , thr_fb1
}
 

Functions

template<typename TuningProvider >
void makeCoefficients (FilterCoefficientMaker< TuningProvider > *cm, float freq, float reso, int, float sampleRate, TuningProvider *provider)
 
template<FilterSubType subtype>
SIMD_M128 process (QuadFilterUnitState *__restrict f, SIMD_M128 in)
 

Variables

constexpr float res_gain = 1.5f
 
constexpr float in_gain = 4.0f
 
constexpr float out_gain = 1.0f / in_gain
 
constexpr int nIterGlobal = 3
 
constexpr int nIterStage = 1
 
constexpr float ota1bp = 0.88f
 
constexpr float ota1bn = 1.0f
 
constexpr float ota2bp = 0.9f
 
constexpr float ota2bn = 0.97f
 
constexpr float ota3bp = 0.95f
 
constexpr float ota3bn = 1.025f
 
constexpr float Iabc = 8.0f
 
constexpr float Rload = 220.0f
 
const auto res_factor_db = std::log10(Iabc * Rload)
 

Detailed Description

This filter is an emulation of the "Threeler" VCF by Ian Fritz (https://ijfritz.byethost4.com/Threeler_board_doc.pdf).

The filter consists of three one-pole filters with nonlinear resonance and global feedback. The filter has four "modes":

  1. LPF -> LPF -> LPF
  2. LPF -> HPF -> LPF
  3. HPF -> LPF -> HPF
  4. HPF -> HPF -> HPF The filter has three output points. For modes and three output points makes for a total of 12 sub-types.

The details of the emulation are derived in a Python notebook here: https://github.com/surge-synthesizer/surge-python/blob/main/scripts/dsp_simulations/ThreelerAnalysis.ipynb

Enumeration Type Documentation

◆ thr_coeffs

enum thr_coeffs
Enumerator
thr_b0 
thr_a0 
thr_b1 
thr_a1 
thr_b2 
thr_a2 
thr_k 
n_thr_coeff 

◆ thr_state

enum thr_state
Enumerator
thr_z0 
thr_x0 
thr_z1 
thr_x1 
thr_z2 
thr_x2 
thr_fb 
thr_fb1 

Function Documentation

◆ makeCoefficients()

void sst::filters::TriPoleFilter::makeCoefficients ( FilterCoefficientMaker< TuningProvider > *  cm,
float  freq,
float  reso,
int  ,
float  sampleRate,
TuningProvider *  provider 
)

◆ process()

SIMD_M128 sst::filters::TriPoleFilter::process ( QuadFilterUnitState *__restrict  f,
SIMD_M128  in 
)

Variable Documentation

◆ res_gain

constexpr float res_gain = 1.5f
constexpr

Referenced by process().

◆ in_gain

constexpr float in_gain = 4.0f
constexpr

Referenced by process().

◆ out_gain

constexpr float out_gain = 1.0f / in_gain
constexpr

Referenced by process().

◆ nIterGlobal

constexpr int nIterGlobal = 3
constexpr

Referenced by process().

◆ nIterStage

constexpr int nIterStage = 1
constexpr

◆ ota1bp

constexpr float ota1bp = 0.88f
constexpr

Referenced by process().

◆ ota1bn

constexpr float ota1bn = 1.0f
constexpr

◆ ota2bp

constexpr float ota2bp = 0.9f
constexpr

Referenced by process().

◆ ota2bn

constexpr float ota2bn = 0.97f
constexpr

Referenced by process().

◆ ota3bp

constexpr float ota3bp = 0.95f
constexpr

Referenced by process().

◆ ota3bn

constexpr float ota3bn = 1.025f
constexpr

Referenced by process().

◆ Iabc

constexpr float Iabc = 8.0f
constexpr

◆ Rload

constexpr float Rload = 220.0f
constexpr

◆ res_factor_db

const auto res_factor_db = std::log10(Iabc * Rload)

Referenced by makeCoefficients().