Feedback Delay Network (FDN) Reverb

DSP, Plugin and Host development discussion.
RELATED
PRODUCTS

Post

Hi,

I just implemented a 4-line FDN Reverb as a part of my WIP synth.

It sounds slightly metallic, what can I do?

Some questions.

1. Pre delay
Currently I'm using the FDN without any pre-delay. It seems everyone have a pre or post delay on the FDN so I should introduce that too right?

3. Proper Stereo
Should I run two FDNs (one for each channel?) in parallel and is there a preferred way of achieving some nice cross talk (like ping pong delay)
Is the early reflections normally panned to get some stereo width?

4. Number of Delay lines
I'm using 4 right now, it sounds pretty ok here:
http://www.acoustics.hut.fi/~riitta/.reverb/ (example sounds with finnish accent end of page)
Do you think 6 or 8 lines would improve quality a lot?

5. Frequency Response
Right now I'm using 1-pole lowpass in the feedback loops and the matrix found here:
http://www.faqs.org/docs/sp/sp-81.html
The delay times are primes between 600 and 1024 samples (@44.1k)

I guess the "metallic" sound comes from the delay times, what times do you use?

6. Allpass filter
Should I introduce an allpass filter in the feedback loop to increase diffusion? It seem diffuse enough to me right now.

(I should include a sound example from the reverb but I'm at work right now... maybe in a later edit)
Thanks,
Jonas

Post

Have you read this ?
http://www.music.miami.edu/programs/mue ... e/toc.html

All you wanted to know about FDN but were afraid to ask. :D (Ok,you did ask)

Post

That's a great link, thanks. Most of my questions was answered. I'll be back when I applied the changes. (göteborg - sveriges framstjärt, hehe)

Post

Just moved here. Not Göteborgare by blood.

Post

Modulate the delay times
David Wallin - White Noise Audio Software
http://www.bleepboxapp.com/
(groove box for iPhone)

http://www.whitenoiseaudio.com/
(VST plugins)

Post

If you can cut down the cpu used in your feedback matrix, this should allow you to squeeze more delays into the effect and improve the quality..

Have a look at Hadamard matrices, they distribute the signals well, and there's a technique, similar to the FFT, for calculating them that doesn't require you to perform every calculation in the matrix.

Here's an old beta of an FDN reverb I'm working on which uses these:

http://the-auditorium.net/viewtopic.php?t=512

The different quality setting set's the number of delays 8->64..

(You may need to register to download it..)

Cheers

Sam

Post

Ok, finally weekend, I did some improvements on the reverb.

I modulate the delaytimes. Each delayline is modulated with a different amount (4, 5, 6, 7 samples) every delayline is modulated with different phases of the same sine.

The modulation rate is about 2Hz.

It still sounds slightly metallic, and also you can hear a detuned/chorus effect (sounds rather nice) because of the modulation.

please listen to the test-clip below. (before-after pair)

http://www.acc.umu.se/~bedev/software/v ... evtest.mp3

Hmm.. I tried some other settings too (upped the modrate and modamount) and it seems to be some irritating resonances no matter what I do.. any help appreciated.

WhiteNoise: how would you suggest that I modulate the delaytimes?

SamBean: I tried your "MagalovReverbBeta", it sounds really sweet on the higher settings... I assume you use more delay-lines that 4? On hadamard matrixes: would the following matrices work well:
http://planetmath.org/encyclopedia/HadamardMatrix.html

Thanks!

Jonas

Post

Modulating with a sine wave is fine, I would also try varying the amounts and rates of modulation for each delay line. BTW, your link doesn't seem to work.
David Wallin - White Noise Audio Software
http://www.bleepboxapp.com/
(groove box for iPhone)

http://www.whitenoiseaudio.com/
(VST plugins)

Post

On the highest quality setting there are 64 delays, the lowest 8. Obviously as this is part of a synth for your project you need the cpu space for everything else so the reverb needs to be quite lite. A method I've been considering for a low cpu reverb is a combination of the freeverb and an FDN, having the same structure of the freeverb but instead of having delays that only feedback with themselves (an FDN with identity matrix) switching to FDNs.

The hadamard matrices I used had the same structure as the first and the third examples on that webpage. The simplest 2x2 matrix is made from the sum and difference of the inputs, giving the matrix:

++
+-

successive orders of the matrix (powers of 2) can be made by substituting the matrix into itself, inverting if the entry is negative, so the 4x4 matrix is

++++
+-+-
++--
+--+

(equivalent to the third example)

This matrix would take 16 adds/subs if calculated 'normally', if you however first calculate intermediate values:

a1 = a + b
b1 = a - b

c1 = c + d
d1 = c - d

Perform a quick shuffle then redo the calculation..

a2 = a1 + c1
c2 = a1 - c1

b2 = b1 + d1
d2 = b1 - d1

giving

a2 = a + b + c + d
b2 = a - b + c - d
c2 = a + b - c - d
d2 = a - b - c + d

which is the example 4x4 matrix, with only 8 adds/subtracts and a couple of shuffles. For higher orders you only need NlogN calculations instead of N^2. These are well suited for using the SSE extensions too, I beleieve you could calculate the 8x8 matrix using only 3 adds, 3 subtracts and 6 shuffles..

In the example you provided the modulation sounds good as an 'effect' but a bit wobbly for proper reverb. It's difficult getting thge balance where the modulation is small enough not to be percieved, but large enough to remove resonances.

Cheers

Sam

Post

jupiter8 wrote: Mon Feb 13, 2006 7:02 pm Have you read this ?
http://www.music.miami.edu/programs/mue ... e/toc.html

All you wanted to know about FDN but were afraid to ask. :D (Ok,you did ask)
Miami moved the HTML copy you're referring to without moving the images, which include all the formulae as well as obviously diagrams and the like.

A PDF is still to be found at http://pages.videotron.com/jfrenett/thesis.pdf .

Post

In the classic FDN, say the Jot FDN, a matrix gives the strength of each delay line's output's contribution to the reverb's total output.

The Frenett FDN (http://pages.videotron.com/jfrenett/thesis.pdf) makes a stereo output by giving a repeating pattern of coefficients 1, 1; 1, -1; -1, 1; -1, -1.

I don't see a acoustical reason that one's left ear and right ear would receive various reverbs flipped in sign like that, however.

I'm experimenting with an FDN implementation in my modular-style software synthesizer Moselle (free alpha download at http://moselle-synth.com ). Since my Delay module, that is the main building block for this, is multi-tap, it seems straightforward to simply use different taps for the outputs than used for the feedbacks.

My core FDN still sounds... entertaining... so I can't give diffinitive results yet, but scientifically it looks like a .66ms delay (=660us; see https://en.wikipedia.org/wiki/Interaura ... difference) is the most extreme delay that would give a realistic effect, being sounds to the direct left and right. In practice, 1/4 to 1/2 of that gives a huge feeling of opening up the stereo space.

I'm panning the median delays (via additional delay, not the usual sin/cos amplitude panning) hard left and right, with the shortest and longest combs/allpasses arranged more towards the middle. Much larger delays than .66 would increase stereo separation yet more and be possibly unrealistic in headphones but fine, perhaps, on speakers. (The reverbs I have this moment that give that info are too factory-like to really analyze for realism.)

For instance, were the delay times ranked 1 2 3 4 5 6, we might arrange them 3 5 1 6 2 4 left to right, and assign additional delays of .66ms, .33ms, .22ms to the right channel, then .22ms, .33ms, .66ms to the left channel. I have a MIDI control further multiplying this factor by 0 to 2, and it's the range 1/4-1/2 where it really feels stereo.

Post

Swiss Frank wrote: Tue Dec 18, 2018 6:07 pm I don't see a acoustical reason that one's left ear and right ear would receive various reverbs flipped in sign like that, however.
There is none. It's simply trying to produce outputs that are not correlated with each other, such that hopefully the reverb won't be localised to any given direction too much. Also see about correlation and speaker reproduction below.

The underlying idea here is that when you are inside a reverberant space, then late reverberation echoes come (more or less) from "all around you" and with a diffuse tail localising the individual echoes becomes impossible. The distribution of reverberant energy does vary by direction in a real space, but if we assume a typical "mostly convex" hall or room, then just assuming "equally from all directions" isn't necessarily too terrible and the output mixing scheme then tries to give a cheap approximation of that (although it does end up with some bias).

Note that this is in terms of the late tail specifically. In practice the way you localise the very first few early echoes can be critical in terms of the spatial impression. In the late tail other characteristics (eg. does it decay smoothly without obvious ringing, does it have repeating patterns, etc), tend to be more important than the exact way you mix to stereo (and you generally just want a strategy that's more or less "even" without too many obvious characteristics one way or another).

Either way, if you intentionally correlate the tail (eg. with delay panned output taps), be careful that you don't end up in a situation where speaker reproduction (where the two signals acoustically mix in the listening space) ends up with too much acoustic comb filtering; you probably don't want your reverb output to produce different notches (well, not strong ones anyway) depending on the actual listening position with respect to speaker positions. Too much correlation might also risk collapsing the spatial impression to a few points (which unfortunately is one of those things that can be tricky to notice at first when you are developing the reverb), even on headphones.

Post

Thx Mystran and glad you're still following this topic--I've learned quite a bit from you in other discussions over the years.

My short answer is, TRY IT :-D I've done a bunch of different attempts at stereo and while my reverb sucks, the stereo effect seems awesome. Especially nice is being able to assign a MIDI control to it and adjust it from no delay-pan to realistic delay-pan (.5ms) to fantasy delay-pan. Just going from 0 to .25ms is an amazing feeling of it really going stereo, and that is effectively a 90 degree wide soundstage, similar to standing near dead wall with a large space in front of you with little sound coming from sides or back. .5-.66ms opens it to 180 degree soundstage, with some sound apparently (psychoacoustically) seeming to go around your head to reach the other ear.

If this isn't how everyone does it, I think I might have tripped across something new and important.

> trying to produce outputs that are not correlated with each other

Yeah but in a real situation, what you hear IS somewhat correlated. I mean you could use completely separate FDNs with different (albeit similar) delays for L and R. I've tried it. It's utterly uncorrelated and doesn't sound bad, but I'm not sure it's as convincing as something that's panned more accurately.

> Note that this is in terms of the late tail specifically. In practice the way you localise the very first few early echoes can be critical in terms of the spatial impression.

Basically we're using the FDN for the early echos AND late tail.

My use of the head delay makes the early echoes sound panned around you, potentially more realistically than mere amplitude-pan. Meanwhile, once the echoes are diffuse, the delay serves to decorrelate. If you've achieved the goal of each delay outputting white noise after a second or what have you, can our brains pick apart four sources of white noise each with a different delay to each ear? Much less the 8 or 16 you'd use in a real reverb?

> speaker reproduction (where the two signals acoustically mix in the listening space) ends up with too much acoustic comb filtering

Good point; since I was a kid I've wondered why albums didn't have separate headphone and speaker mixes.

That said, unless you've managed to get both ears on the center line (impossible), any mono, centered track over a stereo speaker setup will comb filter yet we don't mind too much. Here, in addition to the dry signal (may be mono and panned center and thus itself combing?) we've got 4 delays (minimum) each with their own delay-pan, and therefore with their own comb. The combs won't align in frequency and indeed would fill in where the main mono source was combing.

Still, I grant your point that if you know the listener has speakers, not headphones, then there's no such thing as too decorrelated. You could put literally separate mono-output FDNs panned hard left and hard right, and your ears will combine it into some kind of scene. But my delay-pan idea might not only be FAR better for phones, but at least A LITTLE better over speakers. I don't know.

BTW curious about your sig?

Post

Swiss Frank wrote: Wed Dec 19, 2018 7:11 am
My short answer is, TRY IT :-D I've done a bunch of different attempts at stereo and while my reverb sucks, the stereo effect seems awesome. Especially nice is being able to assign a MIDI control to it and adjust it from no delay-pan to realistic delay-pan (.5ms) to fantasy delay-pan. Just going from 0 to .25ms is an amazing feeling of it really going stereo, and that is effectively a 90 degree wide soundstage, similar to standing near dead wall with a large space in front of you with little sound coming from sides or back. .5-.66ms opens it to 180 degree soundstage, with some sound apparently (psychoacoustically) seeming to go around your head to reach the other ear.

If this isn't how everyone does it, I think I might have tripped across something new and important.
Have heard this being done with Moore-type reverbs - sepcifically a Dave Haupt Reverb module for SynthEdit way back(can't remeber the year - say 2005-ish), spread was 24samples @44.1kHz, sounded a bit fake to me(especially with headphones), it's a cheap(CPU-wise) way to coax a stereo signal out of that topology without disturbing the echo-density. Would not be surprised if the same teqnique was used in other low-CPU type scenarios. Wouldn't really call it unique per se, but then it depends on your definition of unique, I just call it the Haas effect (from 1951). It might sound a bit less fake in an FDN because the Moore is constant density(and low-density at that), and an FDN increases density like in a room.

That being said, reverb, as used by musicians and not scientists is highly subjective. Some examples, that output mixing matrix you mentioned earlier actually comes from Schroeder's work, and is used in the Quantec Room Simulator/Yardstick, a highly revered reverb. The Bricasti M7 reverb is actually a type of constant-density design(highly dense though) - i.e. something that doesn't happen in real rooms, density always increases, the Bricasti actually increases density up to a point and then stops. And I'm not even gonna mention Eventide's Blackhole.

If it sounds musically useful nothing else really matters. So run with it if it sounds good to you.

Post

Swiss Frank wrote: Wed Dec 19, 2018 7:11 am My short answer is, TRY IT :-D I've done a bunch of different attempts at stereo and while my reverb sucks, the stereo effect seems awesome.
I've done a lot of things too. My current best approach is to arrange the early echoes for each channel in such a way that they effective form delay panned pairs (although with different, usually gradually widening delays for each pair), then let the late tail just become more or less "uniform noise."
Yeah but in a real situation, what you hear IS somewhat correlated. I mean you could use completely separate FDNs with different (albeit similar) delays for L and R. I've tried it. It's utterly uncorrelated and doesn't sound bad, but I'm not sure it's as convincing as something that's panned more accurately.
It's not that the echoes themselves are uncorrelated as such, rather once the echo density and distribution of different directions becomes sufficiently high, the wave field at the listening position is essentially diffuse.

Think about it this way: if you have a swimming pool with still surface and you poke it with a stick at one point, you'll see clear waves emitting from that point and reflecting from the borders. However, if you keep poking that point for a while and then stop, eventually all the different reflections (ie. echoes) become chaotic enough that you can't tell which waves are travelling in which directions. Even if you pick two nearby points on the surface of the pool, the surface movement at one of the points is no longer a good predictor of the surface movement at the other point.

The same thing happens with acoustic waves in three dimensions as well: for the first few echoes, it's fairly easy to tell the direction and the signal IS correlated, but after a while there's so many echoes that you effectively just have two independent signals at each ear. That's the theory anyway.
Basically we're using the FDN for the early echos AND late tail.
In my old Tila that's what I did (although it was my first real reverb and far from ideal). For output I used a variation of the "decorrelation" scheme, but then tuned the delays in such a way that the very first echoes would form sensible panning pairs anyway. Even if you are actually producing early and late echoes using the same technical mechanism, you can still think about them separately.

That said, my experience with Tila taught me that if you want to have some hope of actually fine-tuning the smaller details of reverb, then choosing an algorithm other than FDN is probably a good idea. YMMV.
That said, unless you've managed to get both ears on the center line (impossible), any mono, centered track over a stereo speaker setup will comb filter yet we don't mind too much. Here, in addition to the dry signal (may be mono and panned center and thus itself combing?) we've got 4 delays (minimum) each with their own delay-pan, and therefore with their own comb. The combs won't align in frequency and indeed would fill in where the main mono source was combing.
My point was: make sure to test it on a decent speaker setup (and multiple different sets of headphones). When it comes to reverbs, different things work on headphones and speakers; typically you want to aim for something that works with both.

Post Reply

Return to “DSP and Plugin Development”