# Linea di delay digitale

Una linea di delay digitale, (o semplicemente delay line, chiamata anche delay filter) è un filtro digitale che ritarda un segnale di un certo numero di campioni. Se tale ritardo è di un numero non intero di campioni minore di uno, si parla specificatamente di una delay line frazionaria (anche chiamata interpolated delay line o fractional delay filter). Nel digital signal processing, è comune modellizzare un ritardo arbitrario di campioni come la serie di una delay line a ritardo intero e un fractional delay filter.
Le digital delay lines sono blocchi funzionali diffusi nella modellizzazione e simulazione acustica degli ambienti, strumenti musicali ed effetti digitali. Un'applicazione comune delle delay lines sono le digital waveguide synthesis, che possono essere usate come strumento di sintesi musicale per diversi tipi di strumenti, quali strumenti a corda o a fiato. Per implementare effetti digitali è standard d'industria usare uno schema di Dattorro, che fa uso di fractional delay lines.

## Teoria

La delay line standard con ritardo intero è derivata dalla trasformata ${\mathcal {Z}}$ di un segnale a tempo discreto $x$ ritardato di $M$ campioni:
    $y[n]=x[n-M]$ ${\xrightarrow[]{\mathcal {Z}}}$ $Y(z)=\overbrace {z^{-M}} ^{H_{M}(z)}X(z)$
In questo caso, $z^{-M}=H_{M}(z)$ è la delay line intera con le seguenti caratteristiche:
    ${\begin{cases}|\centerdot |=1=0dB&{\text{modulo a zero dB}}\\\measuredangle =-\omega M,&{\text{fase lineare con }}\omega =2\pi fT_{s}{\text{ dove }}T_{s}{\text{ è il periodo di campionamento in secondi }}[s]\end{cases}}$
La corrispondente risposta impulsiva nel dominio discreto nel tempo non è altro che la trasformata ${\mathcal {Z}}$ inversa di $H_{M}(z)$, la quale è un semplice impulso traslato di $M$ campioni:
    $h_{m}[n]={\begin{cases}{\text{1}}&{\text{for }}n=M\\0&{\text{for }}n\neq M\end{cases}}$
Nel caso di ritardo frazionario, il discorso diventa più complicato. Nella sua forma teorica più generica, una delay line con ritardo frazionario è definita come una delay line standard con ritardo $D\in \mathbb {R}$, modellato come la somma di una componente intera $M\in \mathbb {Z}$ e di una componente frazionaria $d\in \mathbb {R}$ minore di un campione:
    $H_{D}(z)=z^{-D}\;\;\;\;\;{\text{where}}\;\;\;\;\;D=\overbrace {\lfloor D\rfloor } ^{M}+\overbrace {(D-\lfloor D\rfloor )} ^{d}$
Questa è la rappresentazione in dominio ${\mathcal {Z}}$ di un problema di filter design non banale: la soluzione è una qualsiasi risposta all'impulso che rappresenti o approssimi la trasformata ${\mathcal {Z}}$ inversa di $H_{D}(z)$.

## Soluzione (Design di filtri)
### Soluzione ingenua

La soluzione concettualmente più semplice si ottiene campionando la soluzione continua, banale per ogni valore di ritardo anche frazionario. Dato un segnale continuo $x$ ritardato di $D\in \mathbb {R}$ campioni, o $\tau =DT_{s}$ secondi:
    $y(t)=x(t-D)$ ${\xrightarrow[]{\mathcal {F}}}$ $Y(\omega )=\overbrace {e^{-j\omega D}} ^{H_{ideal}(\omega )}X(\omega )$
In questo caso, $e^{-j\omega D}=H_{ideal}(\omega )$ è il filtro a ritardo frazionario nel dominio continuo del tempo con:${\begin{cases}|\centerdot |=1=0dB&{\text{zero dB gain}}\\\measuredangle =-\omega D&{\text{ fase lineare }}\\\tau _{gr}=-{d\measuredangle \over {d\omega }}=D&{\text{group delay costante}}\\\tau _{ph}=-{\measuredangle \over {\omega }}=-D&{\text{phase delay costante}}\end{cases}}$
La soluzione ingenua per il filtro campionato $h_{ideal}[n]$ è semplicemente la trasformata inversa di $H_{ideal}(\omega )$ campionata, che produce un filtro IIR non-causale a forma di Seno Cardinale $sinc$ traslato di $D$. $h_{ideal}[n]={\mathcal {F}}^{-1}[H_{ideal}(\omega )]={1 \over {2\pi }}\int \limits _{-\pi }^{+\pi }e^{j\omega D}e^{j\omega n}d\omega =sinc(n-D)={sin(\pi (n-D)) \over {\pi (n-D)}}$ Il $sinc$ continuo è traslato del ritardo frazionario, mentre viene campionato dentro la griglia del piano cartesiano. Di conseguenza:
* quando il ritardo è un numero intero di campioni, $D\in \mathbb {N}$, il $sinc$ traslato e campionato degenera a un semplice impulso traslato, come da soluzione teorica.
* quando il ritardo è un numero frazionario di campioni, $D\in \mathbb {R}$, il $sinc$ traslato e campionato produce un filtro IIR non-causale, che non è implementabile nella pratica.

### FIR causale troncato

La soluzione realizzabile concettualmente più semplice si ottiene semplicemente troncando la soluzione ingenua sopra.
    $h_{\tau }[n]={\begin{cases}sinc(n-D)&{\text{per }}0\leq n\leq N\\0&{\text{altrove}}\end{cases}}$
    $\;\;\;\;\;{\text{dove}}\;\;\;\;\;$
    ${N-1 \over {2}}<D<{N+1 \over {2}}\;\;\;\;\;{\text{e}}\;\;\;\;\;N\;{\text{ è l'ordine del filtro.}}$
Troncare la risposta all'impulso potrebbe causare instabilità, per mitigare la quale si possono usare una serie di tecniche:
* Filtrare la risposta all'impulso troncata con una finestra, con l'obiettivo di "ammorbidirla". In questo caso dobbiamo aggiungere un ulteriore traslazione $L$ per allineare la finestra e il $sinc$, così da filtrare simmetricamente.
    $h_{\tau }[n]={\begin{cases}w(n-D)sinc(n-D)&{\text{ per }}L\leq n\leq L+N\\0&{\text{ altrove}}\end{cases}}$
dove
    $L={\begin{cases}round(D)-{N \over {2}}&{\text{per }}N{\text{ pari}}\\\lfloor D\rfloor -{N-1 \over {2}}&{\text{per }}N{\text{ dispari}}\end{cases}}$
* Metodo General Least Square (GLS) → adatta iterativamente la risposta in frequenza filtrando un design Least Square Integral Error, minimizzando lo LSIE tra la risposta in fraquenza ideale e quella troncata. È definito come:
    $E_{LS}={1 \over {2\pi }}\int \limits _{-\alpha \pi }^{\alpha \pi }w(\omega )|H_{D}^{truncated}(e^{j\omega })-H_{D}^{id}(e^{j\omega })|^{2}d\omega$
dove
    $0<\alpha \leq 1{\text{ è il parametro di larghezza passabanda}}$
* Interpolatore di Lagrange (Maximally Flat Fractional Delay Filter) → aggiunge vincoli di "appiattimento" per le prime N derivate del Least Square Integral Error. Questo metodo è di particolare interesse in quanto la letteratura fornisce una soluzione in formula chiusa:
    $h_{D}[n]=\prod _{k=0,\;k\neq n}^{N}{D-k \over {n-k}}\;\;\;\;\;{\text{dove}}\;\;\;\;\;0\leq n\leq N$
Segue una tabella dell'espansione della formula per filtri di ordine fino a $N=3$:
Espansione della formula di interpolazione di Lagrange :
| | $h_{\tau }[0]$ | $h_{\tau }[1]$ | $h_{\tau }[2]$ | $h_{\tau }[3]$ |
| N = 1 | $1-D$ | $D$ | - | - |
| N = 2 | ${(D-1)(D-2) \over {2}}$ | $-D(D-2)$ | ${D(D-1) \over {2}}$ | - |
| N = 3 | $-{(D-1)(D-2)(D-3) \over {6}}$ | ${D(D-2)(D-3) \over {2}}$ | $-{D(D-1)(D-3) \over {2}}$ | ${D(D-1)(D-2) \over {6}}$ |

### Soluzione passa-tutto IIR a fase approssimata

Un altro approccio consiste nel design di un filtro IIR di ordine $N$ con una struttura in trasformata ${\mathcal {Z}}$ che lo forza a essere passa-tutto, approssimando un ritardo frazionario $D$:
    $H_{D}(z)={z^{-N}A(z) \over {A(z^{-1})}}={a_{N}+a_{N-1}z^{-1}+...+a_{1}z^{-(N-1)}+z^{-N} \over {1+a_{1}z^{-1}+...+a_{N-1}z^{-(N-1)}+a_{N}z^{-N}}}$
che ha
    ${\begin{cases}|\centerdot |=1=0dB&0dB{\text{ gain}}\\\measuredangle _{H_{D}(z)}=-N\omega +2\measuredangle _{A(z)}=-D\omega &{\text{valore obiettivo per }}D\end{cases}}$
I poli e zeri di $A(z){\text{ and }}A(z^{-}1)$ rispettivamente sono strutturalmente reciproci, e hanno l'effetto di appiattire la risposta in frequenza |$|\centerdot |$ , mentre la fase è calcolata in funzione della fase di $A(z)$. Di conseguenza, il problema si semplifica nel design di un filtro FIR $A(z)$, ossia trovare i suoi coefficienti $a_{k}$ come funzioni di D (ricordare che $a_{0}=1$ sempre), tali che la fase approssimi il valore obiettivo di $\measuredangle _{H_{D}(z)}=-D\omega$.
Il problema si può risolvere nel seguente modo:
* Minimizzazione iterative del Least Square Phase Error, definito come:
    $E_{LS}={1 \over {2\pi }}\int \limits _{-\pi }^{\pi }w(\omega )|\underbrace {\underbrace {-D\omega } _{\measuredangle _{ID}}-\underbrace {(-N\omega +2\measuredangle _{A(z)})} _{\measuredangle _{H}}} _{\Delta \measuredangle _{H_{D}}}|^{2}d\omega$
* Minimizzazione iterativa del of Least Square Phase Delay Error, definito come:
    $E_{LS}={1 \over {2\pi }}\int \limits _{-\pi }^{\pi }w(\omega )|{{\Delta \measuredangle _{H_{D}}} \over {\omega }}|^{2}$
* Filtro Passa-Basso Tutti-Polei di Thiran con Group Delay Massimamente Piatto → offre una formula chiusa per trovare i coefficienti $a_{k}$ per ritardi positivi $D>0$:
    $a_{k}=(-1)^{k}{\binom {N}{k}}\prod _{l=0}^{N}{D+l \over {D+k+l}}$
dove
    ${\binom {n}{k}}={N! \over {k!(N-k)!}}$
Segue una tabella dell'espansione della formula sopra calcolata per filtri di ordine fino a $N=3$:
Thiran All-Pole Low-Pass Filter Coefficients Formula Expansion :
| | $a_{0}$ | $a_{1}$ | $a_{2}$ | $a_{3}$ |
| N = 1 | 1 | $-{D-1 \over {D+1}}$ | - | - |
| N = 2 | 1 | $-2{D-2 \over {D+1}}$ | ${(D-1)(D-2) \over {(D+1)(D+2)}}$ | - |
| N = 3 | 1 | $-3{D-3 \over {D+1}}$ | $3{(D-2)(D-3) \over {(D+1)(D+2)}}$ | $-{(D-1)(D-2)(D-3) \over {(D+1)(D+2)(D+3)}}$ |

## Storia commerciale

Le prime digital delay lines vennero usate nel 1973 al Summer Jam at Watkins Glen di New York, per compensare il ritardo di propagazione del suono nell'aria proveniente dalle torri di diffusione, in quel caso molto distanti tra loro nella vasta area dedicata al pubblico, almeno 600,000 persone. La società del New Jersey Eventide fornì delle delay lines capaci di 200 millisecondi di ritardo, adatte a ritardare le quattro torri di diffusione dei 175 millisecondi necessari a compensare il ritardo del suono nei 60 metri che le distanziavano dal palco. Altre dieci torri di diffusione, sei a 120 metri e quattro a 180 metri furono ritardate con la stessa tecnica di 350 e 525 millisecondi rispettivamente. Ogni modulo Eventide DDL 1745 conteneva parecchi circuiti integrati di registri a scorrimento a 1000-bit e costava l'equivalente di un'auto nuova.