La convoluzione: calcolo analitico
Esempio di calcolo analitico dell’operazione di convoluzione .
Assegnate la sequenza di input e la sequenza risposta all’impulso, occorre considerare le sequenze sull’indice k,la prima come x[k] e la sequenza h[n-k] come sequenza in k , foldata e shiftata di n, cioè h[-k +n] =h[-(k-n)].
Si procede poi alla somma dei prodotti dei campioni di posto omologo della sequenza input e della sequenza h foldata e shiftata.
In molti casi il calcolo della covoluzione comporta la valutazione di serie geometriche del tipo:
con a<1
con N2 ≥ N1
Un esempio molto significativo di calcolo analitico della covoluzione è l’ esempio 2.13 del capitolo 2 di Oppenheim – Schafer –Buck.
Esempio: assegnate x[n]= {1, 2, 3, 4}, di lunghezza M=4 e h[n]={1, 0, 2, 1}, anch’essa di lunghezza N=4, i campioni della convoluzione sono in totale 4+4-1, e si otterranno secondo lo schema che segue, che è alla base di un prodotto matriciale.
Occorre costruire una matrice C di M+N-1 righe e N colonne.
Fissato e visualizzato x[n], come su di un nastro, consideriamo h[-n ]come su un altro nastro scorrevole dove possa shiftare verso destra
Immaginare che ogni riga della matrice C si riempie con i valori di h[-n] ad ogni shift di h[-n] verso destra. Ogni volta che si fa uno shift si riempie una riga della matrice C. Si procede così fino a che non si esauriscono tutti i valori della sovrapposizione dei due segnali x[n] ed h[-n].
Quindi, la prima riga conterrà il primo elemento di h[-n], la seconda conterrà il primo e il secondo, la terza il primo il secondo e il terzo e così via.
Moltiplicando righe per colonne la matrice C per x[n]‘ (come vettore colonna) , si otterranno i campioni della convoluzione.
La matrice C è una matrice ‘circolante’ , infatti se guardata per colonne si vede che i valori shiftano verso il basso, spostandosi di un elemento alla volta, su ogni colonna, fino a collocare i campioni di h[n] sull’ultima colonna.
In Matlab si può generare la matrice C con una matrice di Toeplitz, dove però occorre dichiarare due vettori a e b. il primo conterrà tutti gli elementi di h[n] + tanti zeri per arrivare ad un numero di righe pari M+N-1. Per il secondo vettore è necessario solo il primo elemento di h[n] ed i successivi elementi saranno tanti zeri quanti sono gli elementi di x[n] -1.
C=toeplitz([1 0 2 1 0 0 0],[1 0 0 0 ])
C =
1 0 0 0
0 1 0 0
2 0 1 0
1 2 0 1
0 1 2 0
0 0 1 2
0 0 0 1
xn=[1 2 3 4];
convoluzione=C*xn’
convoluzione =
1
2
5
9
8
11
4
Verificare il risultato con la function conv di matlab.
La function conv(a,b) di matlab dà in sostanza i coefficienti del polinomio prodotto di due polinomi i cui coefficienti sono rappresentati dai valori di a e b.
Convolvere un segnale sinusoidale rumoroso con un segnale rettangolare produce un effetto di attenuazione del rumore. Vengono attenuate le variazioni rapide del segnale e conservate quelle lente. Vedremo poi, questo comportamento nel dominio delle frequenze, come un’azione di filtraggio.
Adesso osserviamo l’effetto qualitativo su un segnale sinusoidale con rumore. Il segnale sinusoidale ha tre cicli su 128 campioni, f=3/128.
Risultato della convoluzione tra segnale sinusoidale con rumore
yn=sin(2*pi*3*(1/128:1/128:1))+randn(1,128);
e un impulso rettangolare rett=[zeros(1,5) ones(1,20) zeros(1,5)];
La Correlazione è un altro strumento interessante per l’analisi dei segnali nel dominio del tempo. In particolare per stabilire il grado di somiglianza tra due segnali, oppure riconoscere la presenza di un’eco nel rumore come nel caso di un segnale radar.
Ricordiamo la definizione.
Dati due segnali discreti, x[n], di N campioni e z[n] di M campioni, si definisce correlazione delle due sequenze la sequenza oppure
.
Vale anche per essa la proprietà commutativa e il numero dei suoi campioni è N+M-1 come nella convoluzione.
Caso tempo continuo
Un segnale è shiftato rispetto all’altro.
La quantità di shift dà la posizione della funzione di correlazione.
Ciascun elemento di un segnale è moltiplicato per il corrispondente elemento dell’altro.
Viene fatto l’integrale dell’area sotto la curva.
Si continua con shift, prodotti e accumulazione fino ad esaurire le sovrapposizioni dei due segnali.
Caso tempo discreto
La procedura è analoga, ma viene fatta una sommatoria invece dell’integrale.
La correlazione richiede una notevole quantità di calcoli.
Se un segnale è di lunghezza N e l’altro è di lunghezza M, abbiamo bisogno di N x M moltiplicazioni per calcolare l’intera funzione di correlazione e dobbiamo anche accumulare i prodotti.
È possibile fare la correlazione di un segnale con se stesso, in tal caso si parla di autocorrelazione.
In questo caso la correlazione è massima,perché la somiglianza è massima.
Nel caso di due segnali diversi si parla di cross-correlation. L’operazione si può anche realizzare graficamente come nella convoluzione, ma non si deve fare il ‘time reversal’ di uno dei due segnali. Vedi slide precedente.
Per il calcolo della funzione di correlazione si può procedere con il calcolo matriciale, con le matrici circolanti, (toeplitz), come nel caso della convoluzione, oppure in maniera più veloce con la function xcorr di matlab.
Vedere l’help di xcorr per le opzioni del calcolo in matlab.
Correlazione per:
1. Visualizzare un segnale deterministico nel rumore.
2. Localizzare un segnale noto.
3. Cross-correlazione per identificare un segnale.
Nella slide che segue sono riportati due esempi di autocorrelazione.
Il primo relativo a un segnale di rumore random e il secondo relativo ad un segnale periodico.
Come detto precedentemente sono evidenti i massimi della correlazione dei segnali con se stessi dove lo shift è zero.
Per tutti gli altri shift i valori sono minori.
Il segnale di rumore è stato realizzato con la function matlab randn, che ci fornisce un vettore di numeri pseudorandom normalmente distribuiti.
La sua auto-correlazione è un impulso di ampiezza pari alla varianza del segnale di rumore.
Quando i due segnali sono simili e non shiftati l’uno rispetto all’altro, il loro prodotto è tutto positivo e l’area sotto la curva dà il valore della funzione di correlazione al punto zero.
Quando un segnale è shiftato rispetto all’altro, i segnali vanno fuori fase, i picchi non coincidono più, il prodotto può essere negativo.
Somiglia un po’ ad un’interferenza distruttiva. L’area sotto questa curva dà il valore della funzione di correlazione al valore dello shift. Le parti negative della curva ora si cancellano con le positive, così la funzione di correlazione ha valori più piccoli.
Il massimo della correlazione è un indice di quando i segnali sono in fase.
Nei grafici seguenti vengono mostrati
Le tipologie di segnali esaminate hanno una autocorrelazione ben riconoscibile.
La crosscorrelation può essere usata per rivelare e localizzare segnali di riferimento noti all’interno del rumore.
La possibilità di riconoscere un segnale viene sfruttata nell’individuazione di sottomarini da parte di navi.
Quando si invia un segnale sonar, se questo viene riflesso da uno scafo, si riceve un segnale riflesso o eco. Il segnale ricevuto viene correlato con i segnali appartenenti ad una collezione di segnali risposta di un data base precedentemente costruito. Quando si trova la massima correlazione tra il segnale eco ed uno dei segnali del data base, si può affermare che lo scafo è stato riconosciuto.
Con l’esempio che segue vedremo un’applicazione della correlazione per il riconoscimento di segnali vocali.
Dato un segnale vocale, sono stati estratti da esso tre frammenti della lunghezza di 52 ms. Due sono relativi a vocali o ed uno alla consonante s.
I segnali campionati sono stati memorizzati in variabili contenute nei files in materiali audio. Se si dispone ad esempio di una collezione di vocali e di consonanti è possibile riconoscere se un segnale è una vocale o una consonante mediante la funzione di correlazione.
Di seguito sono riportate le funzioni di auto e crosscorrelazione per i tre frammenti vocali.
Le vocali sono segnali periodici, la consonante s è un segnale di rumore.
Come si vede dalle crosscorrelazioni, si può affermare che la correlazione tra le due vocali o è molto somigliante ad un’autocorrelazione di vocale, mentre la correlazione con la consonante s fornisce un segnale che è poco somigliante sia alle autocorrelazioni delle vocali che all’autocorrelazione della consonante.
Se una delle due vocali o fosse un segnale incognito da classificare, potremmo concludere che non appartiene alla classe consonanti, ma che è con elevata probabilità una vocale.
Correlazione e convoluzione
Se uno dei due segnali è simmetrico cosa succede a correlazione e convoluzione?
Se entrambi i segnali sono simmetrici, cosa succede a correlazione e convoluzione?
Verificare con segnali di prova costruiti con matlab.
Costruire un più ampio insieme di segnali vocali per valutare la correlazione tra vocali e poi tra vocali e consonanti.
Comprende numerosi altre elaborazioni e metodiche che vanno dalle più semplici quali: zero crossing, media, energia e potenza ad altre più articolate che consentono di fare previsioni sul campione n-esimo di una sequenza conoscendo p valori passati come la predizione lineare (LPC), oltre alla correlazione appena vista.
2. Segnali ed operazioni sui segnali
3. Sistemi e proprietà dei sistemi
4. Approfondimento su convoluzione e correlazione
5. Sistemi lineari tempo invarianti e equazioni alle differenze
7. Rappresentazione in serie di Fourier di segnali periodici a tempo discreto
9. Trasformata di Fourier a tempo discreto
10. DFT e convoluzione circolare
11. Applicazione della dft leakage spettrale
12. Dualità e trasformata coseno
13. Trasformata di F. dipendente dal tempo - time dependent Fourie transform TDFT
14. Trasformata z
17. Campionamento - parte prima
Capitolo II Oppenheim Schafer Buck.
Esercizi alla fine del 2° capitolo.
Proakis e Manolakis – Digital Signal Processing.