Convoluzione lineare e circolare

Questo esempio mostra come stabilire un’equivalenza tra convoluzione lineare e circolare.

La convoluzione lineare e circolare sono operazioni fondamentalmente diverse. Tuttavia, ci sono condizioni in cui la convoluzione lineare e circolare sono equivalenti. Stabilire questa equivalenza ha implicazioni importanti. Per due vettori, x e y, la convoluzione circolare è uguale alla trasformata di Fourier discreta inversa (DFT) del prodotto dei DFTs dei vettori. Conoscere le condizioni in cui la convoluzione lineare e circolare sono equivalenti consente di utilizzare il DFT per calcolare in modo efficiente le circonvoluzioni lineari.

La convoluzione lineare di un vettore N-punto, x, e di un vettore L-punto, y, ha lunghezza N + L – 1.

Affinché la convoluzione circolare di x e y sia equivalente, è necessario riempire i vettori con zeri di lunghezza almeno N + L – 1 prima di prendere il DFT. Dopo aver invertito il prodotto dei DFTs, mantenere solo i primi elementi N + L – 1.

Crea due vettori, x e y, e calcola la convoluzione lineare dei due vettori.

x = ;y = ;clin = conv(x,y);

L’uscita ha lunghezza 4+3-1.

Pad entrambi i vettori con zeri alla lunghezza 4+3-1. Ottieni il DFT di entrambi i vettori, moltiplica i DFT e ottieni il DFT inverso del prodotto.

xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));

La convoluzione circolare dei vettori a riempimento zero, xpad e ypad, è equivalente alla convoluzione lineare di xe y. Mantieni tutti gli elementi di ccirc perché l’output ha lunghezza 4+3-1.

Tracciare l’output della convoluzione lineare e l’inverso del prodotto DFT per mostrare l’equivalenza.

subplot(2,1,1)stem(clin,'filled')ylim()title('Linear Convolution of x and y')subplot(2,1,2)stem(ccirc,'filled')ylim()title('Circular Convolution of xpad and ypad')

Figura contiene 2 assi. Assi 1 con titolo Convoluzione lineare di x e y contiene un oggetto di tipo stem. Assi 2 con titolo Circular Convolution di xpad e ypad contiene un oggetto di tipo stem.

Tamponare i vettori alla lunghezza 12 e ottenere la convoluzione circolare utilizzando la DFT inversa del prodotto dei DFT. Mantenere solo i primi 4 + 3-1 elementi per produrre un risultato equivalente alla convoluzione lineare.

N = length(x)+length(y)-1;xpad = ;ypad = ;ccirc = ifft(fft(xpad).*fft(ypad));ccirc = ccirc(1:N);

Il software Signal Processing Toolbox™ ha una funzione, cconv, che restituisce la convoluzione circolare di due vettori. È possibile ottenere la convoluzione lineare di x e y utilizzando la convoluzione circolare con il seguente codice.

ccirc2 = cconv(x,y,6);

cconv internamente utilizza la stessa procedura basata su DFT illustrata nell’esempio precedente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.