Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

DSP Lab Sheet 2 PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 50

DSP LAB SHEET

FOR
ELECTRICAL AND ELECTRONIC
ENGINEERING

WORLD UNIVERSITY OF BANGLADESH

1
REFERENCE BOOK:

1. Digital Signal Processing (4th Edition)


By John G. Proakis, Dimitris K Manolakis.

2. Digital Signal Processing (2nd Edition)


By S. Salivahanan, A. Vallavaraj, C Gnanpriya.

2
CONTENTS

LIST OF EXPERIMENTS USING MATLAB

Serial Number Experiment Name


1 Verification of sampling theorem.

2 Impulse response of a given system.

3 Linear convolution of two given sequences.

4 Circular convolution of two given sequences.

5 Autocorrelation of given sequence and verification of its properties.

6 Cross correlation of a given sequences and verification of its properties.

7 Computation of the factored form and to generate the pole-zero plot of the
Z-transform.

8 Computation of N-point DFT of a given sequence and to plot magnitude


and phase spectrum.

9 Linear convolution of two sequences using DFT and IDFT.

10 Circular convolution of two sequences using DFT and IDFT.

11 Design and implementation of FIR filter to meet given specifications.

12 Design and implementation of IIR filter to meet given specifications.

3
EXPERIMENT NO-1

AIM: VERIFICATION OF SAMPLING THEOREM

Sampling: Is the process of converting a continuous time signal into a discrete time
signal. It is the first step in conversion from analog signal to digital signal.

Sampling theorem: Sampling theorem states that “Exact reconstruction of a continuous


time base -band signal from its samples is possible, if the signal is band-limited and the
sampling frequency is greater than twice the signal bandwidth”.
i.e. fs > 2W, where W is the signal bandwidth.

Nyquist Rate Sampling: The Nyquist rate is the minimum sampling rate required to
avoid aliasing, equal to the highest modulating frequency contained within the signal.
In other words, Nyquist rate is equal to two sided bandwidth of the signal (Upper and
lower sidebands)
To avoid aliasing, the sampling rate must exceed the Nyquist rate. i.e. fs > fN
Program:
% Nyquist Rate Sampling.
clc; % Clear screen
fs = 1400; % Sampling frequency, fs = 1400Hz
t = 0:1/fs:13/fs; % Number of samples
x = cos(2*pi*400*t)+cos(2*pi*700*t); % Input signal
xm = abs (fft(x)); % Determine the absolute FFT of the input signal
disp(‘xm’); % Displays xm on command window
disp (xm); % Displays values of xm on command window
k = 0:length(xm)-1; % Number of samples to be plot on x-axis
subplot (2,2,1); % Divide the figure window to plot the output
stem (100*k, xm); % Plot the output
xlabel ('Hz'); % Name x-axis as “Hz”
ylabel ('Magnitude'); % Name y-axis as “Magnitude”
title ('NR sampling'); % Title is “NR Sampling”

%UNDER Sampling.
fs = 1000; % Sampling frequency, fs = 1000Hz
t = 0:1/fs:9/fs; % Number of samples
x = cos(2*pi*400*t)+cos(2*pi*700*t); % Input signal
xm1 = abs(fft(x)); % Determine the absolute FFT of the input signal
disp(‘xm1’); % Displays xm1 on command window
disp (xm1); % Displays values of xm1 on command window
k = 0:length(xm1)-1; % Number of samples to be plot on x-axis
subplot(2,2,2); % Divide the figure window to plot the output
stem(100*k, xm1); % Plot the output
xlabel('Hz'); % Name x-axis as “Hz”
ylabel('Magnitude'); % Name y-axis as “Magnitude”

4
title('UNDER sampling'); % Title is “UNDER Sampling”

%OVER Sampling.
fs = 2000; % Sampling frequency, fs = 2000Hz
t = 0:1/fs:20/fs; % Number of samples
x = cos(2*pi*400*t)+cos(2*pi*700*t); % Input signal
xm2 = abs(fft(x)); % Determine the absolute FFT of the input signal
disp(‘xm2’); % Displays xm2 on command window
disp (xm2); % Displays values of xm2 on command window
k = 0:length(xm2)-1; % Number of samples to be plot on x-axis
subplot(2,2,3); % Divide the figure window to plot the output
stem(100*k,xm2); % Plot the output
xlabel('Hz'); % Name x-axis as “Hz”
ylabel('Magnitude'); % Name y-axis as “Magnitude”
title('OVER sampling'); % Title is “OVER Sampling”

Output :
xm
Columns 1 through 7
0.0000 0.0000 0.0000 0.0000 7.0000 0.0000 0.0000

Columns 8 through 14
14.0000 0.0000 0.0000 7.0000 0.0000 0.0000 0.0000

xm1
Columns 1 through 7
0.0000 0.0000 0.0000 5.0000 5.0000 0.0000 5.0000

Columns 8 through 10
5.0000 0.0000 0.0000

xm2
Columns 1 through 7
2.0000 2.0741 2.3496 3.1607 11.5127 0.4052 1.8998

Columns 8 through 14
8.6165 4.2355 1.2552 0.3357 0.3357 1.2552 4.2355

Columns 15 through 21
8.6165 1.8998 0.4052 11.5127 3.1607 2.3496 2.0741

5
Graph:

Questions:

1. What is sampling?
2. What is the effect of under sampling?
3. X(t)=5cos100πt+90sin700πt, if this signal is sampled at 500samples/sec then after reconstruction
which signal will be found?

6
EXPERIMENT NO-2

AIM: IMPULSE RESPONSE OF A GIVEN SYSTEM

A discrete time system performs an operation on an input signal based on a predefined


criteria to produce a modified output signal. The input signal x(n) is the system
excitation, and y(n) is the system response. The transform operation is shown as,

x(n) y(n) = T[(x(n)]


T

If the input to the system is unit impulse i.e. x(n) = δ(n) then the output of the system is
known as impulse response denoted by h(n) where,

h(n) = T[δ(n)]

we know that any arbitrary sequence x(n) can be represented as a weighted sum of
discrete impulses. Now the system response is given by,

y(n) = T[x(n)] = T[∑x(k) δ(n-k)] …(1)
k=-∞
For linear system (1) reduces to

y(n) = ∑x(k) T[δ(n-k)] …(2)
k=-∞

The response to the shifted impulse sequence can be denoted by h(n, k) is denoted by,

h(n, k) = T[δ(n-k)] …(3)


For a time-invariant system
h(n, k) = h(n-k) …(4)

Using (4) in (3) we obtain,


T[δ(n-k)] = h(n-k) …(5)
Using (5) in (2) we get,

y(n) = ∑x(k) h(n-k) …(6)
k=-∞

7
For a linear time-invariant system if the input sequence is x(n) and impulse response
h(n) is given, we can fine output y(n) by using eqn (6).
Which is known as convolution sum and can be represented by y(n) = x(n) * h(n)

For Example let’s find out an impulse response of a difference equation.


The general form of difference equation is,

M M
y(n) = ∑ak y(n-k) + ∑bk x(n-k) …(7)
k=1 k=0
For input x(n) = δ(n)

M
y(n) = ∑bk x(n-k) = 0 for n > M
k=0
Now (7) can be written as,

N
y(n) = ∑ak y(n-k) = 0 a0 = 1 …(8)
k=0
The solution of eqn (8) is known as homogeneous solution. The particular solution is
zero since x(n) = 0 for n > 0, that is
yp(n) = 0
Therefore we can obtain the impulse response by solving the homogeneous equation and
imposing the initial conditions to determine the arbitrary constants.

Example:
Let’s take a second order difference equation

y(n) – (1/6) y(n-1) –(1/6) y(n-2) = x(n) …(9)

For impulse response the particular solution yp(n) = 0

So, y(n) = yh(n) …(10)


n
Let yh(n) = λ …(11)
Substituting (11) in (9) we get,

λn - (1/6) λn-1 – (1/6) λn-2 = 0 ( x(n) = 0 for homogeneous solution)


or
2
λ - (1/6) λ – (1/6) = 0 …(12)

8
The roots of the characteristic equation are,
λ1 = 1/2, λ2 = -1/3
n n
The solution yh(n) = C1 (1/2) + C2 (-1/3) …(13)
For impulse x(n) = δ(n); x(n) = 0 for n > 0 and x(0) = 1

Substituting the above relations in eqn (9) we have,

For n = 0,

y(0) – (1/6) y(-1) –(1/6) y(-2) = x(0) = 1

i.e. y(0) = 1. …(14)

For n = 1,

y(1) – (1/6) y(0) –(1/6) y(-1) = x(1)


y(1) – (1/6) = 0
y(1) = 1/6. …(15)

From eqn (13)


y(0) = C1 + C2 …(16)
y(1) = (1/2)C1 – (1/3)C2 …(17)

Comparing equations (14), (15), (16) and (17) we get,


C1 + C2 = 1
(1/2)C1 – (1/3)C2 = (1/6)
Solving for C1 and C2 we get,
C1 = 3/5, C2 = 2/5
Therefore, the solution

y(n) = (3/5)(1/2)n + (2/5)(-1/3)n …(18)


Now, let’s find out impulse response.
We know that,
y(n) = x(n) * h(n)
h(n) = y(n) / x(n) …(19)

9
Compute y(n) for various values of n
Substitute n = 0, 1, 2, 3 in eqn (18) we get,

y(0) = 1.0000
y(1) = 0.1667
y(2) = 0.1944
y(3) = 0.0602

So, y(n) = {1.0000, 0.1667, 0.1944, 0.0602}


We know that, x(n) = 1

So, the impulse response for the given difference equation using eqn (19) is
h(n) = {1.0000, 0.1667, 0.1944, 0.0602}

Program:
clc; % Clear screen
nr = [1]; % Numeartor co-efficients
dr = [1,-1/6,-1/6]; % Denominator co-efficients
h = impz(nr,dr,4); % Computes the impulse response of a given
% difference equation, returns the co-efficients
disp('Impulse response h(n):');% Displays impulse response
disp(h); % Displays impulse response on command window
subplot(2,1,1); % Divide the figure window to plot the output
stem(h); % Displays the impulse response
title('Impulse response h(n):');% Title as impulse response
x = [1]; % Input co-efficients
y = conv (h, x); % Convolution of input and impulse co-efficients to get the
% output
disp('Output y(n):') % Displays Output y(n)
disp(y); % Displays the output on command window
subplot(2,1,2); % Divide the figure window to plot the output
stem(y); % Plots the output
title('Output y(n) for given x(n)'); % Title as “Output y(n) for given x(n)”

Output:
Impulse
response:
1.0000 0.1667
0.1944 0.0602

Output y(n):
1.0000
0.1667
0.1944
0.0602

10
Graph:

Questions:

1. What do you mean by system impulse response?


2. How to calculate impulse response of any unknown system?
3. How can you find output of a system from impulse response of that system?

11
EXPERIMENT NO-3

AIM: TO IMPLEMENT LINEAR CONVOLUTION OF TWO GIVEN


SEQUENCES

Theory: Convolution is an integral concatenation of two signals. It has many


applications in numerous areas of signal processing. The most popular application is the
determination of the output signal of a linear time-invariant system by convolving the
input signal with the impulse response of the system.
Note that convolving two signals is equivalent to multiplying the Fourier Transform of
the two signals.

Mathematic Formula:
The linear convolution of two continuous time signals x(t) and h(t) is defined by

For discrete time signals x(n) and h(n), is defined by

Where x(n) is the input signal and h(n) is the impulse response of the system.

In linear convolution length of output sequence is,


length(y(n)) = length(x(n)) + length(h(n)) – 1
Graphical Interpretation:

• Reflection of h(k) resulting in h(-k)


• Shifting of h(-k) resulting in h(n-k)
• Element wise multiplication of the sequences x(k) and h(n-k)
• Summation of the product sequence x(k) h(n-k) resulting in the convolution
value for y(n)

Example:

x(n) = {1, 2, 3, 1}
h(n) = {1, 1, 1}

length(y(n)) = length(x(n)) + length(y(n)) – 1


=4+3–1=6

12
x(k) h(k)
3
2
1 1 1 1 1

-4 -3 -2 -1 0 1 2 3 4 5 6 7 0 1 2

n=0; h(-k ) y(0) = ∑ x(k) h(-k) = 1
1 k=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

n=1; h(1-k) y(1) = ∑ x(k) h(1-k) = 1+2=3
1 k=- ∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

n=2; h(2-k) y(2) =∑ x(k) h(2-k) = 1+2+3=6
1 k=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

n=3; h(3-k) y(3) =∑ x(k) h(3-k) = 2+3+1=6
1 k=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

n=4; h(4-k) y(4) = ∑ x(k) h(4-k) = 3+1=4
1 k=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

n=5; h(5-k) y(5) = ∑ x(k) h(5-k) = 1
1 k=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

13
6 6

4
3
y(n) = {1, 3, 6, 6, 4, 1}
1 1

-4 -3 -2 -1 0 1 2 3 4 5 6 7

Program:

clc; % Clear screen


x1 = input('Enter the 1st seq:'); % Get the first sequence
x2 = input('Enter the 2nd seq:'); % Get the second sequence
y = conv(x1, x2); % Convolve two signals
disp('The linear convolution of two sequences:'); % Displays the result
disp(y); % Displays the result on command window
n = 0:length(y)-1; % Defines the length for x-axis
stem(n, y); % Plots the output
xlabel('Time'); % Name the x-axis as Time
ylabel('Magnitude'); % Name the y-axis as Magnitude
title('Linear convolution'); % Title as “Linear convolution”

Output:

Enter the 1st seq:[1 2 3 1]


Enter the 2nd seq:[1 1 1]
The linear convolution of two
sequences: 1 3 6 6 4 1

14
Graph:

Questions:

1. What is linear time invariant system?


2. Find out the length of the output if the length of input and impulse response is 4 and 7 respectively?
3. Find the output signal of a system if input signal is [1 3 4 1] and impulse response is [6 7 8]?

15
EXPERIMENT NO-4

AIM: TO IMPLEMENT CIRCULAR CONVOLUTION OF TWO GIVEN


SEQUENCES

Circular convolution:
Let x1(n) and x2(n) are finite duration sequences both of length N with DFT’s X1(k)
and X2(k). Convolution of two given sequences x1(n) and x2(n) is given by
the equation,

x3(n) = IDFT[X3(k)]

X3(k) = X1(k) X2(k)

N-1
x3(n) = ∑ x1(m) x2((n-m))N
m=0

Example:

Let’s take x1(n) = {1, 1, 2, 1} and


x2(n) = {1, 2, 3, 4}
Arrange x1(n) and x2(n) in circular fashion as shown below.

x1(m) x2(m)

1 2
x1(1) x2(1)

x1(2) x1(0) x2(2) x2(0)


2 2 1 3 1

x1(3) x2(3)
1 4

16
To get x2(-m), rotate x2(m) by 4 samples in clockwise direction.

x2(-m)
4
x2(3)

x2(2) x2(0)
3 1

x2(1)
2
x3(0) = x1(m) x2(-m)
= x1(0) x2(0) + x1(1) x2(3) + x1(2) x2(2) + x1(3) x2(1)
= 1 + 4 + 6 +2
x3(0) = 13
Keep x1(m) constant and rotate x2(-m) once to compute further values.

To get x3(1) rotate x2(-m) by one sample in anti-clockwise direction

x2(1-m)
1
x2(0)

x2(3) x2(1)
4 2

x2(2)
3

x3(1) = x1(m) x2(1-m)


= x1(0) x2(1) + x1(1) x2(0) + x1(2) x2(3) + x1(3) x2(2)
=2+1+8+3
x3(1) = 14

17
To get x3(2) rotate x2(1-m) by one sample in anti-clockwise direction

x2(2-m)
2
x2(1)

1 3
x2(0) x2(2)

x2(3)
4
x3(2) = x1(m) x2(2-m)
= x1(0) x2(2) + x1(1) x2(1) + x1(2) x2(0) + x1(3) x2(3)
= 3 + 2 + 2+ 4
x3(2) = 11
To get x3(3) rotate x2(2-m) by one sample in anti-clockwise direction

x2(3-m)
3
x2(2)

2 4
x2(1) x2(3)

x2(0)
1
x3(3) = x1(m) x2(3-m)
= x1(0) x2(3) + x1(1) x2(2) + x1(2) x2(1) + x1(3) x2(0)
=4+3+4+1
x3(3) = 12
The convoluted signal is,
x3(n) = {13, 14, 11, 12}

18
Program:
clc; % Clear screen
x1 = input('Enter the first sequence:'); % Get the first sequence
x2 = input('Enter the second sequence:'); % Get the second sequence
N1 = length(x1); % Returns the length of first sequence
N2 = length(x2); % Returns the length of second sequence
N = max(N1,N2); % Get the Maximum length out of two signals
N3 = N1-N2;
% Get equal length sequence
if(N3>0)
x1 = [x1,zeros(1, N3)]; % Pad zeros to the first sequence if N2>N1
else
x2 = [x2,zeros(1, -N3)]; % Pad zeros to the second sequence is N1>N2
end
% Computation of circular convolution
for m=1:N
y(m) = 0;
for n=1:N
i=m-n+1;
if(i<=0)
i=N+i;
end
y(m) = y(m)+x1(n)*h(i);
end
end
disp('The circular convolution of two given sequences is:');
disp(y); % Displays the result on command window
n=0:N-1; % Get the length for x-axis
stem(n, y); % Plot the result
xlabel('Time'); % Name the x-axis as “Time”
ylabel('Magnitude'); % Name the y-axis as “Magnitude”
title('Circular convolution'); % Title as Circular convolution

Output:
Enter the first sequence: [1 1 2 1]
Enter the second sequence: [1 2 3 4]
The circular convolution of two given sequences
is: 13 14 11 12

19
Graph:

Questions:

1. What is the difference between linear convolution and circular convolution?


2. How to perform circular convolution of two input sequences having different length?
3. Find the output signal of a system if input signal is [1 3 4 1] and impulse response is [6 7 8 3]?

20
EXPERIMENT NO-5

AIM: AUTOCORRELATION OF A GIVEN SEQUENCE AND VERIFICATION


OF ITS PROPERTIES

Correlation: Correlation determines the degree of similarity between two signals. If the
signals are identical, then the correlation coefficient is 1; if they are totally different, the
correlation coefficient is 0, and if they are identical except that the phase is shifted by
exactly 1800(i.e. mirrored), then the correlation coefficient is -1.
Autocorrelation: The Autocorrelation of a sequence is correlation of a sequence with
itself. The autocorrelation of a sequence x(n) is defined by,

Rxx (k) = ∑ x(n) x(n-k) k = 0, ±1, ±2, ±3 …


n=-∞

Where k is the shift parameter.

Or equivalently

Rxx (k) = ∑ x(n+k) x(n) k = 0, ±1, ±2, ±3 …


n=-∞

Example:
Let’s take a sequence x(n) = {1, 2, 3, 4}

x(n) 4
3
2
1

-4 -3 -2 -1 0 1 2 3 4 5 6 7

4
3 ∞
k=0; x(n) 2 Rxx(0) = ∑ x(n) x(n) = 4
1 n=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

21
4
3 ∞
k=1; x(n+1) 2 Rxx(1) = ∑ x(n) x(n+1) = 8+3=11
1 n=- ∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

4
3 ∞
k=2; x(n+2) 2 Rxx(2) =∑ x(n) x(n+2) = 12+6+2=20
1 n=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

4
3 ∞
k=3; x(n+3) 2 Rxx(3) =∑ x(n) x(n+3) = 16+9+4+1=30
1 n=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

4
3 ∞
k=4; x(n+4) 2 Rxx(4) = ∑ x(n) x(n+4) = 12+6+2=20
1 n=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

k=5; x(n+5) 4 Rxx(5) = ∑ x(n) x(n+5) = 8+3=11
3 n=-∞
2
1

-4 -3 -2 -1 0 1 2 3 4 5 6 7


k=6; x(n+6) 4 Rxx(6) = ∑ x(n) x(n+6) = 4
3 n=-∞
2
1

-4 -3 -2 -1 0 1 2 3 4 5 6 7

22
30

20 20

11 11

Rxx(k) = {4, 11, 20, 30, 20, 11, 4}


4 4

-4 -3 -2 -1 0 1 2 3 4 5 6 7

Program:
clc; % Clear screen
x = input('Enter the input sequence:'); % Get the input sequence
Rxx = xcorr(x); % Returns auto-correlated sequence
disp('Auto correlated sequence, Rxx:'); % Display the result
disp(Rxx); % Display the result on command window
t = 0:length(Rxx)-1; % Length to plot the graph
stem(t,Rxx); % plots the result on figure window
xlabel('Time'); % xlabel
ylabel('Magnitude'); % ylabel
title('Auto-correlation of the given sequence:'); % Title

Output:
Enter the input sequence: [1 2 3 4]
Auto correlated sequence, Rxx:
4.0000 11.0000 20.0000 30.0000 20.0000 11.0000 4.0000

23
Graph:

Properties of Autocorrelation:

1. Periodicity: Rxx(k0) = Rxx(0) then Rxx(k) is periodic with period k0


2. Autocorrelation function is symmetric. i.e. Rxx(m) = Rxx(-m)
3. Mean square value: autocorrelation function at k=0, is equal to mean square value of
2
the process. Rxx(0) = E{|x(n)| }≥0

Questions:

1. What is correlation?
2. Why autocorrelation is necessary?
3. Perform autocorrelation of the sequence [1 5 2 9 7]?

24
EXPERIMENT NO-6

AIM: CROSS-CORRELATION OF A GIVEN SEQUENCE AND VERIFICATION


OF ITS PROPERTIES

Correlation: Correlation determines the degree of similarity between two signals. If the
signals are identical, then the correlation coefficient is 1; if they are totally different, the
correlation coefficient is 0, and if they are identical except that the phase is shifted by
exactly 1800(i.e. mirrored), then the correlation coefficient is -1.
Cross-correlation: When two independent signals are compared, the procedure is known
as cross-correlation. It is given by,

Rxy (k) = ∑ x(n) y(n-k) k = 0, ±1, ±2, ±3 …


n=-∞

Where k is the shift parameter.

Or equivalently


Ryx (k) = ∑ y(n+k) x(n)
n=-∞

Comparing above two equations, we find that,

Rxy (k) = Ryx (-k)

Where Ryx (-k) is the folded version of Rxy (k) about k = 0.

So, we can write Cross correlation of the two sequences is given by,

Rxy (k) = ∑ x(n) y[-(k-n)]


n=-∞

Rxy (k) = x(k) * y(-k) … (1)

Equation (1) shows that cross correlation is the essentially the convolution of two
sequences in which one of the sequences has been reversed.

25
Example:
Let’s take x(n) = {1, 1, 1, 1} and y(n) = {1, 2, 3, 4}
x(n)

1 1 1 1

-4 -3 -2 -1 0 1 2 3 4 5 6 7

4
3 ∞
k=0; y(-n) 2 Rxy(0) = ∑ x(n) y(-n) = 4
1 n=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

4
3 ∞
k=1; y(1-n) 2 Rxy(1) = ∑ x(n) y(1-n) = 4+3=7
1 n=- ∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

4
3 ∞
k=2; y(2-n) 2 Rxy(2) =∑ x(n) y(2-n) = 4+3+2=9
1 n=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

4
3 ∞
k=3; y(3-n) 2 Rxy(3) =∑ x(n) y(3-n) = 4+3+2+1=10
1 n=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

k=4; y(4-n)
4
3 ∞
2 Rxy(4) = ∑ x(n) y(4-n) = 3+2+1=6
1 n=-∞

-4 -3 -2 -1 0 1 2 3 4 5 6 7

26
k=5; y(5-n)

4 Rxy(5) = ∑ x(n) y(5-n) = 2+1 = 3
3 n=-∞
2
1

-4 -3 -2 -1 0 1 2 3 4 5 6 7

k=6; y(6-n)

4 Rxy(6) = ∑ x(n) y(6-n) = 1
3 n=-∞
2
1

-4 -3 -2 -1 0 1 2 3 4 5 6 7

10

4
3 Rxy(k) = {4, 7, 9, 10, 6, 3,
1}
1

-4 -3 -2 -1 0 1 2 3 4 5 6 7

27
Program:
clc; % Clear screen
x = input('Enter the first sequence:'); % Get the first sequence
y = input('Enter the second sequence:'); % Get the second sequence
Rxy = xcorr(x,y); % Returns cross correlated sequence
disp('Cross correlated sequence, Rxy:'); % Display the result
disp(Rxy); % Display the result on command window
t = 0:length(Rxy)-1; % Length to plot the graph
stem(t, Rxy); % plots the result on figure window
xlabel('Time'); % xlabel
ylabel('Magnitude'); % ylabel
title('Cross correlation of the given two sequences:'); % Title

Output:
Enter the first sequence: [1 1 1 1]
Enter the second sequence: [1 2 3 4]
Cross correlated sequence, Rxy:
4.0000 7.0000 9.0000 10.0000 6.0000 3.0000 1.0000

Graph:

28
Properties of cross correlation:

1. Rxy(k) is always a real valued function which may be a positive or negative.


2. Rxy(-k) = Ryx(k)
2
3. |Rxy(k)| ≤ Rxx(0) Ryy(0)
4. |Rxy(-k)| ≤[1/2] [Rxy(-k) + Rxy(-k)]
5. When Rxy(k) = 0, x(n) and y(n) are said to be uncorrelated or they said to be
statistically independent.
6. Rxy(k) may not be necessarily have a maximum at k=0 nor Rxy(k) an
even function.

Questions:

1. What is the practical significance of cross-correlation?


2. Write down the differences between autocorrelation and cross-correlation?
3. Perform cross-correlation of the sequences [1 5 2 9 7] and [1 7 4 2 8]?

29
EXPERIMENT NO-7

AIM: COMPUTATION OF THE FACTORED FORM AND TO


GENERATE THE POLE-ZERO PLOT OF THE Z-TRANSFORM.

The z-Transform:

The z-Transform "X(z) of a sequence "x(n)" is defined as:

Where "z" is a complex variable. The set "R" of values of "z" for which the z-transform "X(z)"
converges is called its region of convergence (ROC). In the case of Linear Time Invariant LTI
discrete time system, all pertinent z-transforms are rational functions of z-1, that is, they are
ratios of two polyomials in z-1:

The roots of "N(z)", i.e. the values of "z" for which N(z) = 0, are known as the zeros of the
systems while the roots of "D(z)", i.e.e the values of "z" for D(z) = 0 are know as the poles of the
system. The pole-zero plot of a rational z-transform "X(z)" can be readily obtained using the
function "zplane". There are two versions of this function. If the z-transfrom is given in the form
of a rational function, the command to use is "zplane(num, den)", where "num" and "den" are the
row vectors containing the coefficients of the numerator and denominator polynomials of "X(z)"
in ascending power of z-1. On the other hand, if the zeros and poles of "X(z)" are given, the
command to use is "zplane(zeros, poles)", where "zeros" and "poles" are column vectors. In the
pole-zero plot generated by MATLAB , the location of a pole is indicated by symbol "X" and the
location of a zeros is indicated by the symbol "O". The function "tf2zp" can be used to determine
the zeros and poles of a rational z-transform "X(z)". The program statement to use is "[z, p, k] =
tf2zp(num, den)", where "num" and "den" are the row vectors which

containing the coefficients of the numerator and denominator polynomials of "X(z)" in ascending
powers of z-1 and the output file contains the gain constant "k" and the computed zeros and poles
given as column vectors "z" and "p", respectively. The factored form of the z-transform can be
obtained from the zero-pole description using the function "sos = zp2sos(z, p, k)". The function
computes the coefficients of each second-order factor given as "L X 6" matrix "sos", where:

30
The MATLAB program, given below computes and display the Poles & Zeros, the factored form
and generates the pole-zero plot of the z-transform given by:

Program:
%This program computes and display the Poles & Zeros, the factored
form
%and generates the pole-zero plot of the z-transform. clf;
%Clear all figures
clear all; %Clear all variables close
all; %Close all figures
num = [32 56 4 16 2]; %Numerator coefficients
den = [-12 18 -15 3 3]; %Denominator coefficients %Compute and
display the Poles, Zeros and Gain constant [z,p,k] =
tf2zp(num,den);
disp('Zeros are at'); disp(z);
disp('poles are at'); disp(p);
disp('gain constant'); disp(k);
%Compute and display the factored form of the z-Transform sos=
zp2sos(z,p,k);
disp('Second order sections');
disp(real(sos));
%Pole-Zero Plot
zplane(num,den);
title('Pole-Zero Plot');
grid;

Output:

Zeros are at

-1.8217
0.0972 + 0.5197i

31
0.0972 -
0.5197i -0.1227

poles are at

0.5000 + 0.8660i
0.5000 - 0.8660i
0.8090
-
0.3090

gain constant
-2.6667

Second order sections


-2.6667 -5.1852 -0.5963 1.0000 -0.5000 -0.2500

1.0000 -0.1945 0.2795 1.0000 -1.0000 1.0000

Graph:

Questions:

1. What is pole and zero?


2. Perform Z transform of the sequence [1 5 2 9 7]?
3. Plot ROC curve with pole and zero if numerator=[23 24 56 32 11], and denominator=[3 -9 5 7 -3]

32
EXPERIMENT NO-8

AIM: TO COMPUTE N-POINT DFT OF A GIVEN SEQUENCE AND TO PLOT


MAGNITUDE AND PHASE SPECTRUM.

Discrete Fourier Transform: The Discrete Fourier Transform is a powerful computation



tool which allows us to evaluate the Fourier Transform X(e ) on a digital

computer or specially designed digital hardware. Since X(e ) is continuous and
periodic, the DFT is obtained by sampling one period of the Fourier Transform at a finite
number of frequency points. Apart from determining the frequency content of a signal,
DFT is used to perform linear filtering operations in the frequency domain.

The sequence of N complex numbers x0,..., xN−1 is transformed into the sequence of
N complex numbers X0, ..., XN−1 by the DFT according to the formula:
N-1
X(k) = ∑x(n)e-j2πnk/N k = 0,1, …. N-1
n=0

Example:
Lets assume the input sequence x[n] = [1 1 0 0]

We have,
N-1
X(k) = ∑x(n)e-j2πnk/N k = 0,1, …. N-1 n=0

For k = 0,
3
X(0) = ∑x(n) = x(0) + x(1) + x(2) + x(3)
n=0
X(0) = 1+1+0+0 = 2
For k = 1,
3
X(1) = ∑x(n)e-jπn/2 = x(0) + x(1) e-jπ/2 + x(2) e-jπ + x(3) e-
j3π/2
n=0
= 1 + cos(π/2) - jsin(π/2)
X(1) = 1 – j

33
For k = 2,
3
X(2) = ∑x(n)e-jπn = x(0) + x(1) e-jπ + x(2) e-j2π + x(3) e-
j3π
n=0
= 1 + cos π – jsin π
X(2) = 1-1 = 0

For k = 3,
3
X(3) = ∑x(n)e-j3nπ/2 = x(0) + x(1) e-j3π/2 + x(2) e-j3π + x(3) e-
j9π/2
n=0
= 1 + cos(3π/2) - jsin(3π/2)
X(3) = 1 + j

The DFT of the given sequence is,


X(k) = { 2, 1-j, 0, 1+j }
To find Magnitude of X(k):
Magnitude= (a2+b2)1/2
Where a and b are real and imaginary parts respectively
To fine Phase of X(k):
Phase=tan-1(b/a)

Program:
clc; % Clear screen
x1 = input('Enter the sequence:'); % Get the input sequence
n = input('Enter the length:'); % Get the value of N
m = abs(fft(x1,n)); % Computes the DFT using FFT algorithm
disp('N-point DFT of a given sequence:'); % Display the results
disp(m); % Displays the result on command window
N = 0:1:n-1; % Decides the length to plot the results

subplot(2,2,1); % Divide the figure window to plot the


% results
stem(N,m); % Plots the magnitude spectrum
xlabel('Length'); % Name x-axis as “Length”
ylabel('Magnitude of X(k)'); % Name y-axis as “Magnitude of X(k)”
title('Magnitude spectrum:'); % Title as “Magnitude spectrum”
an = angle(fft(x1,n)); % Get the angle of the output sequence X(k)
disp(an);
subplot(2,2,2); % Divide the figure window to plot the
% results
stem(N, an); % Plots the phase spectrum

34
xlabel('Length'); % Name x-axis as “Length”
ylabel('Phase of X(k)'); % Name y-axis as “Phase of X(k)”
title('Phase spectrum:'); % Title as “Phase spectrum”

Output:

Enter the sequence:[1 1 0 0]


Enter the length:4
Magnitude of X(k)
2.0000 1.4142 0 1.4142

Phase of X(k)
0 -0.7854 0 0.7854

Graph:

Magnitude spectrum: Phase spectrum:


2 1
Magnitude of X(k)

1.5 0.5
Phase of X(k)

1 0

0.5 -0.5

00 1 2 3 -10 1 2 3
Length Length

Questions:

1. What is DFT?
2. Perform Discrete Fourier Transform of the sequence [1 5 2 9 7 3 9 2].
3. Plot Magnitude and phase spectrum.

35
EXPERIMENT NO-9

AIM: LINEAR CONVOLUTION OF TWO GIVEN SEQUENCES USING DFT


AND IDFT

Theory: Convolution is an integral concatenation of two signals. It has many


applications in numerous areas of signal processing. The most popular application is the
determination of the output signal of a linear time-invariant system by convolving the
input signal with the impulse response of the system.
Note that convolving two signals is equivalent to multiplying the Fourier Transform of
the two signals.

Mathematic Formula:
The linear convolution of two continuous time signals x(t) and h(t) is defined by

For discrete time signals x(n) and h(n), is defined by

Where x(n) is the input signal and h(n) is the impulse response of the system.

Example:
x1(n) = {1, 1, 2}
x2(n) = {1, 2}
For linear convolution,
Length N = Length(x1) + Length(x2) - 1
N=3+2–1=4
Convolution of two sequences x1(n) and x2(n) is,
x3(n) = IDFT[X3(k)]
x3(n) = IDFT[X1(k) X2(k)]
Where,
X1(k) = DFT [x1(n)]

X2(k) = DFT [x2(n)]

36
N-1
X1(k) = ∑ x1(n)e-j2πkn/N k= 0, 1, 2, … , N-1
n=0

Given x1(n) = {1, 1, 2} and N=4

3
X1(0) = ∑ x1(n) = 1 + 1 + 2 = 4
n=0

5
X1(1) = ∑ x1(n)e-jπn/2 = 1 – j – 2 = -1 - j
n=0

5
X1(2) = ∑ x1(n)e-jπn = 1 – 1 + 2 = 2
n=0

5
X1(3) = ∑ x1(n)e-j3πn/2 = 1 + j – 2 = -1 + j
n=0

X1(k) = {4, -1-j, 2, -1+j}

Now,
N-1
X2(k) = ∑ x2(n)e-j2πkn/N k= 0, 1, 2, … , N-1
n=0

Given x2(n) = {1, 2} and N=4

3
X2(0) = ∑ x2(n) = 1 + 2 = 3
n=0

37
3
X2(1) = ∑ x2(n) e-jπn/2 = 1 + 2(-j) = 1 - j2
n=0

3
X2(2) = ∑ x2(n) e-jπn = 1 + 2(-1) = -1
n=0

3
X2(3) = ∑ x2(n) e-j3πn/2 = 1 + 2(j) = 1 + j2
n=0

X2(k) = {3, 1-j2, -1, 1+j2}

We know that,
X3(k) = X1(k) X2(k)
X3(k) = {12, -3+j, -2, -3-j}
Convolution of two given sequences
is, x3(n) = IDFT[X3(k)]

N-1
x3(n) = (1/N) ∑ X3(k)ej2πkn/N n = 0, 1, 2, …. , N-1
k=0

3
x3(0) = (1/4) ∑ X3(k) = (1/4) [12 – 3 +j -2 -3 –j] = 1
k=0

3
x3(1) = (1/4) ∑ X3(k)ejπk/2
k=0
x3(1) = (1/4) [12 + (-3 + j) j + (-2) (-1) + (-3 - j) (-j)] = 3
3
x3(2) = (1/4) ∑ X3(k)ejπk
k=0

x3(2) = (1/4) [12 + (-3 + j) (-1) + (-2) (1) + (-3 - j) (-1)] = 4

38
3
x3(3) = (1/4) ∑ X3(k)ej3πk/2
k=0

x3(3) = (1/4) [12 + (-3 + j) (-j) + (-2) (-1) + (-3 - j) (j)] = 4

Convoluted sequence of two given sequences is,


x3(n) = {1, 3, 4, 4}

Program:
clc; % Clear screen
x1 = input('Enter the 1st seq:'); % Get the first sequence
x2 = input('Enter the 2nd seq:'); % Get the second sequence
n = length(x1) + length(x2)-1; % Get the length of the sequence
x1 = fft(x1,n); % Compute the DFT of x1 using FFT algorithm
x2 = fft(x2,n); % Compute the DFT of x2 using FFT algorithm
y = x1.*x2; % Multiply two DFT’s
yc = ifft(y,n); % Compute IDFT using IFFT algorithm
disp('Linear convolution using DFT and IDFT:'); % Display Linear convolution
disp(yc); % Displays the result on command window
N = 0:1:n-1; % Defines the length of x-axis to plot the result
subplot(1,1,1); % Divide the window to plot the result
stem(N,yc); % Plots the result
xlabel('Time'); % Name the x-axis as Time
ylabel('Magnitude'); % Name the y-axis as Magnitude
title('Linear convolution using DFT and IDFT:'); % Title

Output:
Enter the 1st seq: [1 1 2]
Enter the 2nd seq: [1 2]
Linear convolution using DFT and IDFT:
1344

39
Graph:

Questions:

1. Perform linear convolution of these two sequences x= [1 5 2 9 7] and y= [1 3 7 8].


2. Perform IDFT of the multiplied result of two DFT sequences obtained from x and y.
3. Explain why the result of Q1 and Q2 is same.

40
EXPERIMENT NO-10

AIM: TO IMPLEMENT CIRCULAR CONVOLUTION OF TWO GIVEN


SEQUENCES USING DFT AND IDFT

Circular convolution:
Let x1(n) and x2(n) are finite duration sequences both of length N with DFT’s
X1(k) and X2(k). Convolution of two given sequences x1(n) and x2(n) is given by,
x3(n) = IDFT[X3(k)]
x3(n) = IDFT[X1(k) X2(k)]
Where,
X1(k) = DFT [x1(n)]
X2(k) = DFT [x2(n)]
Example:
x1(n) = {1, 1, 2, 1}
x2(n) = {1, 2, 3, 4}
N-1
X1(k) = ∑ x1(n)e-j2πkn/N k= 0, 1, 2, … , N-1
n=0

Given x1(n) = {1, 1, 2, 1} and N=4

3
X1(0) = ∑ x1(n) = 1 + 1 + 2 + 1 = 5
n=0

3
X1(1) = ∑ x1(n)e-jπn/2 = 1 – j – 2 + j = -1
n=0

3
X1(2) = ∑ x1(n)e-jπn = 1 – 1 + 2 - 1 = 1
n=0

3
X1(3) = ∑ x1(n)e-j3πn/2 = 1 + j - 2 - j = -1
n=0

41
X1(k) = {5, -1, 1, -1}

Now,
N-1
X2(k) = ∑ x2(n)e-j2πkn/N k= 0, 1, 2, … , N-1
n=0

Given x2(n) = {1, 2, 3, 4} and N=4

3
X2(0) = ∑ x2(n) = 1 + 2 + 3 + 4 = 10
n=0

3
X2(1) = ∑ x2(n) e-jπn/2 = 1 + 2(-j) + 3(-1) + 4(j) = -2 + j2
n=0

3
X2(2) = ∑ x2(n) e-jπn = 1 + 2(-1) + 3(1) + 4(-1) = -2
n=0

3
X2(3) = ∑ x2(n) e-j3πn/2 = 1 + 2(j) + 3(-1) + 4(-j) = -2 – j2
n=0

X2(k) = {10, -2+j2, -2, -2-j2}

We know that,
X3(k) = X1(k) X2(k)
X3(k) = {50, 2 – j2, -2, 2 + j2}

Convolution of two given sequences


is, x3(n) = IDFT[X3(k)]

N-1
x3(n) = (1/N) ∑ X3(k)ej2πkn/N n = 0, 1, 2, …. , N-1
k=0

42
3
x3(0) = (1/4) ∑ X3(k) = (1/4) [50 + 2 - j2 – 2 + 2 + j2] = 13
k=0

3
x3(1) = (1/4) ∑ X3(k)ejπk/2
k=0
x3(1) = (1/4) [50 + (2 - j2) j + (-2) (-1) + (2 + j2) (-j)] = 14
3
x3(2) = (1/4) ∑ X3(k)ejπk
k=0

x3(2) = (1/4) [50 + (2 - j2) (-1) + (-2) (1) + (2 + j2) (-1)] = 11

3
x3(3) = (1/4) ∑ X3(k)ej3πk/2
k=0
x3(3) = (1/4) [50 + (2 - j2) (-j) + (-2) (-1) + (2 + j2) (j)] = 12
Convoluted sequence of two given sequences is,
x3(n) = {13, 14, 11, 12}

Program:
clc; % Clear screen
x1 = input('Enter 1st sequence:'); % Get the first sequence x2
= input('Enter 2nd sequence:'); % Get the second sequence
n = max(length(x1), length(x2)); % Get the maximum length of the two sequences
x1 = fft(x1,n); % Compute the DFT of the x1 using FFT algorithm
x2 = fft(x2,n); % Compute the DFT of the x2 using FFT algorithm
y = x1.*x2; % Multiply two DFT’s
yc = ifft(y,n); % Compute the IDFT of mutliplied sequence to get the convoluted sequence

disp('Circular convolution using DFT and IDFT:'); % Displays Circular convolution


disp(yc); % Displays the result on command window
N = 0:1:n-1; % Defines the length of x-axis to plot the result
subplot(1,1,1); % Divide the window to plot the result
stem(N,yc); % Plots the results
xlabel('Time'); % Name the x-axis as “Time”
ylabel('Magnitude');% Name the y-axis as “Magnitude”
title('Circular convolution using %DFT and IDFT:'); % Title

43
Output:

Enter 1st sequence:[1 1 2 1]


Enter 2nd sequence:[1 2 3 4]
Circular convolution using DFT and IDFT:
13 14 11 12

Graph:

Questions:

1. Perform circular convolution of these two sequences x= [4 1 2 5] and y= [1 3 6 2].


2. Perform IFFT of the multiplied result of two FFT sequences obtained from x and y.
3. Explain why the result of Q1 and Q2 is same.

44
EXPERIMENT NO-11

AIM: DESIGN AND IMPLEMENTATION OF FIR FILTER TO MEET GIVEN


SPECIFICATIONS (LOW PASS FILTER USING HAMMING WINDOW)

Finite Impulse Response (FIR) Filter: The FIR filters are of non-recursive type,
whereby the present output sample is depending on the present input sample and previous
input samples.
The transfer function of a FIR causal filter is given
by, N-1
H(z) = ∑ h(n)z -n
n=0

Where h(n) is the impulse response of the filter.

The Fourier transform of h(n) is


N-1

H(ejw) = h(n)e-jwn
n=0

In the design of FIR filters most commonly used approach is using windows.
jw
The desired frequency response Hd(e ) of a filter is periodic in frequency and can
be expanded in Fourier series. The resultant series is given by,
π
hd(n) = (1/2π) ∫ H(ejw)ejwn dw

And known as Fourier coefficients having infinite length. One possible way of obtaining
FIR filter is to truncate the infinite Fourier series at n = ± [(N-1)/2]
Where N is the length of the desired sequence.
The Fourier coefficients of the filter are modified by multiplying the infinite
impulse response with a finite weighing sequence w(n) called a window.

Where w(n) = w(-n) ≠ 0 for |n| ≤ [(N-1)/2]


=0 for |n| > [(N-1)/2]
After multiplying w(n) with hd(n), we get a finite duration sequence h(n) that satisfies
the desired magnitude response,

h(n) = hd(n) w(n) for |n| ≤ [(N-1)/2]


=0 for |n| > [(N-1)/2]

45
jw
The frequency response H(e ) of the filter can be obtained by convolution of
Hd(ejw) and W(ejw) is given by,
π
H(ejw) = (1/2π) ∫ Hd(ejθ) W(ej(w-θ) dθ

H(ejw) = Hd(ejw) * W(ejw)

Example:
Here we design a lowpass filter using hamming window.
Hamming window function is given by,

wH(n) = 0.54 + 0.46 cos ((2πn)/(N-1)) for –(N-1)/2 ≤ n ≤ (N-1)/2

=0 otherwise

The frequency response of Hamming window is,

WH(ejw ) = 0.54[(sin(wN/2))/(sin(w/2))]
+ 0.23[sin (wN/2 – πN/N – 1)/sin (w/2 – π/N -1)]
+ 0.23[sin (wN/2 + πN/N – 1)/sin (w/2 + π/N – 1)]
Program:
clc; % Clear screen
wp = input('Pass band edge freq:'); % Get Passband edge frequency
ws = input('Stop band edge freq:'); % Get Stopband edge frequency
tw = ws-wp; % Subtract PB frequency from SB frequency

N = ceil(6.6*pi/tw)+1; % Compute length


wn = (hamming(N)); % Returns N-point symmetric hamming window in
% column vector
B = fir1(N-1,wp,wn); % Designs (N-1)th order lowpass FIR filter and
% returns filter coefficients in length N in vector B
disp('Impulse response coeff='); % Displays Impulse response coefficients
disp(B); % Displays the coefficients on command window
[H,w] = freqz(B,1,256); % Digital filter frequency response. This function
% returns the N-point complex frequency response
% vector H and the N-point frequency vector w in
% radians/sample of the filter.
Mag = 20*log10(abs(H)); % Get the magnitude
plot(w/pi*pi, Mag); % Plot the Magnitude spectrum
xlabel(‘Frequency in radians in terms of pi'); % Name x-axis
ylabel('Gain in db'); % Name y-axis as “Gain in db”

46
Output:

Pass band edge freq: 0.05*pi


Stop band edge freq: 0.4*pi
Impulse response coeff=
Columns 1 through 7

-0.0027 -0.0035 -0.0041 -0.0010 0.0105 0.0333 0.0666

Columns 8 through 14

0.1046 0.1383 0.1580 0.1580 0.1383 0.1046 0.0666

Columns 15 through 20

0.0333 0.0105 -0.0010 -0.0041 -0.0035 -0.0027

Graph:

Questions:

1. What do you mean by FIR filter?


2. Find the impulse response coefficient having edge and stop frequency are .03pi and .5pi respectively.
3. Plot Gain vs. Frequency curve of the FIR filter specified in Q2.

47
EXPERIMENT NO-12

AIM: DESIGN AND IMPLEMENTATION OF IIR FILTER TO MEET GIVEN


SPECIFICATIONS

Basically digital filter is a linear time-invariant discrete time system.


Infinite Impulse Response(IIR) filter: IIR filters are of recursive type, whereby the
present output sample depends on the present input, past input samples and output
samples.
The impulse response h(n) for a realizable filter is,
h(n) = 0 for n≤0
And for stability, it must satisfy the condition,

∑ | h(n) | < ∞
n=0

Example:
Let’s design an analog Butterworth lowpass filter.
Steps to design an analog Butterworth lowpass filter.
1. From the given specifications find the order of the filter N.
2. Round off it to the next higher integer.
3. Find the transfer function H(s) for Ωc = 1rad/sec for the value of N.
4. calculate the value of cutoff frequency Ωc
5. find the transfer function Ha(s) for the above value of Ωc by substituting
s→ (s/ Ωc) in H(s).

Program:

clc; % Clear screen


Pa = input('Passband attenuation in DB:'); % Get the passband attenuation
Sa = input('Stopband attenuation in DB:'); % Get the stopband attenuation
Fpb = input('Passband edge frequency in Hz:'); % Get Passband edge frequency
Fsb = input('Stopband edge frequency in Hz:'); % Get Stopband edge frequency
fs = input('Sampling frequency:'); % Get Sampling frequency

wp = 2*Fpb/fs; % Convert PB edge frequency in Hz to radians


ws = 2*Fsb/fs; % Convert SB edge frequency in Hz to radians

[N,wn] = buttord(wp,ws,Pa,Sa); % Find cutoff frequency and order of the filter


disp('Order:'); % Display the Order
disp(N); % Display order N on command window
disp('Cutoff frequency:'); % Display Cutoff frequency
disp(wn); % Display Cutoff frequency on command window

48
[b,a] = butter(N,wn); % Get Numerator and denominator coefficients of
% the filter
disp('b='); disp(b); % Display the numerator coefficients on command
% window
disp('a='); disp(a); % Display the denominator coefficients on
% command window
w = 0:0.01:pi; % Defines length for x-axis to plot the result
[h,om] = freqz(b,a,w,'whole'); % Frequency response of the filter
m = 20*log10(abs(h)); % Absolute value of the frequency response vector
an = angle(h); % Get the phase of the frequency response vector

subplot(2,1,1); % Divide the figure window to plot the frequency


% response
plot(om/pi,m); % Plot the response
xlabel('Normalised frequency:'); % Name x-axis as “Normalised frequency”
ylabel('Gain in db:'); % Name y-axis as “ Gain in db”
title(‘Frequency Response:’); % Title as Frequency Response
subplot(2,1,2); % Divide the figure window
plot(om/pi,an); % Plot the Phase spectrum
xlabel('Normalised frequency:'); % Name x-axis as “Normalised frequency”
ylabel('Phase in radians:'); % Name y-axis as Phase in radians
title(‘Phase spectrum’); % Title as Phase spectrum

Output:

Passband attenuation in DB:4


Stopband attenuation in DB:30
Passband edge frequency in Hz:400
Stopband edge frequency in Hz:800
Sampling frequency:2000
Order:
3

Cutoff frequency:
0.4914

b=
0.1600 0.4800 0.4800 0.1600

a=
1.0000 -0.0494 0.3340 -0.0045

49
Graph:

Questions:

1. Plot gain and phase response with respect to frequency for an IIR filter having
passband attenuation of 3dB ,stopband attenuation of 40dB,sampling frequency is 3000Hz,
passband edge frequency is 300Hz and stopband edge frequency is 900Hz.

50

You might also like