Wave Digital Circuit Models with R-Type Adaptors

The Circuit: ’59 Fender Bassman Tone Stack

The circuit that we’ll be analyzing for the rest of this article is the tone stack from the ’59 Fender Bassman guitar amplifier. This circuit has been widely discussed in analog modelling literature, starting with this 2006 DAFx paper by David Yeh and Julius Smith.

Adapted from (Yeh and Smith, 2006)

Why Do We Need An R-Type Adaptor?

At first glance, this circuit seems like it should be pretty simple to model with wave digital filters: the circuit contains no nonlinear elements (e.g. diodes) or multi-port elements (e.g. op-amps). However, if we try breaking down the circuit topology into a binary tree of series and parallel connections, we quickly run into trouble. For example, consider the relationship between the resistor R4 and capacitor C2. These elements are neither in series with each other, nor are they in parallel with each other. Since traditional WDFs require circuit elements to be connected with series and parallel adaptors, it appears that we’re out of luck!

SPQR decomposition for the Bassman tone stack. Adapted from (Werner et. al, 2015)

Deriving the R-Type Adaptor

While series and parallel adaptors can be re-used between WDF circuit models, R-Type adaptors typically need to be re-derived for every circuit model. In this section, I’ll go through my process of deriving the scattering matrix for the R-Type adaptor in the Bassman tone stack model.

Labelling the Circuit

First, let’s label all of the “ports” that will be connected to the R-Type adaptor:

Bassman tone stack circuit with labelled ports

Constructing the Netlist

Next, we’re going to want to construct a “netlist” of the circuit components surrounding the R-Type adaptor. However, rather than trying to deal with the full circuit topology, we’re going to replace each port with a Thevenin “equivalent circuit,” made up of a voltage source and a resistor. Let’s start by writing down the netlist entries for Port A, connecting nodes 1 and 2:

Netlist entries for Port A
Netlist entries for Ports A and B
Full netlist for the Bassman tone stack R-Type adaptor

Generating the Scattering Matrix

Now that we have the netlist for the R-Type adaptor, we can go ahead and generate the adaptor’s scattering matrix. The math for this step is pretty involved, so I’ve developer R-Solver, a system for automating the scattering matrix generation process using a Python script and SageMath. Since installing SageMath can be a bit of a commitment, I’ve also been working on developing a web app that can be used to run the script from a server, although the web app is still a bit prone to crashing (help wanted!).

Terminal output from running the R-Solver script
The text file containing the generated scattering matrix

Implementing the circuit model

Now that we have derived the R-Type adaptor, we can finish implementing a wave digital model of the Bassman tone stack circuit! For this example, I’ve chosen to implement the circuit model using Gustav Anthon’s Python WDF framework. The plots below show the frequency response of the circuit model at various settings of the Bass and Treble knobs. The code for generating the plots is shown below as well.


In this article we’ve gone through a step-by-step process for constructing a wave digital model of a circuit containing an R-Type adaptor, using the tone stack from the ’59 Fender Bassman as an example circuit. There’s a lot more to cover regarding wave digital models with R-Type adaptors, including circuits containing op-amps, or circuits with multiple nonlinear ports, but hopefully this article will suffice as a brief introduction.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store