Dattorro industry scheme

From testwiki
Jump to navigation Jump to search

Template:Short description

Dattorro block diagram

The Dattorro industry scheme is a digital system used to implement a wide range of delay-based audio effects for digital signals. It was proposed by Jon Dattorro.[1] The common nature of these effects allows to produce an output signal as the linear combination of (dynamically modulated) delayed replicas of the input signal. The proposed scheme allows to implement such effects in a compact form, only using a set of three parameters to control the type of effect.

The Dattorro industry scheme is based on digital delay lines and to ensure a proper resolution in the time domain, it leverages fractional delay lines, thus avoiding discontinuities.[2]

The effects that this scheme is able to produce are: echo, chorus, vibrato, flanger, doubling, white chorus. These effects are characterized by a nominal delay, a modulating function for the delay and the depth of modulation.[3]

Delay line interpolation

Consider continuous time signal y(t). The τ-delayed version of such signal is y(t)=x(tτ). Considering the signal in the discrete time domain (i.e., sampling it with sampling frequency Fs at n=tFs), we obtain y[n]=x[nM]. The delay line can then be described in terms of the Z-transform of the discrete time signal as

Y(z)=𝒵{y}(n)=zMX(z)=HM(z)X(z).

When going back in the time domain exploiting the inverse Z-transform, this corresponds to hm[n]=δ[nM], where δ[] is the Dirac delta. The former equation holds for D but for the implementation we need a fractional delay, meaning D=D+(DD)=M+d,d, 0<d<1. In this case, interpolation is required to reconstruct the value of the signal that lies between two samples.[4] One can resort to the preferred interpolation technique, e.g., Lagrange interpolation,[5] or all-pass interpolation.[6]

Linear interpolator block diagram
All-pass interpolator block diagram

Block diagram

The output of the delay block HM(z)=zM is noted above and below as rarely it is taken from the last sample of the tap but instead it changes dynamically. Considering the end to end structure, we can write the filter as:

Dattorro scheme

Y(z)=H(z)X(z)=b+ffzD(t)1+zD(t)fbX(z)

Setting the coefficients according to the desired effect results in a change of the filter topology. For example, setting the feedback to 0 results in a FIR filter, whereas, if the coefficients are set to be equal, we approximate an all-pass filter.[1]

File:Guitar string E2.ogg File:Echo effect.ogg File:Vibrato effect.ogg File:Flanger effect.ogg File:Doubling effect.ogg File:Chorus effect.ogg File:White chorus effect.ogg

Effects

All the effects can be obtained by changing the parameters of the Dattorro system and by setting the delay ranges according to the following table. Delay values are expressed in milliseconds.[1]

Effect Onset Nominal Range End
Vibrato 0 Minimal 5
Flange 0 1 10
Chorus 1 5 30
Doubling 10 20 100
Echo 50 80

Vibrato

Vibrato is a small quasi-periodic change in pitch of a tone. It's more of a technique than an effect per se but can be added to any audio signal.[7] The delay is modulated with a low frequency sinusoidal function and no mix of the direct path of the signal is considered.

Chorus

The chorus is an effect which tries to emulate multiple independent voices playing in unison. This effect is made as a linear combination of the input signal (dry signal) and a dynamically delayed version of the input (wet signal).[8]

Flanging

The flanging effect originated with tape machines. This effect was created by mixing two tape machines set to play the same track but one of them is slowed down. This produces a lowering in pitch and a delay of the slow track. The process is then repeated with the other track reabsorbing the accumulated delay.[9] This effect is very similar to chorus and the main difference is due to the delay range. Chorus usually has longer delay, larger depth and lower modulating frequency.[7]

White chorus

White chorus is a modification to the standard chorus effect aimed at reducing the aberrations introduced by the forward path. The change consists in adding a negative feedback path with a different and fixed tap point in order to obtain an approximation of an all-pass configuration.[1]

Doubling

When the system is used without feedback we achieve doubling. This effect is analogous to that of the Leslie speaker, a particular kind of speaker consisting of a rotating chamber in front of the bass loudspeaker and rotating cones above the treble loudspeakers .[10]

Knob settings

Effect Blend b Feedforward ff Feedback fb Modulation type D(t)
Vibrato 0.0 1.0 0.0 sinusoid
Flanger 0.7071 0.7071 0.7071 sinusoid
White chorus 0.7071 1.0 0.7071 low pass noise
Chorus 1.0 0.7071 0.0 low pass noise
Doubling 0.7071 0.7071 0.0 low pass noise
Echo 1.0 1.0 <1.0 none

Pseudocode

The filter can be implemented in software or hardware. In the following is the pseudocode for a software Dattorro system.

function dattorro is
    input: x,                                   Template:Color
           Fs,                                  Template:Color
           depth,                               Template:Color
           freq,                                Template:Color
           b,                                   Template:Color
           ff,                                  Template:Color
           fb,                                  Template:Color
           mod                                  Template:Color
    output: y                                   Template:Color

    depth_samples = depth·Fs                    Template:Color
    if mod is sinusoid                          Template:Color
        delay_seq = depth_samples*(1 + sin(2·π·freq*t))
    else mod is noise
        lowpass_noise = noise_gen()             Template:Color
        delay_seq = depth_samples + depth_samples·lowpass_noise
    
    for each n of the N samples

        d_int = floor(delay_seq(n))             Template:Color
        d_frac = delay_seq(n) - d_int           Template:Color        
        h0 = (d_frac - 1)·(d_frac - 2)/2        Template:Color
        h1 = d_frac·(2 - d_frac)                Template:Color
        h2 = d_frac/2·(d_frac - 1)              Template:Color
        
        x_d = delay_line(d_int + 1)·h0 + delay_line(d_int + 2)·h1 + delay_line(d_int + 3)·h2  Template:Color                                       
        
        f_b = fb·x_d                            Template:Color
        delay_line(2:L) = delay_line(1:L-1)     Template:Color
        delay_line(1) = x(i) - fb_comp
        
        f_f = ff·x_d                            Template:Color
        blend_comp = b·delay_line(1)            Template:Color

        y(n) = ff_comp + blend_comp             Template:Color
  
    return y

See also

References

Template:Reflist

Further reading

Template:Electronic filters