function c = conv_by_overlap_and_sum(a,b)
a = sin(2*pi*0.1*(0:1023));
b = ones(1,10);

% dimensioni delle sequenze
M = numel(b);
N = numel(a);
if N < M
    keyboard
end
c = zeros(1,M+N-1);

N_FFT = 2^ceil(log2(2*M-2));
L = N_FFT-(M-1);

% zero padding e DFT della sequenza b
b(N_FFT) = 0;
B = fft(b);

% memoria tra i loop
z = zeros(1,M-1);

% numero di loop
K = ceil(N/L);
for k = 1:K
    % estrai la finestra k-esima e zero padding
    if k*L <= N
        temp = a((k-1)*L+(1:L));
    else
        temp = a((k-1)*L+1:N);
    end
    temp(N_FFT) = 0;
    
    % convoluzione ed overlap and sum
    temp2 = ifft(fft(temp).*B);
    temp2(1:M-1) = temp2(1:M-1) + z;
    
    % assegna la variabile d'uscita
    if k*L <= N
        c((k-1)*L+(1:L)) = temp2(1:L);
        
        % prepara z per il prossimo loop
        z = temp2(L+(1:M-1));
    else
        c((k-1)*L+1:N+M-1) = temp2(1:L+M-1-(K*L-N));
    end
    
%     subplot(3,1,1)
%     stem(c(1:k*L))
%     subplot(3,1,2)
%     stem(temp2)
%     subplot(3,1,3)
%     stem(z)
end
