Steve Poskitt

AudioBlog Header

This blog is a step by step account of audio DSP experiments in an effort to assess the quality of open source dsp code for the simulation of audio effects plugins.

Initially experiments have been carried out within the Guitarix project framework, a guitar amp simulation for Linux.

 

Choosing the tools.

As my interest had been sparked by the open source project Guitarix I decided to use that as a framework for my experiments, this would save a lot of programming time, as the framework already existed, and ease the learning curve for DSP prigramming as it makes use of the excellent Faust DSP programming language and its FaustWorks user interface. This enables the user to very quickly develop DSP algorithms and test them as it autogenerates highly optimised DSP code and builds a variety of different plugin architectures on the fly. Check it out at http://faust.grame.fr/.

 After a very short time I was happily writing DSP code in Faust and so ready to start the experiment.

 

 

As my aim was both to learn the intricacies of audio DSP programming and to assess the quality of valve simulations using DSP code I decided that the first project should just be a very simply one stage valve preamplifier, a simple task as the valve models are already coded and provided in the Guitarix framework.

Real valve amplifiers are incredibly simple in construction as valves are already basic voltage amplifiers ( unlike transistors which are basically high speed switches ). A single stage amplifier consists of one half of a small triode valve, 3 resistors and 1 or 2 capacitors plus the power source. The operating point of the valve is controlled by the values of these components and can be tuned for the intended purpose ( highest gain, cleanest signal etc etc ). In guitar amps it is not always required to find the operating point with least distortion so chosen values are mostly different from those found in hi-fi amps as some form of harmonic distortion is a necessary part of the final sound.

The valve models in Guitarix are based on ........ and are implemented using a lookup table generated with various parts of the circuit predefined ( power supply voltage, anode resistor, input resistor ). The resulting model can be tweaked at run time as the cathode resistor and resulting bias value are variables. The following values were used for initial experiments as they are the most common in guitar preamplifiers :

Valve 12AX7

Power Supply voltage 250V

Anode resistor 100k

Input/grid resistor 68k

Cathode resistor 1k5

Bias voltage 1.2V

/*
	Experiments with Guitarix Components
 
	Series of experiments with aim of using the "tube" components 
	to build amplifiers as close as possible in topology as real valve amplifiers
 
	Steve Poskitt Copyright 2013
 
*/
import("guitarix.lib");
 
// Input gain so can test overload
gain =  vslider("Gain[alias][style:knob]",0,-20,20,0.1):db2linear: smoothi(0.999);
// A valve is represented by the tubestage function
// By time gain is at +6dB there are numerous harmonics above 22k with 1kHz input sine
// so there is a need for a lowpass filter to calm this down.
// Similarly you can also see harmonics at the very low end which could also cause problems
// In a guitar amp this is no problem as likely to roll off above 6500Hz anyhow
stage1 =  tubestage(TB_12AX7_250k,40.0,1500.0,1.204285):highpass( 2,40):lowpass( 2, 18000 ) ; 
process = *(gain):stage1;

Results were promising, frequency analysis shows production of various harmonics, predominately even order with lower odd order too, the level of harmonics increased with level of input signal until distortion became audible. Generally a good result as in listening tests the result compared favorably with a real circuit, not identical but then the valve model does not take in to consideration phase distortions and the difference in sound of different manufacturers valves.

Next Step is to experiment with different cathode resistor values and compare results.