# wavedigitalfilters.lib

A library of basic adaptors and methods to help construct Wave Digital Filter models in Faust. Its official prefix is `wd`

.

## Algebraic One Port Adaptors

`(wd.)resistor`

Resistor A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees

It should be used as a leaf/terminating element of the connection tree

#### Usage

```
r1(i) = resistor(i, R);
buildtree( A : r1 );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Resistance/Impedance of the resistor being modeled in Ohms.

Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.1

`(wd.)resistor_output`

Resistor + voltage Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees

It should be used as a leaf/terminating element of the connection tree The resistor will also pass the voltage across itself as an output of the model

#### Usage

```
rout(i) = resistor_output(i, R);
buildtree( A : rout ) : _;
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Resistance/Impedance of the resistor being modeled in Ohms.

Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.1

`(wd.)resistor_output_current`

Resistor + current Out A basic adaptor implementing a resistor for use within Wave Digital Filter connection trees

It should be used as a leaf/terminating element of the connection tree The resistor will also pass the current through itself as an output of the model

#### Usage

```
rout(i) = resistor_output_current(i, R);
buildtree( A : rout ) : _;
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Resistance/Impedance of the resistor being modeled in Ohms.

Note: The adaptor must be declared as a separate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.1

`(wd.)u_voltage`

Ideal Voltage Source (Unadapted) An adaptor implementing an ideal voltage source within Wave Digital Filter connection trees.

It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) voltage sources.

#### Usage

```
v1(i) = u_Voltage(i, ein);
buildtree( v1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`ein`

: Voltage/Potential across ideal voltage source in Volts

Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.2

`(wd.)u_current`

Resistive Current Source (Unadapted) An unadapted adaptor implementing an ideal current source within Wave Digital Filter connection trees.

It should be used as the root/top element of the connection tree Can be used for either DC (constant) or AC (signal) current sources.

#### Usage

```
i1(i) = u_current(i, jin);
buildtree( i1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`jin`

: Current through the ideal current source in Amps

Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.3

`(wd.)resVoltage`

Resistive Voltage Source An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees.

It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources.

#### Usage

```
v1(i) = resVoltage(i, R, ein);
buildtree( A : v1 );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Reistance/Impedence of the series resistor in Ohms`ein`

: Voltage/Potential of the ideal voltage source in Volts

Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.4

`(wd.)resVoltage_output`

Resistive Voltage Source + voltage output An adaptor implementing a resitive voltage source within Wave Digital Filter connection trees.

It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources. The resistive voltage source will also pass the voltage across it as an output of the model

#### Usage

```
vout(i) = resVoltage_output(i, R, ein);
buildtree( A : vout ) : _;
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Reistance/Impedence of the series resistor in Ohms`ein`

: Voltage/Potential across ideal voltage source in Volts

Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.4

`(wd.)u_resVoltage`

Resistive Voltage Source (Unadapted) An unadapted adaptor implementing a resitive voltage source within Wave Digital Filter connection trees.

It should be used as the root/top element of the connection tree It is comprised of an ideal voltage source in series with a resistor Can be used for either DC (constant) or AC (signal) voltage sources.

#### Usage

```
v1(i) = u_resVoltage(i, R, ein);
buildtree( v1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Reistance/Impedence of the series resistor in Ohms`ein`

: Voltage/Potential across ideal voltage source in Volts

Note: Only usable as the root of a tree The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.4

`(wd.)resCurrent`

Resistive Current Source An adaptor implementing a resitive current source within Wave Digital Filter connection trees.

It should be used as a leaf/terminating element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources.

#### Usage

```
i1(i) = resCurrent(i, R, jin);
buildtree( A : i1 );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Reistance/Impedence of the parallel resistor in Ohms`jin`

: Current through the ideal current source in Amps

Note: The adaptor must be declared as a seperate function before integration into the connection tree. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.5

`(wd.)u_resCurrent`

Resistive Current Source (Uadapted) An unadapted adaptor implementing a resitive current source within Wave Digital Filter connection trees.

It should be used as the root/top element of the connection tree It is comprised of an ideal current source in parallel with a resistor Can be used for either DC (constant) or AC (signal) current sources.

#### Usage

```
i1(i) = u_resCurrent(i, R, jin);
buildtree( i1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Reistance/Impedence of the series resistor in Ohms`jin`

: Current through the ideal current source in Amps

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.5

`(wd.)u_switch`

Ideal Switch (Unadapted) An unadapted adaptor implementing an ideal switch for Wave Digital Filter connection trees.

It should be used as the root/top element of the connection tree

#### Usage

```
s1(i) = u_resCurrent(i, lambda);
buildtree( s1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`lambda`

: switch state control. -1 for closed switch, 1 for open switch.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.2.8

## Reactive One Port Adaptors

`(wd.)capacitor`

Capacitor A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees

It should be used as a leaf/terminating element of the connection tree This capacitor model was digitized using the bi-linear transform

#### Usage

```
c1(i) = capacitor(i, R);
buildtree( A : c1 ) : _;
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Capacitance/Impedence of the capacitor being modeled in Farads.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.3.1

`(wd.)capacitor_output`

Capacitor + voltage out A basic adaptor implementing a capacitor for use within Wave Digital Filter connection trees

It should be used as a leaf/terminating element of the connection tree The capacitor will also pass the voltage across itself as an output of the model This capacitor model was digitized using the bi-linear transform

#### Usage

```
cout(i) = capacitor_output(i, R);
buildtree( A : cout ) : _;
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Capacitance/Impedence of the capacitor being modeled in Farads.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.3.1

`(wd.)inductor`

Inductor A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees

It should be used as a leaf/terminating element of the connection tree This inductor model was digitized using the bi-linear transform

#### Usage

```
l1(i) = inductor(i, R);
buildtree( A : l1 );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Inductance/Impedence of the inductor being modeled in Henries.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.3.2

`(wd.)inductor_output`

Inductor + Voltage out A basic adaptor implementing an inductor for use within Wave Digital Filter connection trees

It should be used as a leaf/terminating element of the connection tree The inductor will also pass the voltage across itself as an output of the model This inductor model was digitized using the bi-linear transform

#### Usage

```
lout(i) = inductor_output(i, R);
buildtree( A : lout ) : _;
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`R`

: Inductance/Impedence of the inductor being modeled in Henries.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.3.2

## Nonlinear One Port Adaptors

`(wd.)u_idealDiode`

Ideal Diode (Unadapted) An unadapted adaptor implementing an ideal diode for Wave Digital Filter connection trees.

It should be used as the root/top element of the connection tree

#### Usage

```
buildtree( u_idealDiode : B );
```

Note: Only usable as the root of a tree Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 3.2.3

`(wd.)u_chua`

Chua Diode (Unadapted) An adaptor implementing the chua diode / non-linear resistor within Wave Digital Filter connection trees.

It should be used as the root/top element of the connection tree

#### Usage

```
chua1(i) = u_chua(i, G1, G2, V0);
buildtree( chua1 : B ) ;
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`G1`

: resistance parameter 1 of the chua diode`G2`

: resistance parameter 2 of the chua diode`V0`

: voltage parameter of the chua diode

#### Reference

Meerkotter and Scholz, "Digital Simulation of Nonlinear Circuits by Wave Digital Filter Principles"

`(wd.)lambert`

An implementation of the lambert function It uses Halley's method of iteration to aproximate the output Indluded in the wdf library for use in non-linear diode models adapted from K M Brigg's c++ lambert function approximator

#### Usage

```
lambert(n, itr) : _;
```

Where:
* `n`

: value at which the lambert function will be evaluated
* `itr`

: number of iterations before output

`(wd.)u_diodePair`

A pair of diodes facing in opposite directions An unadapted adaptor implementing two antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law

#### Usage

```
d1 = u_diodePair(i, Is, Vt);
buildtree( d1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`Is`

: saturation current of the diodes`Vt`

: thermal resistances of the diodes

Note: Only usable as the root of a tree Correct implementation is shown above.

#### Reference

K. Werner et al. "An Improved and Generalized Diode Clipper Model for Wave Digital Filters"

`(wd.)u_diodeSingle`

A single diode An unadapted adaptor implementing a single diode for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law

#### Usage

```
d1 = u_diodeSingle(i, Is, Vt);
buildtree( d1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`Is`

: saturation current of the diodes`Vt`

: thermal resistances of the diodes

Note: Only usable as the root of a tree Correct implementation is shown above.

#### Reference

K. Werner et al. "An Improved and Generalized Diode Clipper Model for Wave Digital Filters"

`(wd.)u_diodeAntiparallel`

A set of antiparallel diodes with M diodes facing forwards and N diodes facing backwards An unadapted adaptor implementing antiparallel diodes for Wave Digital Filter connection trees. The behavior is approximated using Schottkey's ideal diode law

#### Usage

```
d1 = u_diodeAntiparallel(i, Is, Vt);
buildtree( d1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`Is`

: saturation current of the diodes`Vt`

: thermal resistances of the diodes

Note: Only usable as the root of a tree Correct implementation is shown above.

#### Reference

K. Werner et al. "An Improved and Generalized Diode Clipper Model for Wave Digital Filters"

## Two Port Adaptors

`(wd.)u_parallel_2`

2-port parallel adaptor (Unadapted) An unadapted adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit

#### Usage

```
buildtree( u_parallel_2 : (A, B) );
```

Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.4.1

`(wd.)parallel_2`

2-port parallel adaptor An adaptor implementing a 2-port parallel connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in parallel in circuit

#### Usage

```
buildtree( A : parallel_2 : B );
```

Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.4.1

`(wd.)u_series_2`

2-port series adaptor (Unadapted) An unadapted adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit

#### Usage

```
buildtree( u_series_2 : (A, B) );
```

Note: Only usable as the root of a tree This adaptor has no user-accessible parameters. Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.4.1

`(wd.)series_2`

2-port series adaptor An adaptor implementing a 2-port series connection between adaptors for Wave Digital Filter connection trees. Elements connected to this adaptor will behave as if connected in series in circuit

#### Usage

```
buildtree( A : series_2 : B );
```

Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and one forward adaptor Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.4.1

`(wd.)parallel_current`

2-port parallel adaptor + ideal current source An adaptor implementing a 2-port series connection and internal idealized current source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected elements and an additional ideal current source in parallel

#### Usage

```
i1 = parallel_current(i, jin);
buildtree(A : i1 : B);
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`jin`

: Current through the ideal current source in Amps

Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within a connection tree with one previous and one forward adaptor Correct implementation is shown above.

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.4.2

`(wd.)series_voltage`

2-port series adaptor + ideal voltage source An adaptor implementing a 2-port series connection and internal ideal voltage source between adaptors for Wave Digital Filter connection trees. This adaptor connects the two connected adaptors and an additional ideal voltage source in series

#### Usage

```
v1 = series_voltage(i, vin)
buildtree( A : v1 : B );
```

Where:

`i`

: index used by model-building functions. Should never be user declared.`vin`

: voltage across the ideal current source in Volts

Note: The adaptor must be declared as a seperate function before integration into the connection tree. It should be used within the connection tree with one previous and one forward adaptor

#### Reference

K. Werner, "Virtual Analog Modeling of Audio Circuitry Using Wave Digital Filters", 1.4.2

## Three Port Adaptors

`(wd.)parallel`

3-port parallel adaptor An adaptor implementing a 3-port parallel connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in parallel in the circuit

#### Usage

```
buildtree( A : parallel : (B, C) );
```

Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors

#### Reference

K. Werner Dissertation, 1.5.1

`(wd.)series`

3-port series adaptor An adaptor implementing a 3-port series connection between adaptors for Wave Digital Filter connection trees. This adaptor is used to connect adaptors simulating components connected in series in the circuit

#### Usage

```
tree = A : (series : (B, C));
```

Note: This adaptor has no user-accessible parameters. It should be used within the connection tree with one previous and two forward adaptors

#### Reference

K. Werner Dissertation, 1.5.2

## Model Building Functions

`(wd.)builddown`

function for building the strucutre for calculating waves travling down the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the buildup() function to create a full structure

#### Usage

```
builddown(A : B)~buildup(A : B);
```

Where:
* `(A : B)`

: is a connection tree composed of WDF adaptors

`(wd.)buildup`

function for building the strucutre for calculating waves travling up the WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds an algorithm It is used in conjunction with the builddown() function to create a full structure

#### Usage

```
builddown(A : B)~buildup(A : B);
```

Where:
* `(A : B)`

: is a connection tree composed of WDF adaptors

`(wd.)getres`

function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing

#### Usage

```
getres(A : B)~getres(A : B);
```

Where:
* `(A : B)`

: is a partial connection tree composed of WDF adaptors

Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors

`(wd.)parres`

function for determining the upward-facing port resistance of a partial WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds and algorithm It is used by the buildup and builddown functions but is also helpful in testing this function is a parallelized version of getres

#### Usage

```
parres((A , B))~parres((A , B));
```

Where:
* `(A , B)`

: is a partial connection tree composed of WDF adaptors

Note: This function cannot be used on a complete WDF tree. When called on an unadapted adaptor (u_ prefix), it will create errors

`(wd.)buildout`

function for creating the output matrix for a WDF connection tree It recursively steps through the given tree and creates an output matrix passing only outputs

#### Usage

```
buildout( A : B );
```

Where:
* `(A : B)`

: is a connection tree composed of WDF adaptors

`(wd.)buildtree`

function for building the functioning DSP model from a WDF connection tree It recursively steps through the given tree, parametrizes the adaptors, and builds the algorithm

#### Usage

```
buildtree(A : B);
```

Where:
* `(A : B)`

: a connection tree composed of WDF adaptors