the side effects of intermodulation in audio processors

typical IM distortion in a digital compressor

The general and most obvious effect of intermodulation components in audio signals is distortion of course – hence the concept of “intermodulation distortion” (aka “IM distortion” or simply “IMD”). IM distortion and harmonic distortion are two pairs of shoes and must be defined individually as already shown in the short essay about “myth and facts about aliasing” but more on this later on.

The existence of intermodulation components can affect the performance of an audio production in various ways. In the best case, IMD components are a desired artistic effect e. g. to obtain heavily crushed audio effect signals but in the worst and rather common case, they are one of the contributing factors which deteriorate the overall audio quality and might ruin a production. [Read more…]

towards stateful saturation – very first audio shots

Around a year ago or so I’ve already started to look into a couple of stateful non-linear models which could be more suitable for a musical and convincing digital saturation experience. To make it even more harder, they should avoid the usual drawbacks such as huge latency or insane cpu consumption – if ever possible of course.

Meanwhile, my journey into the non-linear DSP land has made an important stopover with a first prototype implementation for such an approach, yielding a DSP core for musical harmonic distortion generation based on a stateful model. This opens the door for quite a number of interesting applications such as harmonic exciters or devices which needs convincing amp models whether thats a compressor output stage or even part of a guitar amplifier effect. [Read more…]

what I’m currently working on – Vol. 5

The constant lasting heat and humidity in the Rhein-Main area are driving me nuts atm and everything seems to be slowed down a little bit. Anyhow I’ve just managed to update the VST effects page with the missing preFIX entry including tips&tricks which might be extended over time. As a reminder, if you want to contribute some of your very own usage tips then please don’t hesitate and post here or eMail me and I will include them over there.

Beside that, some bugfixing efforts still takes their time for the preFIX plug-in. [Read more…]

efficient tanh computation using Lambert’s continued fraction

Lambert's continued fraction for tanh(x)

The key for efficient implementations of rather complex functions such as the trigonometric ones is first to understand how much precision actually is needed (and in which range) and then choosing the proper math which approximates this goal the best. Instead of the go-to Taylor series approximations I’m showing a continued fraction series expansion for the tanh function as an example here. In addition some special cases and outlook are presented as well.

A complete and precise tanh computation as provided by some math libraries is computationally very, very expensive and in DSP land this is typically avoided whenever it’s possible. In my current example I was in need of a fast computation method but one which should also gives an absolute precise transfer curve and harmonic content match even if driven at around +12dBFS. [Read more…]

public beta 2 for NastyDLA 1.0.1

A second public beta bug fix release is available for NastyDLA 1.0.1 which fixes some issues related to the chorus effect:

  • Fix: clearly audible lofi artifacts in the chorus section (crackle or noise) in some setups
  • Minor improvements: wider and better chorus imaging
  • Minor improvements: assembler optimized chorus section with lower cpu footprint

If you are not affected by this issues there is no need to download and install that. If you download and want to install it be aware that this is a beta version and not a final release and might not properly work due to other bugs or side-effects. If so, please report here for further bug tracking and fixing!

The download is available in the Downloads page or just click here.

knee-deep in beta testing

That’s where I am at the moment. Beside that I’m currently into setting up a new development test- and workbench to further speed up things a little bit in the future. Most fun currently is reading some DSP papers. Not so fun is all the debugging for the NastyDLA chorus bug – but you can help me on that one easily: The main problem is that there are not enough tester available which can reproduce that specific problem and so are able to confirm a final fix. If you suffer from that chorus issue with DLA and want to support a bugfix for that then just drop me a note with your email address here.

I’ll be back (soon)!

public betas for NastyDLA and VCS, BootEQ, Density and Ferric

Some public beta bug fix releases are currently available for:

  • BootEQ mkII 2.1.1 beta
  • Density mkII 2.0.3 beta
  • FerricTDS 1.5.1 beta
  • NastyDLA 1.0.1 beta
  • NastyVCS 1.0.1 beta

This are Win32 releases only (SSE2 or higher) and are bug fix releases which addresses the following issues: [Read more…]

towards stateful saturation

the static waveshaper y = tanh(x)

Still today, most developers are sticking to static waveshaping algorithms when it comes down to digital saturation implementations. This wasn’t very convincing to me from the very beginning and in fact it was one of the motivations why I’ve started my own audio effect developments – to come a little bit closer to what I thought what saturation and non-linearity in general is all about.

And so the Rescue audio plug-in was born in summer 2007 and was already an approach to relate audio transient events to the signal saturation itself. Not that much later TesslaSE appeared which was a different exercise leaning towards a frequency dependent non-linearity implementation coupled in a feedback structure. I still really love this plug-in and how it sounds and prefer it over much more sophisticated designs even today in quite some cases. Following, the pre-amp stage in BootEQmkII then focused on “transformer style” low-end weirdness and did feature oversampling on the non-linear sections of the device. A really great combination with the EQ – smooth and very musical sounding. The TesslaPRO thingy sums up all this and puts it into one neat little device with an easy to use “few knob” interface. Don’t let you fool by this simplistic (but so beautiful) design: It already features everything which makes a saturator to stand out from the crowd today: transient awareness, frequency dependency, dedicated low-end treatments. Sound-wise this results in a way smoother saturation experience and a better stereo imaging en passant.

With FerricTDS not only the notion of  subtle frequency dependent compression got extended to a core saturator algorithm. Since revision 1.5 I’ve ditched the oversampling based core and included a version which premiered the notion of memory into the non-linearity which transforms it from a stateless into a stateful algorithm. One could basically see this as a system which reacts different on the very same actual input signal depending on the recent history of events (on a very microscopical level). The input stage algorithms which I’ve included in NastyVCS and NastyDLA (both are actually the same) are a cpu and feature wise stripped down version of that to have the basic sound of it already as an option when mixing the tracks and its according fx.

Quite recently, I’ve started to look into implicit stateful models where memory is not applied from the outside of the algorithm but the algorithm itself contains a sort of memory. As an example, I’ve implemented a stateful version of the well-known tanh() function so that it is aware of recently occurred events but provides the very same harmonic structure compared to the original. Given some analyzer plots it even shows the very same transfer curve but in fact it does not limit strictly anymore but allows some minor overshots of some peak signals. Interestingly, the sound appears a little bit brighter (without letting you see that through the analyzer plot) and the low-end appears not to be that hard “brickwalled” but a little bit smoother. Lets be assured that I’m going to follow this path and then lets see where this will lead to in 2011.

just a short wrap-up

My day job consumes all my attention and energy at the moment (the usual year-end project rally) and therefore I might not be that responsive here during these days. Anyway, just to keep you informed the recent NastyDLA release was a huge success speaking in terms of downloads and attention all over the web and I’m expecting some more reviews to follow in the traditional magazines. It seems that Patrick and me hit the nerve once again. The dropbox bandwith limits where exceeded after a day or so and I promise that there will be a better solution for that with a next whatsoever major release.  As spotted by some users the 1.0 release contains a bug in the chorus section (lofi artifacts/crackle/noise, clearly audible) but only in some specific configurations so it still appears a little bit hazy. At least I was able to reproduce it in one single host configuration here which provides a basic starting point for performing some tests. But hey, some cold and long winter nights are expected to come maybe quite soon and thats a real great time for bugfixing 🙂

NastyDLA – technical architecture

NastyDLA - technical architecture

simplified technical architecture

Internally, NastyDLA consists of quite a bunch of DSP processing building blocks which as a whole are summing up to an authentic signal path simulation of it’s analog models. The blocks and the according signal flow are shown in the diagram above. Basic signal flow goes from left to right except the feedback path which goes in the opposite direction.

With NastyDLA, signal path coloration already starts in the input stage which provides a complete model of both, frequency and phase response as well as dynamic saturation. It’s located in the dry path but all nonlinear processing and coloring can be disabled on demand so it remains as a simple input volume control then. But while switched in, the input stage can greatly contribute on getting the processed signal to fit right into a mix. [Read more…]