% Convoluzione vs Correlazione
% Author C. Prati
% 20-3-2026
clear
close all
N=11;
% SE n PARTE DA 0
n=(0:N-1);
x=(0:N-1);
figure(1)
stem(n,x)
pause
y=conv(x,x);
z=xcorr(x,x);
% identico a conv(x,flip(x))
L=2*N-1;
% N.B. L è sempre dispari qualsiasi sia N
m=(0:L-1);
figure(2)
subplot(211)
stem(m,y)
title('convolution')
subplot(212)
stem(m,z)
title('correlation')
pause
k=-(L-1)/2:(L-1)/2;
subplot(212)
stem(k,z)
title('correlation')
pause
% SE n PARTE DA un valore diverso da 0 es: n0
n0=-2;
n=(0+n0:N-1+n0);
x=(0:N-1);
figure(1)
stem(n,x)
pause
y=conv(x,x);
z=xcorr(x,x);
% La convoluzione parte da m0=2*n0
m0=2*n0
m=(0+m0:L-1+m0);
figure(3)
subplot(211)
stem(m,y)
title('convolution')
% ... ma la correlazione è sempre simmetrica rispetto a 0
pause
k=-(L-1)/2:(L-1)/2;
subplot(212)
stem(k,z)
title('correlation')
pause
% IMPORTANTE
% Se ho 2 segnali tra di loro ritardati, non importa collocarli
% temporalmente: la loro cross-correlazione non cambia...
% Il ritardo tar i 2 segnali è in corrispondenza del massimo della
% cross-correlazione
x=zeros(1,30);
N=20;
x(4:3+N)=(1:N);
y=zeros(1,30);
y(7:6+N)=(1:N);
figure(1)
subplot(211)
stem(x)
subplot(212)
stem(y)
pause
z=xcorr(x,y);
L=30*2-1;
k=-(L-1)/2:(L-1)/2;
figure(4)
stem(k,z,'filled')
title('correlation')
pause
% ... e se il ritardo non è un numero intero di campioni?
n=(-N:N);
x=exp(-n.^2/25);
figure(5)
stem(n,x)
pause
y=exp(-(n-1.25).^2/25);
hold on
stem(n,y,'r')
hold off
pause
z=xcorr(x,y);
L=length(z);
k=-(L-1)/2:(L-1)/2;
figure(6)
stem(k,z,'filled')
title('correlation')
% Occorre interpolare i campioni della cross-correlazione intorno al max.
% Un interpolatore semplii e molto precoso è quello parabolico applicato ai
% 3 campioni: quello del massimo, e i 2 a sx e dx del massimo. Si veda lo
% script interparab.m
