Klang C++
Language Reference (draft)
Loading...
Searching...
No Matches
klang::Filters::Biquad::Filterabstract

Abstract filter class. More...

#include <klang.h>

+ Inheritance diagram for klang::Filters::Biquad::Filter:

Public Member Functions

virtual ~Filter ()
 
void reset ()
 Reset filter state.
 
void set (param f, param Q=root2.inv)
 Set the filter cutoff (and Q)
 
virtual void init ()=0
 
void process () noexcept
 Apply the biquad filter (Transposed Direct Form II)
 
 operator const signal & () override
 
 operator const signal & () const override
 
Modifier< signal > & operator() (params... p)
 
virtual const signalinput () const
 
virtual void input (const signal &source)
 
virtual void operator<< (const signal &source)
 
virtual const signaloutput () const
 
TYPE & operator>> (TYPE &destination)
 
signal operator+ (TYPE &other)
 
signal operator* (TYPE &other)
 
signal operator- (TYPE &other)
 
signal operator/ (TYPE &other)
 

Public Attributes

float f = 0
 
float Q = 0
 
float a1 = 0
 
float a2 = 0
 
float b0 = 1
 
float b1 = 0
 
float b2 = 0
 
float a = 0
 
float cos0 = 1
 
float sin0 = 0
 
float z [2] = { 0 }
 
signal in
 
signal out
 

Detailed Description

Definition at line 4225 of file klang.h.

Constructor & Destructor Documentation

◆ ~Filter()

virtual klang::Filters::Biquad::Filter::~Filter ( )
inlinevirtual

Definition at line 4227 of file klang.h.

4227{ }

Member Function Documentation

◆ init()

virtual void klang::Filters::Biquad::Filter::init ( )
pure virtual

◆ input() [1/3]

virtual void klang::Generic::Input< signal >::input ( )
inlineprotectedvirtualinherited

◆ input() [2/3]

virtual const signal & klang::Generic::Input< signal >::input ( ) const
inlinevirtualinherited

Reimplemented in klang::Generic::Graph< SIZE >::Series.

Definition at line 1343 of file klang.h.

1343{ return in; }

◆ input() [3/3]

virtual void klang::Generic::Input< signal >::input ( const signal & source)
inlinevirtualinherited

Definition at line 1347 of file klang.h.

1347{ in = source; input(); }
virtual const signal & input() const
Definition klang.h:1343

◆ operator const signal &() [1/2]

klang::Generic::Modifier< signal >::operator const signal & ( ) const
inlineoverridevirtualinherited

Reimplemented from klang::Generic::Output< signal >.

Definition at line 1450 of file klang.h.

1450{ return out; } // return last output

◆ operator const signal &() [2/2]

klang::Generic::Modifier< signal >::operator const signal & ( )
inlineoverridevirtualinherited

Reimplemented from klang::Generic::Output< signal >.

Definition at line 1449 of file klang.h.

1449{ process(); return out; } // return processed output
virtual void process() override
Definition klang.h:1453

◆ operator()()

Modifier< signal > & klang::Generic::Modifier< signal >::operator() ( params... p)
inlineinherited

Definition at line 1457 of file klang.h.

1457 {
1458 set(p...); return *this;
1459 }

◆ operator*()

signal klang::Generic::Output< signal >::operator* ( TYPE & other)
inlineinherited

Definition at line 1372 of file klang.h.

1372{ process(); return out * (other); }

◆ operator+()

signal klang::Generic::Output< signal >::operator+ ( TYPE & other)
inlineinherited

Definition at line 1371 of file klang.h.

1371{ process(); return out + (other); }

◆ operator-()

signal klang::Generic::Output< signal >::operator- ( TYPE & other)
inlineinherited

Definition at line 1373 of file klang.h.

1373{ process(); return out - (other); }

◆ operator/()

signal klang::Generic::Output< signal >::operator/ ( TYPE & other)
inlineinherited

Definition at line 1374 of file klang.h.

1374{ process(); return out / (other); }

◆ operator<<()

virtual void klang::Generic::Input< signal >::operator<< ( const signal & source)
inlinevirtualinherited

Definition at line 1346 of file klang.h.

1346{ in = source; input(); }

◆ operator>>()

TYPE & klang::Generic::Output< signal >::operator>> ( TYPE & destination)
inlineinherited

Definition at line 1364 of file klang.h.

1364{ process(); return destination = out; }

◆ output()

virtual const signal & klang::Generic::Output< signal >::output ( ) const
inlinevirtualinherited

Definition at line 1360 of file klang.h.

1360{ return out; }

◆ process()

void klang::Filters::Biquad::Filter::process ( )
inlinevirtualnoexcept

Reimplemented from klang::Generic::Modifier< signal >.

Definition at line 4268 of file klang.h.

4268 {
4269 const float z0 = z[0];
4270 const float z1 = z[1];
4271 const float y = b0 * in + z0;
4272 z[0] = b1 * in - a1 * y + z1;
4273 z[1] = b2 * in - a2 * y;
4274 out = y;
4275 }

References a1, a2, b0, b1, b2, and z.

◆ reset()

void klang::Filters::Biquad::Filter::reset ( )
inline

Definition at line 4240 of file klang.h.

4240 {
4241 f = 0;
4242 Q = 0;
4243 b0 = 1;
4244 a1 = a2 = b1 = b2 = 0;
4245 a = 0;
4246 z[0] = z[1] = 0;
4247 }

References a, a1, a2, b0, b1, b2, f, Q, and z.

◆ set()

void klang::Filters::Biquad::Filter::set ( param f,
param Q = root2.inv )
inline

Definition at line 4250 of file klang.h.

4250 {
4251 if (Filter::f != f || Filter::Q != Q) {
4252 Filter::f = f;
4253 Filter::Q = Q;
4254
4255 const float w = f * fs.w;
4256 cos0 = cosf(w);
4257 sin0 = sinf(w);
4258
4259 if (Q < 0.5) Q = 0.5;
4260 a = sin0 / (2.f * Q);
4261 init();
4262 }
4263 }
klang::dB fs

References a, cos0, f, init(), klang::signal::operator*(), Q, sin0, and klang::SampleRate::w.

Member Data Documentation

◆ a

◆ a1

◆ a2

◆ b0

◆ b1

◆ b2

◆ cos0

◆ f

float klang::Filters::Biquad::Filter::f = 0

Definition at line 4229 of file klang.h.

Referenced by reset(), and set().

◆ in

Definition at line 1340 of file klang.h.

1340{ 0.f };

◆ out

Definition at line 1357 of file klang.h.

1357{ 0.f };

◆ Q

float klang::Filters::Biquad::Filter::Q = 0

Definition at line 4230 of file klang.h.

Referenced by reset(), and set().

◆ sin0

float klang::Filters::Biquad::Filter::sin0 = 0

Definition at line 4236 of file klang.h.

Referenced by klang::Filters::Biquad::BPF::init_skirt(), and set().

◆ z

float klang::Filters::Biquad::Filter::z[2] = { 0 }

Definition at line 4237 of file klang.h.

4237{ 0 }; // filter state

Referenced by process(), and reset().