Overlap-Add

Per illustrare il procedimento consideriamo un filtro la cui risposta all'impulso h[n] è lunga M e un segnale x[n] di lunghezza qualunque. Scomponiamo x[n] in sottosequenze di lunghezza L e vogliamo calcolare la convoluzione tra h[n] e xk[n].

La convoluzione lineare tra due sequenze lunghe L e M vale L+M-1 punti. Quindi possiamo pensare di effettuare delle DFT su L+M-1 campioni su entrambe le sequenze h[n] e xk[n], basta aggiungere un numero opportuno di zeri in coda. Dopo aver effettuato il prodotto tra le DFT e dopo aver eseguito la IDFT , otteniamo una sequenza di L+M-1 punti. Di quest’ultima, dato che la sottosequenza ha lunghezza L, i primi M-1 punti della convoluzione parziale si sovrappongono con la convoluzione parziale precedente e vanno sommati. Iterando questo procedimento si ottiene la convoluzione lineare tra x[n] e h[n].

Overlap-Save

Consideriamo un filtro la cui risposta all’impulso h[n] è lunga M e un segnale x[n] di lunghezza qualunque. Scomponiamo x[n] in sottosequenze di lunghezza L e calcoliamo la convoluzione circolare tra h[n] e xk[n].

Calcoliamo la DFT di h[n] e la DFT di xk[n] su L punti. La loro moltiplicazione corrisponde alla convoluzione circolare tra le due sequenze. Una volta antitrasformata, i primi M-1 punti sono però affetti da aliasing e quindi vanno scartati. La nuova sottosequenza lunga L sarà composta dagli ultimi M-1 punti della sottosequenza precedente e da L-M+1 nuovi punti della sequenza x[n]. Il procedimento inizia aggiungendo M-1 zeri in testa alla prima sottosequenza e di L-M+1 punti, i primi di x[n].

Software

Il file da scaricare è un programma MATLAB che esegue la convoluzione lineare con i metodi sopra descritti: overlap.m

Bibliografia

  1. Sergio Franco, "Elaborazione numerica dei segnali", FrancoAngeli, pag. 139-142.