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?

 Réponse acceptée

Birdman
Birdman le 6 Nov 2017

6 votes

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

Plus de réponses (2)

AKASH KUMAR
AKASH KUMAR le 8 Fév 2022

1 vote

%
% 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
y = 1×9
50 90 66 90 109 95 55 23 10
x = linearconvolve(x1,h); % Function call
x
x = 1×9
50 90 66 90 109 95 55 23 10
%% 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 commentaire

%
% 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 = 1x11
50.0000 90.0000 66.0000 120.0000 68.0000 102.0000 70.0000 104.0000 69.2000 36.8000 8.0000
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
y_filt=filter(h,1,x1)
y_filt = 1x9
50.0000 90.0000 66.0000 120.0000 68.0000 102.0000 70.0000 104.0000 69.2000
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Y1 = linearconvolve1(x1,h) % Function call
Y1 = 1x11
50.0000 90.0000 66.0000 120.0000 68.0000 102.0000 70.0000 104.0000 69.2000 36.8000 8.0000
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Y2= Fir_filter_userDefine(x1,h) % Function call
Y2 = 1x9
50.0000 90.0000 66.0000 120.0000 68.0000 102.0000 70.0000 104.0000 69.2000
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
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

Connectez-vous pour commenter.

keshav kumar
keshav kumar le 17 Août 2021

0 votes

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');

Catégories

En savoir plus sur MATLAB dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!