Task - 3
Task - 3
AIM:
To perform circular convolution between any two sequences and to find DFT of a sequence using
MATLAB.
1) DFT:
i) Without using builtin function:
Code:
clc
clear all
close all
m = length(inp);
x = [inp,zeros(1,N-m)];
X = zeros(1,N);
for k = 1:N
X(k) = 0;
for n = 1:N
X(k) = X(k)+(x(n)*exp((-1j)*2*pi*(n-1)*(k-1)/N));
end
end
figure
subplot(3,1,1)
stem(inp)
xlim([0,m+1])
15BEC0898-K.RANJITH KUMAR
title('Input Sequence')
xlabel('Time')
ylabel('Amplitude')
% Magnitude of X[k]
subplot(3,1,2)
stem(abs(X))
title('Magnitude Response')
xlabel('Frequency')
ylabel('|X(k)|')
% Phase of X[K]
subplot(3,1,3)
plot(angle(X))
title('Phase Response')
xlabel('Frequency')
ylabel('Phase')
>> abs(X)
ans =
>> angle(X)
ans =
15BEC0898-K.RANJITH KUMAR
-0.1031 2.8364 -0.3218 2.2522 1.7682 -1.1200 1.8158 2.2758
Output figure:
Input Sequence
5
Amplitude
-5
0 1 2 3 4 5 6 7 8 9
Time
Magnitude Response
40
|X(k)|
20
0
1 2 3 4 5 6 7 8
Frequency
Phase Response
5
Phase
-5
1 2 3 4 5 6 7 8
Frequency
Code:
% FFT command
15BEC0898-K.RANJITH KUMAR
X=fft(x,N);
figure
subplot(3,1,1)
stem(inp)
xlim([0,m+1])
title('Input Sequence')
xlabel('Time')
ylabel('Amplitude')
% Magnitude of X[k]
subplot(3,1,2)
stem(abs(X))
xlabel('Frequency')
ylabel('|X(k)|')
% Phase of X[K]
subplot(3,1,3)
plot(angle(X))
xlabel('Frequency')
ylabel('Phase')
>> abs(X)
15BEC0898-K.RANJITH KUMAR
ans =
>> angle(X)
ans =
Output figure:
Input Sequence
5
Amplitude
-5
0 1 2 3 4 5 6 7 8 9
Time
Magnitude Response using FFT
40
|X(k)|
20
0
1 2 3 4 5 6 7 8
Frequency
Phase Response using FFT
5
Phase
-5
1 2 3 4 5 6 7 8
Frequency
x(n) = {0,1,2,3}
15BEC0898-K.RANJITH KUMAR
0
x 4 = [ 1]
2
3
𝑊40 𝑊40 𝑊40 𝑊40 1 1 1 1
𝑊0 𝑊41 𝑊42 𝑊43 1 −𝑗 −1 𝑗
W4 = 40 = [ ]
𝑊4 𝑊42 𝑊44 𝑊46 1 −1 1 −1
[𝑊40 𝑊43 𝑊44 𝑊49 ] 1 𝑗 −1 −𝑗
6
−2 + 𝑗2
X 4 = W4 x4 = [ ]
−2
−2 + 𝑗2
2) CIRCULAR CONVOLUTION:
a. Without using builtin function:
Code:
clc
clear all
close all
N1=length(x1);
N2=length(x2);
N=max(N1,N2);
N3=N1-N2;
if(N3>0)
x2=[x2,zeros(1,N3)];
else
x1=[x1,zeros(1,-N3)];
end
for n=1:N
15BEC0898-K.RANJITH KUMAR
y(n)=0
for i=1:N;
j=n-i+1;
if(j<=0)
j=N+j;
end
y(n)=[y(n)+(x1(i)*x2(j))];
end
end
stem(y);
y=
8 10 8 10
Output figure:
15BEC0898-K.RANJITH KUMAR
Circular Convolution output
10
6
amplitude--->
0
1 1.5 2 2.5 3 3.5 4
time--->
clear all
close all
y=cconv(x,h,4);
stem(y);
xlabel('N--->');
ylabel('amplitude--->');
15BEC0898-K.RANJITH KUMAR
Output in the command window:
Output figure:
6
amplitude--->
0
1 1.5 2 2.5 3 3.5 4
N--->
15BEC0898-K.RANJITH KUMAR
clear all
close all
N1=length(x1);
N2=length(x2);
N=max(N1,N2);
N3=N1-N2;
if(N3>0)
x2=[x2,zeros(1,N3)];
else
x1=[x1,zeros(1,-N3)];
end
ccirc = ifft(fft(x1).*fft(x2));
disp('Result:');
ccirc
stem(ccirc);
xlabel('time--->');
ylabel('amplitude--->');
grid on
15BEC0898-K.RANJITH KUMAR
Output figure:
6
amplitude--->
0
1 1.5 2 2.5 3 3.5 4
time--->
15BEC0898-K.RANJITH KUMAR
x1 (n) = {1, 2,3,1}
Matrix Method:
1 1 3 2 4 17
[2 1 1 3] [3] = [19]
3 2 1 1 2 22
1 3 2 1 2 19
15BEC0898-K.RANJITH KUMAR