Manual Code for convolution
382 views (last 30 days)
Show older comments
Hello there!! Now, I make a code for convolution. data is discrete like
x=[1,3,5,7,9]; y=[5,4,3,2,1];
It mean if t=1, x is 1 and y=5 / if t=3, x is 5, y is 3 ....
So I cannot use 'conv' function. My code is like that
for t=1:5
convolution(t)=0;
for j=1:t
convolution(t)=convolution(t)+x(t+1-j)*y(j);
end
end
But result is not good. Are there something to fix?
0 Comments
Accepted Answer
Birdman
on 6 Nov 2017
x=input('Enter x: ')
h=input('Enter h: ')
m=length(x);
n=length(h);
X=[x,zeros(1,n)];
H=[h,zeros(1,m)];
for i=1:n+m-1
Y(i)=0;
for j=1:m
if(i-j+1>0)
Y(i)=Y(i)+X(j)*H(i-j+1);
else
end
end
end
Y
0 Comments
More Answers (2)
AKASH KUMAR
on 8 Feb 2022
%
% algorithm to compute convolution
clc
clear
close all
x1 = [5,6,1,2];
h = [10,6,4,8,9,5];
N = length(x1)+length(h)-1;
y=conv(x1,h) % Inbuilt matlab function
x = linearconvolve(x1,h); % Function call
x
%% User defined function to find linear convolution
function cnv = linearconvolve(a,b)
L = length(a)+length(b)-1;
cnv = zeros(1,L);
a1=[a,zeros(1,L-length(a))]; % define a new vector of a
b1=[b,zeros(1,L-length(b))];
for i=1:L
c = 0;
for j=1:i
c = c + a1(j)*b1(i-j+1);
end
cnv(i) = c;
end
end
1 Comment
AKASH KUMAR
on 17 Aug 2024
%
% algorithm to compute convolution
% Note : all signals are stored in a row vector
clc
clear
close all
x1 = [5,6,1,9,1,6,3,6.2,2];
h = [10,6,4];
N = length(x1)+length(h)-1;
y=conv(x1,h) % Inbuilt matlab function
y_filt=filter(h,1,x1)
Y1 = linearconvolve1(x1,h) % Function call
Y2= Fir_filter_userDefine(x1,h) % Function call
figure(1)
stem(y,'r','LineWidth',3);
hold on
stem(y_filt,'b','LineWidth',1.2);
hold on;
stem(Y1,'g')
stem(Y2,'--m');
legend('conv1','filter','conv2','filter2')
%% User defined function to find linear convolution
function cnv = linearconvolve1(a,b)
L = length(a)+length(b)-1;
cnv = zeros(1,L);
a1=[a,zeros(1,L-length(a))]; % define a new vector of a
b1=[b,zeros(1,L-length(b))];
for i=1:L
c = 0;
for j=1:i
c = c + a1(j)*b1(i-j+1);
end
cnv(i) = c;
end
end
% Output length is same as of Input signal
function cnv = Fir_filter_userDefine(X_sig,h_fir)
N=length(X_sig);
L_filt=length(h_fir);
cnv = zeros(1,N);
X_tap=zeros(1,L_filt); % initialize a vector to store incoming signal
for n=1:N
x_n=X_sig(n); % Step 01: Invert the signal
X_tap=[x_n,X_tap(1:L_filt-1)]; % Step 02 : sliding operation.
y_n = h_fir*X_tap'; % Step 03 Summation
% y_n = sum(h_fir.*X_tap); % Step 03 Summation
cnv(n) = y_n;
end
end
keshav kumar
on 17 Aug 2021
close all
clear all
x=input('Enter x: ')
h=input('Enter h: ')
m=length(x);
n=length(h);
X=[x,zeros(1,n)];
H=[h,zeros(1,m)];
for i=1:n+m-1
Y(i)=0;
for j=1:m
if(i-j+1>0)
Y(i)=Y(i)+X(j)*H(i-j+1);
else
end
end
end
Y
stem(Y);
ylabel('Y[n]');
xlabel('----->n');
title('Convolution of Two Signals without conv function');
0 Comments
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!