# how to do convolution without commands

141 views (last 30 days)

Show older comments

Hi, im trying to do convolution without any of the commands in matlab.

Just plain for, this is because im trying to use a code that can also be implemented on C.

So far I have this

x=[1 2 3]

h=[-1 0 3]

Z=[0]

[M,N]=size(x)

[L,O]=size(h)

A=N+O-1

for n=1:1:N

for o=1:1:O

y(n,o)=x(n)*h(o)

end

end

##### 0 Comments

### Accepted Answer

Chandra Kurniawan
on 27 Nov 2011

Hi, Omar. Do you seeking for 2D convolution code without Matlab toolbox command?? I have the code below

function B = convolve(A, k);

[r c] = size(A);

[m n] = size(k);

h = rot90(k, 2);

center = floor((size(h)+1)/2);

left = center(2) - 1;

right = n - center(2);

top = center(1) - 1;

bottom = m - center(1);

Rep = zeros(r + top + bottom, c + left + right);

for x = 1 + top : r + top

for y = 1 + left : c + left

Rep(x,y) = A(x - top, y - left);

end

end

B = zeros(r , c);

for x = 1 : r

for y = 1 : c

for i = 1 : m

for j = 1 : n

q = x - 1;

w = y -1;

B(x, y) = B(x, y) + (Rep(i + q, j + w) * h(i, j));

end

end

end

end

Save the following code with filename 'convolve.m'. And then create a new m-file and type this code :

clear; clc;

I = [4 4 3 5 4;

6 6 5 5 2;

5 6 6 6 2;

6 7 5 5 3;

3 5 2 4 4];

k = [0 -1 0;

-1 4 -1;

0 -1 0];

Hsl = convolve(I, k)

Watch at the result! You can also compare the result with the matlab toolbox command 'conv2'

Bnd = conv2(I,k,'same')

The both results are same :

Hsl =

6 3 -2 8 9

9 3 0 2 -3

2 0 2 6 -3

9 6 0 2 1

1 8 -6 5 9

Bnd =

6 3 -2 8 9

9 3 0 2 -3

2 0 2 6 -3

9 6 0 2 1

1 8 -6 5 9

>>

##### 1 Comment

David Young
on 27 Nov 2011

### More Answers (4)

DI
on 16 Mar 2015

The first answer is not actually full size.

Full size will be like this:

% Written by Dizeng 3/15/2015. Full convolution.

function B = convolve(A, k)

[r,c] = size(A);

[m,n] = size(k);

h = rot90(k, 2);

center = floor((size(h)+1)/2);

Rep = zeros(r + m*2-2, c + n*2-2);

for x = m : m+r-1

for y = n : n+r-1

Rep(x,y) = A(x-m+1, y-n+1);

end

end

B = zeros(r+m-1,n+c-1);

for x = 1 : r+m-1

for y = 1 : n+c-1

for i = 1 : m

for j = 1 : n

B(x, y) = B(x, y) + (Rep(x+i-1, y+j-1) * h(i, j));

end

end

end

end

Hope it will be helpful to others...

##### 3 Comments

Enrique de José María Flores Rodríguez
on 16 Mar 2021

Seem works good on a DICOM image on 2021, thank you !

Wayne King
on 27 Nov 2011

I take it when you say "without commands", you really are just saying without conv(). It appears to me you have 1-D vectors from your initial post. Specifically, you give the example:

x=[1 2 3];

h=[-1 0 3];

You can exploit the relationship between linear convolution, circular convolution, and the DFT by extending the length of your input vectors with zero-padding, multiplying their DFTs, and then taking the inverse DFT.

x = [1 2 3]';

h = [-1 0 3]';

N = length(x)+length(h)-1;

x1 = [x; zeros(N-length(x),1)];

h1 = [h; zeros(N-length(h),1)];

convxh = ifft(fft(x1).*fft(h1));

Compare convxh with

conv(x,h)

SALVADOR CANAS
on 15 Jan 2018

Those convolutions are convolutions with padding=1, how do you do for padding=0?

##### 0 Comments

Sk Group
on 25 Oct 2021

Convolution without conv function in MATLAB | Complete CODE | Explanation | Example And Output

For complete detailed post visit: https://www.swebllc.com/convolution-without-function-in-matlab/

##### 0 Comments

### See Also

### Community Treasure Hunt

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

Start Hunting!