Algoritmo di Levinson-Durbin

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

L'algoritmo di Levinson-Durbin, in algebra lineare, serve per calcolare, con metodo ricorsivo, la soluzione di un'equazione che coinvolge una matrice di Toeplitz. L'algoritmo viene eseguito in passi, il che rappresenta un forte miglioramento rispetto al Metodo di eliminazione di Gauss, il quale richiede passaggi.

L'algoritmo Levinson–Durbin fu proposto prima da Norman Levinson, nel 1947, e migliorato da James Durbin nel 1960; successivamente fu ulteriormente migliorato, portandolo da fino a moltiplicazioni, da W. F. Trench e S. Zohar, rispettivamente.

Altri metodi per elaborare i dati, includono la decomposizione di Schur e la decomposizione di Cholesky. In confronto a questi, la ricorsione di Levinson (in particolare la ricorsione di Levinson suddivisa) tende a essere più veloce dal punto di vista computazionale, ma più sensibile a inesattezze computazionali come gli errori di arrotondamento.

L'algoritmo di Bareiss per le matrici di Toeplitz (da non confondere con l'algoritmo di Bareiss generale) è veloce quanto la ricorsione di Levinson-Durbin, ma utilizza passaggi, mentre la ricorsione di Levinson-Durbin richiede solo passaggi. L'algoritmo di Bareiss, tuttavia, è numericamente stabile,[1][2] mentre la ricorsione di Levinson-Durbin, nella migliore delle ipotesi, è solo debolmente stabile (cioè mostra stabilità numerica per sistemi lineari ben condizionati).[3]

Gli algoritmi più recenti, chiamati algoritmi di Toeplitz asintoticamente veloci o, in alcuni testi, superveloci, possono risolvere il problema in per vari (es. ,[4][5] [5]). La ricorsione di Levinson-Durbin rimane popolare per diversi motivi; primo, è relativamente facile da comprendere; inoltre, può essere più veloce di un algoritmo superveloce per piccoli (di solito ).[6]

Derivazione[modifica | modifica wikitesto]

Introduzione[modifica | modifica wikitesto]

Le equazioni matriciali sono della seguente forma:

L'algoritmo di Levinson-Durbin può essere usato per qualsiasi equazione, purché sia una matrice di Toeplitz nota, con diagonale principale diversa da zero; dove è il vettore noto, mentre è il vettore incognito di numeri da determinare.

Si consideri un vettore composto interamente da zeri, a eccezione del suo termine i-esimo, il quale contiene un valore unitario. La sua lunghezza sarà implicitamente determinata dal contesto. Il termine si riferisce alla larghezza della matrice avente dimensioni . Infine, gli apici fanno riferimento a un indice induttivo, mentre i pedici indicano gli indici. Per esempio (e definizione) la matrice è una matrice che copia il blocco in alto a sinistra da , ovvero .

Pertanto, anche è una matrice di Toeplitz; nel senso che può essere scritta nella seguente forma:

Passaggi introduttivi[modifica | modifica wikitesto]

L'algoritmo procede seguendo due passaggi. Nel primo passaggio vengono stabiliti due gruppi di vettori, chiamati vettori avanti e indietro. I vettori avanti sono usati per aiutare a ottenere l'insieme dei vettori indietro; pertanto, possono essere immediatamente scartati. Viceversa, i vettori all'indietro sono necessari per il secondo passaggio, dove vengono utilizzati per creare la soluzione desiderata.

La ricorsione di Levinson-Durbin definisce l'ennesimo "vettore avanti", chiamato , un vettore di lunghezza n che soddisfa l'equazione:

L'ennesimo "vettore indietro", chiamato è definito in modo analogo; è il vettore di lunghezza n che soddisfa l'equazione:

Una semplificazione importante può verificarsi quando è una matrice simmetrica; in questo caso i due vettori sono correlati da , ovvero sono le inversioni di riga l'uno dell'altra. Questo può risparmiare alcuni calcoli in questo caso particolare.

Ottenere i vettori indietro[modifica | modifica wikitesto]

Anche se la matrice non è simmetrica, l'ennesimo vettore avanti e indietro può essere trovato dai vettori di lunghezza come segue. Innanzitutto, il vettore indietro può essere "esteso" con uno zero al fine di ottenere:

Andando da a , la colonna aggiuntiva aggiunta alla matrice non disturba la soluzione quando si usa uno zero per estendere il vettore in avanti. Tuttavia, la riga aggiuntiva aggiunta alla matrice ha perturbato la soluzione; e ha creato un termine di errore indesiderato εf che si verifica in ultimo luogo. L'equazione precedente fornisce il valore di:

Questo errore verrà restituito a breve ed eliminato dal nuovo vettore avanti; ma prima, il vettore all'indietro deve essere esteso in modo simile (anche se invertito). Per il vettore all'indietro si ha:

Come prima, la colonna aggiuntiva alla matrice non disturba questo nuovo vettore all'indietro; ma la riga aggiuntiva lo fa. Qui si ha un altro errore indesiderato pari a:

Questi due termini di errore possono essere utilizzati per formare vettori avanti e indietro di ordine superiore descritti come segue. Usando la linearità delle matrici, la seguente identità vale per tutti gli :

Se e sono scelti in modo destrorso o , allora la quantità in parentesi sarà pari alla definizione dell'ennesimo vettori avanti o indietro, rispettivamente. Con la scelta dei termini e , la somma dei vettori tra parentesi è semplice e produce il risultato desiderato.

Per trovare questi coefficienti, , devono essere tali che:

e, rispettivamente, , sono tali che:

Moltiplicando e dividendo le precedenti equazioni per si ottiene la seguente equazione:

Ora, tutti gli zeri dei due vettori sopra vengono ignorati, rimane solo la seguente equazione:

Con questi soluzione (utilizzando la formula inversa della matrice di Cramer ), i nuovi vettori avanti e indietro sono:

L'esecuzione di queste sommatorie vettoriali, quindi, dà gli ennesimi vettori avanti e indietro partendo da quelli precedenti. Non resta che trovare il primo di questi vettori, quindi con rapide somme e moltiplicazioni rapide si ottengono i termini restanti. I primi vettori avanti e indietro sono semplicemente:

Utilizzo dei vettori all'indietro[modifica | modifica wikitesto]

I passaggi precedenti danno agli N vettori all'indietro per . Da lì, un'equazione più arbitraria è:

La soluzione può essere costruita nello stesso modo ricorsivo in cui sono stati costruiti i vettori all'indietro. Di conseguenza, deve essere generalizzato a una sequenza di intermedi, tali che .

La soluzione viene quindi costruita ricorsivamente notando che, se

allora, inserendo nuovamente uno zero al termine del vettore, e definendo una costante di errore dove necessario, si ha:

Possiamo quindi utilizzare l'ennesimo vettore all'indietro per eliminare l'errore e sostituirlo con la formula desiderata come segue:

L'estensione di questo metodo fino a quando produce la soluzione desiderata .

In pratica, questi passaggi vengono spesso eseguiti in concomitanza con il resto della procedura, formando un'unità coerente e meritano di essere trattati singolarmente.

Algoritmo di Levinson-Durbin[modifica | modifica wikitesto]

Se non è una matrice di Toeplitz in senso stretto, ma una matrice a blocchi di Toeplitz, la ricorsione di Levinson può essere derivata più o meno allo stesso modo considerando la sottomatrice di Toeplitz (Musicus 1988).

Le matrici con blocchi di Toeplitz sorgono naturalmente negli algoritmi di elaborazione del segnale quando si trattano flussi di segnali multipli (per esempio nei sistemi MIMO) o segnali ciclostazionari.

Applicazione pratica dell'algoritmo di Levinson-Durbin[modifica | modifica wikitesto]

L'algoritmo di Levinson-Durbin è molto utilizzato per la risoluzione dei modelli autoregressivi di ordine (utilizzati nel protocollo GSM), i quali si presentano sotto la seguente equazione alle differenze:

dove è il campione attuale del sistema stimato tramite il modello , sono i parametri del modello, i quali vengono applicati ai suoi campioni precedenti, o - analogamente - definiscono la memoria del modello (in questo caso di ordine ). Infine è il residuo di predizione del campione che si desidera minimizzare, ovvero: la componente non predicibile del sistema.

Queste equazioni si presentano sotto forma di matrici di Toeplitz, pertanto per la loro soluzione si ricorre all'algoritmo di Levinson-Durbin.

Pseudocodice per la ricorsione Levinson-Durbin[modifica | modifica wikitesto]

L'algoritmo si basa sul calcolo dei coefficienti autoregressivi di matrici di ordine crescente. Si divide in due fasi: una prima di inizializzazione per il calcolo del parametro o - che è lo stesso - per il caso elementare della matrice . Successivamente, si procede con il calcolo iterativo dei parametri per matrici di ordine via, via crescente , ,..., .

Utilizzando la notazione MATLAB/Octave, il pseudocodice per il calcolo della ricorsione di Levinson-Durbin è il seguente[7]:

k = M(2) / M(1);                                    % Stima il primo elemento 
x = k;
E = (1 - k2) * M(1);                                % Calcola l'errore quadratico medio
for i = 2:p
    k = (M(i + 1) - x * M(2:i)) / E;                % Coefficienti di riflessione
    x = [k, x - k * x(i-1:-1:1)];                   % Stima gli elementi successivi
    E = (1 - k2) * E;                               % Aggiorna l'errore quadratico medio
end

x = [1, - x(N:-1:1)];                               % Restituisce vettore incognito

Da sottolineare che MATLAB opera con vettori e matrici, pertanto - volendo tradurre il codice in linguaggi come C++ o Java, si otterranno due cicli for annidati.

Note[modifica | modifica wikitesto]

  1. ^ Adam W. Bojanczyk, Brent, R. P., De Hoog, F. R., & Sweet, D. R., On the stability of the Bareiss and related Toeplitz factorization algorithms, in SIAM Journal on Matrix Analysis and Applications, vol. 16, n. 1, 1995, pp. 40-57.
  2. ^ Brent, Richard P., Stability of fast algorithms for structured linear systems, in Fast reliable algorithms for matrices with structure, Society for Industrial and Applied Mathematics, 1999, pp. 103-116.
  3. ^ Hari Krishna, Yunbiao Wang, The split Levinson algorithm is weakly stable, in SIAM journal on numerical analysis, vol. 30, n. 5, 1993, pp. 1498-1508.
  4. ^ Bojanczyk, Adam W., Richard P. Brent, e Frank R. De Hoog, A weakly stable algorithm for general Toeplitz systems, in Numerical Algorithms, vol. 1, arXiv: 1005.0503, 2010, pp. 225-244.
  5. ^ a b Stewart, Michael, A superfast Toeplitz solver with improved numerical stability, in SIAM journal on matrix analysis and applications, vol. 25, n. 3, 2003, pp. 669-693.
  6. ^ Ammar, Gregory S. e William B. Gragg, Superfast solution of real positive definite Toeplitz systems, in SIAM Journal on Matrix Analysis and Applications, vol. 9, n. 1, 1988, pp. 61-76.
  7. ^ Giacomo Alessandroni, Analisi e Modelli per il Monitoraggio del Manto Stradale (PDF), 2016, p. 42, DOI:10.13140/RG.2.1.2935.5283. URL consultato l'11 ottobre 2019.

Bibliografia[modifica | modifica wikitesto]

Fonti per le definizioni

  • Levinson, N. (1947). "The Wiener RMS error criterion in filter design and prediction." J. Math. Phys., v. 25, pp. 261–278.
  • Durbin, J. (1960). "The fitting of time series models." Rev. Inst. Int. Stat., v. 28, pp. 233–243.
  • Trench, W. F. (1964). "An algorithm for the inversion of finite Toeplitz matrices." J. Soc. Indust. Appl. Math., v. 12, pp. 515–522.
  • Musicus, B. R. (1988). "Levinson and Fast Choleski Algorithms for Toeplitz and Almost Toeplitz Matrices." RLE TR No. 538, MIT. [1]
  • Delsarte, P. and Genin, Y. V. (1986). "The split Levinson algorithm." IEEE Transactions on Acoustics, Speech, and Signal Processing, v. ASSP-34(3), pp. 470–478.

Lavori futuri

Sintesi

  • Bäckström, T. (2004). "2.2. Levinson–Durbin Recursion." Linear Predictive Modelling of Speech – Constraints and Line Spectrum Pair Decomposition. Doctoral thesis. Report no. 71 / Helsinki University of Technology, Laboratory of Acoustics and Audio Signal Processing. Espoo, Finland. [3]
  • Claerbout, Jon F. (1976). "Chapter 7 – Waveform Applications of Least-Squares." Fundamentals of Geophysical Data Processing. Palo Alto: Blackwell Scientific Publications. [4]
  • WH Press, SA Teukolsky, WT Vetterling e BP Flannery, Section 2.8.2. Toeplitz Matrices, in Numerical Recipes: The Art of Scientific Computing, 3rd, New York, Cambridge University Press, 2007, ISBN 978-0-521-88068-8.
  • Golub, G.H., and Loan, C.F. Van (1996). "Section 4.7 : Toeplitz and related Systems" Matrix Computations, Johns Hopkins University Press

Voci correlate[modifica | modifica wikitesto]

  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica