Sunteți pe pagina 1din 1

function y=mycirconv(x,h)

lx=length(x);
lh=length(h);
l=max(lx,lh);
X=[x zeros(1,l-lx)];
H=zeros(l);
H(1:lh)=h;
for j=1:l-1
for i=1:l-1
H(i+1,j+1)=H(i,j);
end
H(1,j+1)=H(l,j);
end
y=H*X';
clc;
clear all;
close all;
x=input('Enter 1st sequence x(n)');
h=input('Enter 2nd sequence h(n)');
L=input('Enter length of each block L =');
subplot (2,2,1);
stem(x);title('1st sequence x(n)');
subplot (2,2,2);
stem(h);title('2nd sequence h(n)');
Nx=length(x);
M=length(h);
M1=M-1;
R=rem(Nx,L);
N=L+M1;
x=[x zeros(1,L-R)];
h=[h zeros(1,N-M)];
K=floor(Nx/L);
y=zeros(K+1,N);
z=zeros(1,M1);
for k=0:K
xp=x(L*k+1:L*k+L);
xk=[xp z];
y(k+1,:)=mycirconv(xk,h);
end
p=L+M1;
for i=1:K
y(i+1,1:M-1)=y(i,p-M1+1:p)+y(i+1,1:M-1);
end
z1=y(:,1:L)';
y=(z1(:))'
subplot (2,2,3:4);
stem(y);
title('Convolution using Overlap Add method');

S-ar putea să vă placă și