Code covered by the BSD License

# Overlap Save Method using Circular Convolution Technique

### Sourangsu Banerji (view profile)

Performs convolution using the Overlap Save Method with the Circular convolution.

Overlap_Save_Method.m
% Theory
%
% Overlap Save Method
%
% In this method, the size of the input data blocks is N=L+M-1 and the DFTs and the IDFTs are of length L. Each Data Block consists of the
% last M-1 data points of the previous block followed by L new data points to form a data sequence of length N=L+M-1.An N point DFT  is computed
% for each data block. The impulse response of the FIR filter is increased in length by appending L-1 zeros and an N-point DFT of the sequence is
% computed once and stored. The multiplication of the N-point DFTs for the mth block of data yields
%                                                                    Ym(k)=h(k)Xm(k).
% Since the data record is of length N, the first M-1 points of Ym(n)are corrupted by aliasing and must be discarded. The last L points of Ym(n)
% are exactly the same as the result  from linear convolution. To avoid loss of data due to aliasing, the last M-1  points of each data record are
% saved and these points become the first M-1 data points of the subsequent record. To begin the processing, the first M-1 point of the first record
% is set to zero. The resulting data sequence from the IDFT are given where the first M-1 points are discarded due to aliasing and the remaining L
% points constitute the desired result from the linear convolution. This segmentation of the input data and the fitting of the output data blocks together
% form the output sequence.
%
%

clc;
clear all;
close all;
x=input('Enter 1st Sequence X(n)= ');
h=input('Enter 2nd Sequence H(n)= ');
N=input('Enter length of each block L = ');

% Code to plot X(n)
subplot(2,2,1);
stem(x,'blue');
xlabel ('n---->');
ylabel ('Amplitude ---->');
title('X(n)');

%Code to plot H(n)
subplot(2,2,2);
stem(h,'black');
xlabel ('n---->');
ylabel ('Amplitude ---->');
title(' H(n)');

% Code to perform Convolution using Overlap Save Method
lx=length(x);
lh=length(h);
m=lh-1;
x=[zeros(1,m) x zeros(1,N)];
h=[h zeros(1,N-lh)];
L=N-lh+1;
k=floor((length(h))/L);
for i=0:k
y=x(1,i*L+1:i*L+N);
q=mycirconv1(y,h);  %Call the mycirconv1 function.
p(i+1,:)=q;
end
p1=p(:,lh:N)';
p=p1(:)'

% Representation of the Convoled Signal
subplot(2,2,3:4);
stem(p,'red');
xlabel ('n---->');
ylabel ('Amplitude ---->');
title('Convoled Signal');

% Add title to the Overall Plot
ha = axes ('Position',[0 0 1 1],'Xlim',[0 1],'Ylim',[0 1],'Box','off','Visible','off','Units','normalized', 'clipping' , 'off');
text (0.5, 1,'\bf Convolution using Overlap Save Method ','HorizontalAlignment','center','VerticalAlignment', 'top')