Scilab Code:
//Circular Convolution of x(n) and h(n) is given
by:
//Summation of x(n).h(m-n) from 0 to N-1
//where, N = length of sequences
//Both the sequences start from the origin
clc; close; clear;
x =
input("Enter the first sequence: ");
h =
input("Enter the second sequence: ");
//perform zero-padding to make lengths equal
length_diff = length(x) - length(h);
if length_diff>0 then
h = [h, zeros(1:abs(length_diff) )];
else
x = [x, zeros(1:abs(length_diff) )];
end
x_origin = 1;
h_origin = 1;
x_lower = -(x_origin - 1); //lower
range of x
h_lower = -(h_origin - 1); //lower
range of h
x_upper = length(x) - x_origin; //upper range of x
h_upper = length(h) - h_origin; //upper range of h
//Create the x_matrix and h_matrix
len =
length(x);
for i = 1:len
x_mat(i, 1) = x(i);
j = i;
for c = 1:len
h_mat(j, i) = h(c);
j = j + 1;
if j == (len+1)
j = j - len;
end
end
end
y =
h_mat * x_mat;
y =
y';
disp(x, "x = ");
disp(h, "h = ");
disp(x_mat, "x_mat = ");
disp(h_mat, "h_mat = ");
disp(y, "Circular Convolution =
");
subplot(3, 1, 1);
plot2d3(x_lower:x_upper, x, style=color("green"));
xtitle("First
Sequence","n","x(n)");
a =
gca();
a.x_location = "origin";
a.y_location = "origin";
a.children.children(1).thickness = 2;
subplot(3, 1, 2);
plot2d3(h_lower:h_upper, h, style=color("red"));
xtitle("Second
Sequence","n","h(n)");
a =
gca();
a.x_location = "origin";
a.y_location = "origin";
a.children.children(1).thickness = 2;
subplot(3, 1, 3);
n =
0:(len-1);
plot2d3(n, y, style=color("blue"));
xtitle("Circular
Convolution: x(n) x h(n)","n","y(n)");
a =
gca();
a.x_location = "origin";
a.y_location = "origin";
a.children.children(1).thickness = 2;
No comments:
Post a Comment