You are on page 1of 82

Scilab Code for

Digital Signal Processing


Principles, Algorithms and Applications
by J. G. Proakis & D. G. Manolakis1
Created by
Prof. R. Senthilkumar
Institute of Road and Transport Technology
rsenthil signalprocess@in.com
Cross-Checked by
Mrs. Phani Swathi Chitta
Research Scholar, IITB
under the guidance of
Prof. Saravanan Vijayakumaran, IIT Bombay
sarva@ee.iitb.ac.in
23 August 2010

1 Funded

by a grant from the National Mission on Education through ICT,


http://spoken-tutorial.org/NMEICT-Intro.This text book companion and Scilab
codes written in it can be downloaded from the Textbook Companion Project
Section at the website http://scilab.in/

Book Details
Authors: J. G. Proakis and D. G. Manolakis
Title: Digital Signal Processing
Publisher: Prentice Hall India
Edition: 3rd
Year: 1997
Place: New Delhi
ISBN: 81-203-1129-9

Scilab numbering policy used in this document and the relation to the
above book.
Prb Problem (Unsolved problem)
Exa Example (Solved example)
Eqn Equation (Particular equation of the above book)
ARC Additionally Required Code (Scilab Code that is not part of the above
book but required to solve a particular Example)
AE Appendix to Example(Scilab Code that is an Appednix to a particular
Example of the above book)
CF Code for Figure(Scilab code that is used for plotting the respective figure
of the above book )
For example, Prb 4.56 means Problem 4.56 of the above book. Exa 3.51
means solved example 3.51 of this book. Sec 2.3 means a scilab code whose
theory is explained in Section 2.3 of the book.

Contents
List of Scilab Codes

1 Introduction
1.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

2
2

2 Discrete Time Signals and Systems


2.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
3

3 The z Transformation and its Applications to the Analysis


of LTI Systems
3.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

8
8

4 Frequency Analysis of Signal and Systems


4.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
15

5 Discrete Fourier Transform: its Properties and Applications


22
5.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
6 Efficient Computation of DFT: Fast Fourier Transform, Algorithms
27
6.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
7 Implementation of Discrete Time System
7.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

30
30

8 Design of Digital Filters


8.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

33
33

10 Multirate Digital Signal Processing


10.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

52
52

11 Linear Predictions and Optimum Linear Filter


11.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

59
59

12 Power Spectrum Estimation


12.1 Scilab Code . . . . . . . . . . . . . . . . . . . . . . . . . . .

60
60

List of Scilab Codes


Eqn 1.2.1 Discrete time signal . . . . . . . . .
Eqn 2.1.6 Unit sample sequence . . . . . . . .
Eqn 2.1.7 Unit step sequence . . . . . . . . . .
Eqn 2.1.8 Unit ramp sequence . . . . . . . . .
Eqn 2.1.9a Exponential sequence . . . . . . . .
Eqn 2.1.9b Exponential increasing sequence . .
Eqn 2.1.9c Exponential decreasing sequence . .
Eqn 2.1.24 Even signal . . . . . . . . . . . . . .
Eqn 2.1.25 Odd signal . . . . . . . . . . . . . .
Exa 3.1.1 Direct Ztransform . . . . . . . . . .
Exa 3.1.2 Z transform . . . . . . . . . . . . . .
Exa 3.1.4 Z transform . . . . . . . . . . . . . .
Exa 3.1.5 Z transform . . . . . . . . . . . . . .
Exa 3.2.1 Z transform . . . . . . . . . . . . . .
Exa 3.2.2 Sinusoidal Signals . . . . . . . . . .
Exa 3.2.3 Time Shifting Property . . . . . . .
Exa 3.2.4 Z transform . . . . . . . . . . . . . .
Exa 3.2.6 Z transform . . . . . . . . . . . . . .
Exa 3.2.7 Z transform . . . . . . . . . . . . . .
Exa 3.2.9 Convolution . . . . . . . . . . . . . .
Exa 3.2.10 Autocorrelation . . . . . . . . . . . .
ARC 3A Ztransfer . . . . . . . . . . . . . . .
Exa 4.1.2 Fourier Transform . . . . . . . . . .
Exa 4.2.7 Continuous Time Fourier Transform
Exa 4.3.4 Convolution Property . . . . . . . .
Exa 4.4.2 Frequency Response . . . . . . . . .
Exa 4.4.4 Frequency Response . . . . . . . . .
Exa 5.1.2 Discrete Fourier Transform . . . . .
5

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

2
3
3
4
4
5
5
6
6
8
9
9
10
10
10
11
12
12
12
13
13
14
15
16
17
19
20
22

Exa 5.1.3
Exa 5.2.1
Exa 5.3.1
Exa 5.4.1
Exa 6.4.1
Exa 6.4.2
Prb 6.8
Prb 6.11
Exa 7.6.3
Eqn 7.7.1
Exa 7.7.1
Eqn 7.7.40
Exa 8.2.1
Exa 8.2.2
Exa 8.2.3
Exa 8.2.4
Exa 8.2.5
Exa 8.2.6
Eqn 8.2.28
Exa 8.3.2
Exa 8.3.4
Exa 8.3.5
Exa 8.3.6
Exa 8.3.7
Exa 8.4.1
Exa 8.4.2
CF 8.5
CF 8.6
CF 8.7
Exa 10.5.1
Exa 10.5.2
Exa 10.6.1
Exa 10.8.1
Exa 10.8.2
Exa 10.9.1
Exa 11.6.1
Exa 12.1.1
Exa 12.1.2

Discrete Fourier Transform . . . . . .


Example 5.2.1 and 5.2.2 . . . . . . . .
Linear Filtering DFT . . . . . . . . .
Zero Padding . . . . . . . . . . . . . .
SNR DFT . . . . . . . . . . . . . . .
SNR FFT Algorithm . . . . . . . . . .
FFT Exercise1 . . . . . . . . . . . . .
FFT Exercise2 . . . . . . . . . . . . .
Coeffecient Quantization NOise . . .
Dead Band . . . . . . . . . . . . . . .
Round off noise variance . . . . . . . .
SQNR . . . . . . . . . . . . . . . . . .
Design of Filter . . . . . . . . . . . . .
Design of Filter . . . . . . . . . . . . .
Remez Algorithm Based . . . . . . . .
Remez Algorithm Based . . . . . . . .
FIR Differentiator . . . . . . . . . . .
Hilbert Transform . . . . . . . . . . .
Design of Filter . . . . . . . . . . . . .
Analog to Digital . . . . . . . . . . . .
Analog to Digital . . . . . . . . . . . .
Analog to Digital . . . . . . . . . . . .
IIR Filter Design Butterworth Filter .
IIR Filter Design . . . . . . . . . . . .
Digital IIR Butterworth Filter . . . .
IIR Filter Design Butterworth Filter .
Window Functions . . . . . . . . . . .
Window Functions . . . . . . . . . . .
Window Functions . . . . . . . . . . .
FIR Decimation . . . . . . . . . . . .
FIR Interpolation . . . . . . . . . . .
Sampling Rate Conversion Decimation
Signal Distortion Ratio . . . . . . . .
Signal Distortion Ratio . . . . . . . .
Sampling Rate Conversion Decimation
Wiener Filter . . . . . . . . . . . . . .
Spectrum of Signal . . . . . . . . . . .
Spectrum using DFT . . . . . . . . .
6

. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Interpolation
. . . . . . . .
. . . . . . . .
. . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

23
23
24
25
27
27
28
28
30
30
31
32
33
34
35
36
37
38
40
41
41
42
43
45
46
47
49
49
50
52
53
54
56
56
57
59
60
61

Exa 12.5.1 Additive Noise Parameters . . . . .


AE 4.2.7 Discrete Time Fourier Transform . .
ARC 4A sinc . . . . . . . . . . . . . . . . . .
AE 4.4.2 Frequency response . . . . . . . . .
AE 8.2.28ADesign of Filter . . . . . . . . . . . .
AE 8.2.28BDesign of Filter . . . . . . . . . . . .
AE 8.2.28CDesign of Filter . . . . . . . . . . . .
AE 8.3.5 First Order Butterworth Filter . . .
AE 8.3.6 IIR Butterworth Filter . . . . . . . .
AE 8.4.1 First Order Butterworth Filter . . .
AE 8.4.2A IIR Filter Design Butterworth Filter
AE 8.4.2B IIR Filter Design Butterworth Filter

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

63
65
66
66
67
68
70
71
72
73
73
74

Chapter 1
Introduction
Install Symbolic Toolbox.Refer the spoken tutorial on the link (www.spokentutorial.org) for the installation of Symbolic Toolbox.

1.1

Scilab Code

Scilab code Eqn 1.2.1 Discrete time signal as implemented in the book
on Page 9
// I m p l e m e n t a t i o n o f E q u a t i o n 1 . 2 . 1 i n C h a p t e r 1
// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
3 // Page 9
1
2

4
5
6
7
8
9
10
11
12

clear ; clc ; close ;


n = 0:10;
x = (0.8) ^ n ;
// p l o t 2 d 4 ( n , x )
a = gca () ;
a . thickness = 2;
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f D i s c r e t e Time
S i g n a l , n , x [ n ] );

Chapter 2
Discrete Time Signals and
Systems
2.1

Scilab Code

Scilab code Eqn 2.1.6 Unit sample sequence, also known as unit impulse
sequence and delta sequence
// I m p l e m e n t a t i o n o f E q u a t i o n 2 . 1 . 6 i n C h a p t e r 2
// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
3 // Page 45
1
2

4
5
6
7
8
9
10
11
12
13

clear ; clc ; close ;


L = 4; // U p p e r l i m i t
n = -L : L ;
x = [ zeros (1 , L ) ,1 , zeros (1 , L ) ];
a = gca () ;
a . thickness = 2;
a . y_location = m i d d l e ;
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f U n i t Sample
Sequence , n , x [ n ] );
Scilab code Eqn 2.1.7 Unit step sequence
3

// I m p l e m e n t a t i o n o f E q u a t i o n 2 . 1 . 7 i n C h a p t e r 2
// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
3 // Page 45
1
2

4
5
6
7
8
9
10
11
12
13

clear ; clc ; close ;


L = 4; // U p p e r l i m i t
n = -L : L ;
x = [ zeros (1 , L ) , ones (1 , L +1) ];
a = gca () ;
a . thickness = 2;
a . y_location = m i d d l e ;
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f U n i t S t e p S i g n a l
, n , x [ n ] );
Scilab code Eqn 2.1.8 Unit ramp sequence

// I m p l e m e n t a t i o n o f E q u a t i o n 2 . 1 . 8 i n C h a p t e r 2
// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
3 // Page 45
1
2

4
5
6
7
8
9
10
11
12
13

clear ; clc ; close ;


L = 4; // U p p e r l i m i t
n = -L : L ;
x = [ zeros (1 , L ) ,0: L ];
a = gca () ;
a . thickness = 2;
a . y_location = m i d d l e ;
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f U n i t Ramp S i g n a l
, n , x [ n ] );
Scilab code Eqn 2.1.9a Exponential sequence

// I m p l e m e n t a t i o n o f E q u a t i o n 2 . 1 . 9 i n C h a p t e r 2
4

2
3
4
5
6
7
8
9
10
11
12
13

// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
// Page 46
clear ;
clc ;
close ;
a =1.5;
n =1:10;
x = (a)^n;
a = gca () ;
a . thickness = 2;
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f E x p o n e n t i a l
S i g n a l , n , x [ n ] );
Scilab code Eqn 2.1.9b Exponential increasing sequence

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// I m p l e m e n t a t i o n o f E q u a t i o n 2 . 1 . 9 b i n C h a p t e r 2
// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
// Page 46
// a < 0
clear ;
clc ;
close ;
a = -1.5;
n = 0:10;
x = (a)^n;
a = gca () ;
a . thickness = 2;
a . x_location = o r i g i n ;
a . y_location = o r i g i n ;
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f E x p o n e n t i a l
I n c r e a s i n g D e c r e a s i n g S i g n a l , n , x [ n ] ) ;
Scilab code Eqn 2.1.9c Exponential decreasing sequence
5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

// I m p l e m e n t a t i o n o f E q u a t i o n 2 . 1 . 9 c i n C h a p t e r 2
// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
// Page 46
// a < 1
clear ;
clc ;
close ;
a =0.5;
n = 0:10;
x = (a)^n;
a = gca () ;
a . thickness = 2;
a . x_location = m i d d l e ;
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f E x p o n e n t i a l
D e c r e a s i n g S i g n a l , n , x [ n ] );
Scilab code Eqn 2.1.24 Even signal

// I m p l e m e n t a t i o n o f E q u a t i o n 2 . 1 . 2 4 i n C h a p t e r 2
// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
3 // Page 51
1
2

4
5
6
7
8
9
10
11
12
13

clear ; clc ; close ;


n = -7:7;
x1 = [0 0 0 1 2 3 4];
x = [ x1 ,5 , x1 ( length ( x1 ) : -1:1) ];
a = gca () ;
a . thickness = 2;
a . y_location = m i d d l e ;
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f Even S i g n a l , n
, x [ n ] );
Scilab code Eqn 2.1.25 Odd signal
6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

// I m p l e m e n t a t i o n o f E q u a t i o n 2 . 1 . 2 5 i n C h a p t e r 2
// D i g i t a l S i g n a l P r o c e s s i n g by P r o a k i s , T h i r d
E d i t i o n , PHI
// Page 51
clear ;
clc ;
close ;
n = -5:5;
x1 = [0 1 2 3 4 5];
x = [ - x1 ( $ : -1:2) , x1 ];
a = gca () ;
a . thickness = 2;
a . y_location = m i d d l e ;
a . x_location = m i d d l e
plot2d3 ( gnn ,n , x )
xtitle ( G r a p h i c a l R e p r e s e n t a t i o n o f ODD S i g n a l ,
n ,
x [ n ] );

Chapter 3
The z Transformation and its
Applications to the Analysis of
LTI Systems
3.1

Scilab Code

Scilab code Exa 3.1.1 Z transform of Finite duration signals


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// Example 3 . 1 . 1
//Z T r a n s f o r m o f F i n i t e D u r a t i o n S I g n a l s
clear all ;
clc ;
close ;
x1 = [1 ,2 ,5 ,7 ,0 ,1];
n1 = 0: length ( x1 ) -1;
X1 = ztransfer_new ( x1 , n1 )
x2 = [1 ,2 ,5 ,7 ,0 ,1];
n2 = -2:3;
X2 = ztransfer_new ( x2 , n2 )
x3 =[0 ,0 ,1 ,2 ,5 ,7 ,0 ,1];
n3 = 0: length ( x3 ) -1;
X3 = ztransfer_new ( x3 , n3 )
x4 = [2 ,4 ,5 ,7 ,0 ,1];
n4 = -2:3;

17
18
19
20
21

X4
x5
n5
X5
x6

22 n6
23 X6
24 x7
25 n7
26 X7

= ztransfer_new ( x4 , n4 )
= [1 ,0 ,0]; // S ( n ) U n i t I m p u l s e s e q u e n c e
= 0: length ( x5 ) -1;
= ztransfer_new ( x5 , n5 )
= [0 ,0 ,0 ,1]; // S ( n 3) u n i t i m p u l s e s e q u e n c e
shifted
= 0: length ( x6 ) -1;
= ztransfer_new ( x6 , n6 )
= [1 ,0 ,0 ,0]; // S ( n+3) U n i t i m p u l s e s e q u e n c e
shifted
= -3:0;
= ztransfer_new ( x7 , n7 )

*Refer to the following for Scilab code of ztransfer new


ARC 3A

Scilab code Exa 3.1.2 Z transform of x(n) = 0.5n .u(n)


1 // Example 3 . 1 . 2
2 //Z t r a n s f o r m o f x [ n ] = ( 0 . 5 ) n . u [ n ]
3 clear all ;
4 clc ;
5 close ;
6 syms n z ;
7 x =(0.5) ^ n
8 X = symsum ( x *( z ^( - n ) ) ,n ,0 , %inf )
9 disp (X , a n s= )

Scilab code Exa 3.1.4 Z transform of x(n) = alphan


1 // Example 3 . 1 . 4
2 //Z t r a n s f o r m o f x [ n ] = a l p h a n . u[n 1]
3 // a l p h a = 0 . 5
4 clear all ;
5 close ;
6 clc ;

7 syms n z ;
8 x = -(0.5) ^( - n )
9 X = symsum ( x *( z ^( n ) ) ,n ,1 , %inf )
10 disp (X , a n s= )

Scilab code Exa 3.1.5 Z transform of x(n) = an .u(n) + bn .u(n 1)


1
2
3
4
5
6
7
8
9
10
11
12
13

// Example 3 . 1 . 5
//Z t r a n s f o r m o f x [ n ] = a n . u [ n ]+ b n . u[n 1]
// a = 0 . 5 and b = 0 . 6
clear all ;
close ;
clc ;
syms n z ;
x1 =(0.5) ^( n )
X1 = symsum ( x1 *( z ^( - n ) ) ,n ,0 , %inf )
x2 =(0.6) ^( - n )
X2 = symsum ( x2 *( z ^( n ) ) ,n ,1 , %inf )
X = ( X1 + X2 )
disp (X , a n s= )
Scilab code Exa 3.2.1 Z transform of x(n) = 3.2n .u(n) 4.3n .u(n)

1
2
3
4
5
6
7
8
9
10
11
12

// Example 3 . 2 . 1
//Z t r a n s f o r m o f x [ n ] = 3 . 2 n . u [ n ] 4 . 3 n . u [ n ]
clear all ;
close ;
clc ;
syms n z ;
x1 =(2) ^( n )
X1 = symsum (3* x1 *( z ^( - n ) ) ,n ,0 , %inf )
x2 =(3) ^( n )
X2 = symsum (4* x2 *( z ^( - n ) ) ,n ,0 , %inf )
X = ( X1 - X2 )
disp (X , a n s= )
Scilab code Exa 3.2.2 Z transform of x(n) = cos(W o.n).u(n), y(n) = sin(W o.n).u(n)
10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// Example 3 . 2 . 2
//Z t r a n s f o r m o f x [ n ] = c o s (Wo. n ) . u [ n ]
//Z t r a n s f o r m o f y [ n ] = s i n (Wo. n ) . u [ n ]
clear all ;
close ;
clc ;
syms n z ;
Wo =2;
x1 = exp ( sqrt ( -1) * Wo * n ) ;
X1 = symsum ( x1 *( z ^( - n ) ) ,n ,0 , %inf ) ;
x2 = exp ( - sqrt ( -1) * Wo * n ) ;
X2 = symsum ( x2 *( z ^( - n ) ) ,n ,0 , %inf )
X =( X1 + X2 )
disp (X , a n s= )
Y =(1/(2* sqrt ( -1) ) ) *( X1 - X2 )
disp (Y , a n s= )
Scilab code Exa 3.2.3 Time shifting property of Z transform

1
2
3
4
5
6
7
8
9
10
11
12
13
14

// Example 3 . 2 . 3
// Time S h i f t i n g P r o p e r t y o f Zt r a n s f o r m
clear all ;
clc ;
close ;
x1 = [1 ,2 ,5 ,7 ,0 ,1];
n1 = 0: length ( x1 ) -1;
X1 = ztransfer_new ( x1 , n1 )
// x2 = [ 1 , 2 , 5 , 7 , 0 , 1 ] ;
n2 = 0 -2: length ( x1 ) -1 -2;
X2 = ztransfer_new ( x1 , n2 )
// x3 = [ 0 , 0 , 1 , 2 , 5 , 7 , 0 , 1 ] ;
n3 = 0+2: length ( x1 ) -1+2;
X3 = ztransfer_new ( x1 , n3 )
*Refer to the following for Scilab code of ztransfer new
ARC 3A

11

Scilab code Exa 3.2.4 Z transform of x(n) = u(n)


1 // Example 3 . 2 . 4
2 //Z t r a n s f o r m o f x [ n ] = u [ n ]
3 clear all ;
4 clc ;
5 close ;
6 syms n z ;
7 x =(1) ^ n
8 X = symsum ( x *( z ^( - n ) ) ,n ,0 , %inf )
9 disp (X , a n s= )

Scilab code Exa 3.2.6 Z transform of x(n) = u(n)


1 // Example 3 . 2 . 6
2 //Z t r a n s f o r m o f x [ n ] = u[n ]
3 clear all ;
4 clc ;
5 close ;
6 syms n z ;
7 x =(1) ^ n
8 X = symsum ( x *( z ^( n ) ) ,n ,0 , %inf )
9 disp (X , a n s= )

Scilab code Exa 3.2.7 Z transform of x(n) = n.an .u(n)


1
2
3
4
5
6
7
8
9
10

// Example 3 . 2 . 7
//Z t r a n s f o r m o f x [ n ] = n . a n . u [ n ]
clear all ;
clc ;
close ;
syms n z ;
x =(1) ^ n ;
X = symsum ( x *( z ^( - n ) ) ,n ,0 , %inf )
disp (X , a n s= )
Y = diff (X , z )
12

Scilab code Exa 3.2.9 Convolution Property Proof


1
2
3
4
5
6
7
8
9
10
11
12

// Example 3 . 2 . 9
// C o n v o l u t i o n P r o p e r t y P r o o f
clear all ;
clc ;
close ;
x1 = [1 , -2 ,1];
n1 = 0: length ( x1 ) -1;
X1 = ztransfer_new ( x1 , n1 )
x2 = [1 ,1 ,1 ,1 ,1 ,1];
n2 = 0: length ( x2 ) -1;
X2 = ztransfer_new ( x2 , n2 )
X = X1 .* X2
*Refer to the following for Scilab code of ztransfer new
ARC 3A

Scilab code Exa 3.2.10 Correlation Property Proof


// Example 3 . 2 . 1 0
// C o r r e l a t i o n P r o p e r t y P r o o f
syms n z ;
x1 = (0.5) ^ n
X1 = symsum ( x1 *( z ^( - n ) ) ,n ,0 , %inf )
X2 = symsum ( x1 *( z ^( n ) ) ,n ,0 , %inf )
disp ( X1 , X1 = )
disp ( X2 , X2 = )
X = X1 * X2
disp (X , X= )
// R e s u l t
// Which i s e q u i v a l e n t t o Rxx ( Z ) = 1 / ( 1 0 . 5 ( z+z 1)
+(0.52) )
13 // i . e f o r a = 0 . 5 Rxx ( Z ) = 1/(1 a ( z+z 1)+(a 2 ) )

1
2
3
4
5
6
7
8
9
10
11
12

13

*Refer to the following for Scilab code of ztransfer new


ARC 3A

Scilab code ARC 3A Ztarnsfer of a sequence


1 function [ Ztransfer ]= ztransfer_new ( sequence , n )
2 z = poly (0 , z , r )
3 Ztransfer = sequence *(1/ z ) ^n
4 endfunction

14

Chapter 4
Frequency Analysis of Signal
and Systems
4.1

Scilab Code

Scilab code Exa 4.1.2 Continuous time Fourier transform and Energy Density Function of Square waveform
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

// Example 4 . 1 . 2 C o n t i n u o u s Time F o u r i e r T r a n s f o r m
// and Energy D e n s i t y F u n c t i o n o f a S q u a r e Waveform
// x ( t )= A, from T/2 t o T/2
clear all ;
clc ;
close ;
// Analog S i g n a l
A =1;
// A m p l i t u d e
Dt = 0.005;
T = 4; // Time i n s e c o n d s
t = -T /2: Dt : T /2;
for i = 1: length ( t )
xa ( i ) = A ;
end
//
// C o n t i n u o u s t i m e F o u r i e r T r a n s f o r m
Wmax = 2* %pi *2;
// Analog F r e q u e n c y = 2Hz

15

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

K = 4; k = 0:( K /800) : K ;
W = k * Wmax / K ;
disp ( size ( xa ) )
Xa = xa * exp ( - sqrt ( -1) *t * W ) * Dt ;
Xa = real ( Xa ) ;
W = [ - mtlb_fliplr ( W ) , W (2:501) ]; // Omega from Wmax
t o Wmax
Xa = [ mtlb_fliplr ( Xa ) , Xa (2:501) ];
ESD = Xa ^2; // Energy D e n s i t y Spectrum
subplot (3 ,1 ,1) ;
plot (t , xa ) ;
xlabel ( t i n msec . ) ;
ylabel ( xa ( t ) )
title ( Analog S i g n a l )
subplot (3 ,1 ,2) ;
plot ( W /(2* %pi ) , Xa ) ;
xlabel ( F r e q u e n c y i n Hz ) ;
ylabel ( Xa (jW) )
title ( C o n t i n u o u s t i m e F o u r i e r T r a n s f o r m )
subplot (3 ,1 ,3) ;
plot ( W /(2* %pi ) , ESD ) ;
xlabel ( F r e q u e n c y i n Hz ) ;
ylabel ( SXX )
title ( Energy D e n s i t y Spectrum )
Scilab code Exa 4.2.7 Sampling a Nonbandlimited Signal

1
2
3
4
5
6
7
8
9
10
11

// Example 4 . 2 . 7 S a m p l i n g a N o n b a n d l i m i t e d S i g n a l
// P l o t t i n g C o n t i n u o u s Time F o u r i e r T r a n s f o r m o f
// C o n t i n u o u s Time S i g n a l x ( t )= exp (A a b s ( t ) )
clear all ;
clc ;
close ;
// Analog S i g n a l
A =1;
// A m p l i t u d e
Dt = 0.005;
t = -2: Dt :2;
xa = exp ( - A * abs ( t ) ) ;
16

12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

//
// C o n t i n u o u s t i m e F o u r i e r T r a n s f o r m
Wmax = 2* %pi *2;
// Analog F r e q u e n c y = 2Hz
K = 4;
k = 0:( K /500) : K ;
W = k * Wmax / K ;
Xa = xa * exp ( - sqrt ( -1) *t * W ) * Dt ;
Xa = real ( Xa ) ;
W = [ - mtlb_fliplr ( W ) , W (2:501) ]; // Omega from Wmax
t o Wmax
Xa = [ mtlb_fliplr ( Xa ) , Xa (2:501) ];
subplot (2 ,1 ,1) ;
a = gca () ;
a . x_location = o r i g i n ;
a . y_location = o r i g i n ;
plot (t , xa ) ;
xlabel ( t i n msec . ) ;
ylabel ( xa ( t ) )
title ( Analog S i g n a l )
subplot (2 ,1 ,2) ;
a = gca () ;
a . x_location = o r i g i n ;
a . y_location = o r i g i n ;
plot ( W /(2* %pi ) , Xa ) ;
xlabel ( F r e q u e n c y i n Hz ) ;
ylabel ( Xa (jW) 1 0 0 0 )
title ( C o n t i n u o u s t i m e F o u r i e r T r a n s f o r m )
*For further extension of the exapmle refer to
AE 4.2.7

Scilab code Exa 4.3.4 Convolution Property Example x1(n) = x2(n) =


[1, 1, 1]
1
2

// Example 4 . 3 . 4
// C o n v o l u t i o n P r o p e r t y Example
17

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

// x1 ( n )=x2 ( n )= [ 1 , 1 , 1 ]
clear all ;
clc ;
close ;
n = -1:1;
x1 = [1 ,1 ,1];
x2 = x1 ;
// D i s c r e t e t i m e F o u r i e r t r a n s f o r m
K = 500;
k = 0:1: K ;
w = %pi * k / K ;
X1 = x1 * exp ( - sqrt ( -1) *n * w ) ;
X2 = x2 * exp ( - sqrt ( -1) *n * w ) ;
w = [ - mtlb_fliplr ( w ) , w (2: K +1) ]; // Omega from w t o
w
X1 = [ mtlb_fliplr ( X1 ) , X1 (2: K +1) ];
X2 = [ mtlb_fliplr ( X2 ) , X2 (2: K +1) ];
Freq_X1 = real ( X1 ) ;
Freq_X2 = real ( X2 ) ;
X = X1 .* X2 ;
K1 = length ( X )
k1 = 0:1: K1 ;
w1 = %pi * k1 / K1 ;
w1 = [ -2* mtlb_fliplr ( w ) , 2* w ];
X = [ mtlb_fliplr ( X ) , X (1: K1 ) ];
Freq_X = real ( X ) ;
// Inv X = X. exp ( s q r t ( 1) n w)
x = convol ( x1 , x2 )
// P l o t t i n g Magitude R e s p o n s e s
figure (1)
a = gca () ;
a . x_location = m i d d l e
a . y_location = m i d d l e
a . x_label
a . y_label
plot2d ( w / %pi , Freq_X1 )
x_label = a . x_label
y_label = a . y_label
18

x_label . text =
Frequency in Radians
y_label . text =
X1 (w)
// x l a b e l ( F r e q u e n c y i n Radians )
// y l a b e l ( X1 (w) )
title ( F r e q u e n c y R e s p o n s e )
figure (2)
a = gca () ;
a . x_location = m i d d l e
a . y_location = m i d d l e
a . x_label
a . y_label
plot2d ( w / %pi , Freq_X2 )
x_label = a . x_label
y_label = a . y_label
x_label . text =
Frequency
in Radians
55 y_label . text =
X2 (w)
56 title ( F r e q u e n c y R e s p o n s e )
57 figure (3)
58 a = gca () ;
59 a . y_location = m i d d l e
60 a . x_label
61 a . y_label
62 plot2d ( w1 /(2* %pi ) , Freq_X )
63 x_label = a . x_label
64 y_label = a . y_label
65 x_label . text =
Frequency
in Radians
66 y_label . text =
X(w)
67 title ( F r e q u e n c y R e s p o n s e )

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

Scilab code Exa 4.4.2 Frequency Response of Three point Moving Average System y(n) = (1/3)[x(n + 1) + x(n) + x(n 1)]
1

// Example 4 . 4 . 2

19

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

// F r e q u e n c y R e s p o n s e o f Three p o i n t Moving A v e r a g e
System
// y ( n )= ( 1 / 3 ) [ x ( n+1)+x ( n )+x ( n1) ]
// h ( n ) = [ 1 / 3 , 1 / 3 , 1 / 3 ]
clear all ;
clc ;
close ;
// C a l c u l a t i o n o f I m p u l s e R e s p o n s e
n = -1:1;
h = [1/3 ,1/3 ,1/3];
// D i s c r e t e t i m e F o u r i e r t r a n s f o r m
K = 500;
k = 0:1: K ;
w = %pi * k / K ;
H = h * exp ( - sqrt ( -1) *n * w ) ;
// phasemag u s e d t o c a l c u l a t e p h a s e and m a g n i t u d e i n
dB
[ Phase_H , m ] = phasemag ( H ) ;
H = abs ( H ) ;
subplot (2 ,1 ,1)
plot2d ( w / %pi , H )
xlabel ( F r e q u e n c y i n R a d i a n s )
ylabel ( a b s (H) )
title ( Magnitude R e s p o n s e )
subplot (2 ,1 ,2)
plot2d ( w / %pi , Phase_H )
xlabel ( F r e q u e n c y i n R a d i a n s )
ylabel ( <(H) )
title ( Phase R e s p o n s e )
*For further extension of the exapmle refer to
AE 4.4.2

Scilab code Exa 4.4.4 Frequency Response of First order Difference Equation

20

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

// Example 4 . 4 . 4
// F r e q u e n c y R e s p o n s e o f F i r s t Order D i f f e r e n c e
Equation
// a = 0 . 9 and b = 1a
// I m p u l s e R e s p o n s e h ( n ) = b . ( a n ) . u ( n )
clear all ;
clc ;
close ;
a = input ( E n t e r t h e c o n s t a n t v a l u e o f I s t o r d e r
D i f f e r e n c e Equation );
b= 1-a;
// C a l c u l a t i o n o f I m p u l s e R e s p o n s e
n =0:50;
h = b *( a .^ n ) ;
// D i s c r e t e t i m e F o u r i e r t r a n s f o r m
K = 500;
k = 0:1: K ;
w = %pi * k / K ;
H = h * exp ( - sqrt ( -1) *n * w ) ;
// phasemag u s e d t o c a l c u l a t e p h a s e and m a g n i t u d e i n
dB
[ Phase_H , m ] = phasemag ( H ) ;
H = real ( H ) ;
subplot (2 ,1 ,1)
plot2d ( w / %pi , H )
xlabel ( F r e q u e n c y i n R a d i a n s )
ylabel ( a b s (H) )
title ( Magnitude R e s p o n s e )
subplot (2 ,1 ,2)
plot2d ( w / %pi , Phase_H )
xlabel ( F r e q u e n c y i n R a d i a n s )
ylabel ( <(H) )
title ( Phase R e s p o n s e )

21

Chapter 5
Discrete Fourier Transform: its
Properties and Applications
5.1

Scilab Code

Scilab code Exa 5.1.2 Determination of N-point DFT


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

// Example 5 . 1 . 2
// D e t e r m i n a t i o n o f Np o i n t DFT
// P l o t t i n g Magnitude and Phase s p e c t r u m
clear all ;
clc ;
close ;
L = 10; // Length o f t h e s e q u e n c e
N = 10; // N p o i n t DFT
for n =0: L -1
x ( n +1) = 1;
end
// Computing DFT and IDFT
X = dft (x , -1)
x_inv = abs ( dft (X ,1) )
// Computing Magnitude and Phase Spectrum
// U s i n g DTFT
n = 0: L -1;
K = 500;

22

19 k = 0:1: K ;
20 w = 2* %pi * k / K ;
21 X_W = x * exp ( - sqrt ( -1) *n * w ) ;
22 Mag_X = abs ( X_W ) ;
23 // phasemag u s e d t o c a l c u l a t e p h a s e and m a g n i t u d e i n
24
25
26
27
28
29
30
31
32
33
34

dB
Phase_X = atan ( imag ( X_W ) , real ( X_W ) )
subplot (2 ,1 ,1)
plot2d (w , Mag_X )
xlabel ( F r e q u e n c y i n R a d i a n s )
ylabel ( a b s (X) )
title ( Magnitude R e s p o n s e )
subplot (2 ,1 ,2)
plot2d (w , Phase_X )
xlabel ( F r e q u e n c y i n R a d i a n s )
ylabel ( <(X) )
title ( Phase R e s p o n s e )
Scilab code Exa 5.1.3 Finding DFT and IDFT

1
2
3
4
5
6
7
8
9
10
11
12

// Example 5 . 1 . 3
// F i n d i n g DFT and IDFT
clear all ;
clc ;
close ;
L = 4; // Length o f t h e s e q u e n c e
N = 4; // N p o i n t DFT
x = [0 ,1 ,2 ,3];
// Computing DFT
X = dft (x , -1)
// Computing IDFT
x_inv = real ( dft (X ,1) )
Scilab code Exa 5.2.1 Performing Circular COnvolution Using DFT

1
2
3

// Example 5 . 2 . 1 and Example 5 . 2 . 2


// P e r f o r m i n g C i r c u l a r C O n v o l u t i o n
// U s i n g DFT
23

4
5
6
7
8
9
10
11
12
13
14
15
16
17

clear all ;
clc ;
close ;
L = 4; // Length o f t h e S e q u e n c e
N = 4; // N p o i n t DFT
x1 = [2 ,1 ,2 ,1];
x2 = [1 ,2 ,3 ,4];
// Computing DFT
X1 = dft ( x1 , -1)
X2 = dft ( x2 , -1)
// M u l t i p l i c a t i o n o f 2 DFTs
X3 = X1 .* X2
// C i r c u l a r C o n v o l u t i o n R e s u l t
x3 = abs ( dft ( X3 ,1) )
Scilab code Exa 5.3.1 Performing Linear Filtering (i.e) Linear Convolution Using DFT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

// Example 5 . 3 . 1
// P e r f o r m i n g L i n e a r F i l t e r i n g ( i . e ) L i n e a r
Convolution
// U s i n g DFT
clear all ;
clc ;
close ;
h = [1 ,2 ,3];
// I m p u l s e R e s p o n s e o f LTI System
x = [1 ,2 ,2 ,1]; // I n p u t R e s p o n s e o f LTI System
N1 = length ( x )
N2 = length ( h )
disp ( Length o f Output R e s p o n s e y ( n ) )
N = N1 + N2 -1
// Padding z e r o s t o Make Length o f h and x
// Equal t o l e n g t h o f o u t p u t r e s p o n s e y
h1 = [h , zeros (1 ,8 - N2 ) ]
x1 = [x , zeros (1 ,8 - N1 ) ]
// Computing DFT
H = dft ( h1 , -1)
X = dft ( x1 , -1)
24

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

// M u l t i p l i c a t i o n o f 2 DFTs
Y = X .* H
// L i n e a r C o n v o l u t i o n R e s u l t
y = abs ( dft (Y ,1) )
for i =1:8
if ( abs ( H ( i ) ) <0.0001)
H ( i ) =0;
end
if ( abs ( X ( i ) ) <0.0001)
X ( i ) =0;
end
if ( abs ( y ( i ) ) <0.0001)
y ( i ) =0;
end
end
disp (X , X= )
disp (H , H= )
disp (y , Output r e s p o n s e u s i n g C o n v o l u t i o n f u n c t i o n )
y = convol (x , h )
Scilab code Exa 5.4.1 Effect of Zero padding

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// Example 5 . 4 . 1
// E f f e c t o f Z e r o Padding
clear all ;
clc ;
close ;
L = 100; // Length o f t h e s e q u e n c e
N = 200; // N p o i n t DFT
n = 0: L -1;
x = (0.95) .^ n ;
// Padding z e r o s t o f i n d N = 200 p o i n t DFT
x_padd = [x , zeros (1 ,N - L ) ];
// Computing DFT
X = dft (x , -1) ;
X_padd = dft ( x_padd , -1) ;
subplot (2 ,1 ,1)
plot2d ( X )
25

17
18
19
20
21
22
23
24

xlabel ( K )
ylabel ( X( k ) )
title ( For L =100 and N =100 )
subplot (2 ,1 ,2)
plot2d ( X_padd )
xlabel ( K )
ylabel ( X( k ) z e r o padded )
title ( For L =100 and N =200 )

26

Chapter 6
Efficient Computation of DFT:
Fast Fourier Transform,
Algorithms
6.1

Scilab Code

Scilab code Exa 6.4.1 Calculation of No.of bits required for given Signal
to Quantization Noise Ratio in DFT
1
2
3
4
5
6
7
8
9
10
11
12
13

// Example 6 . 4 . 1
// Program t o C a l c u l a t e No . o f b i t s r e q u i r e d f o r g i v e n
// S i g n a l t o Q u a n t i z a t i o n N o i s e R a t i o
// i n c o m p u t i n g DFT
clear all ;
clc ;
close ;
N = 1024;
SQNR = 30; //SQNR = 30 dB
v = log2 ( N ) ; // number o f s t a g e s
b = ( log2 (10^( SQNR /10) ) +2* v ) /2;
b = ceil ( b )
disp (b , The number o f b i t s r e q u i r e d r o u n d e d t o : )
Scilab code Exa 6.4.2 Calculation of No.of bits required for given Signal
to Quantization Noise Ratio in FFT algorithm
27

1
2
3
4
5
6
7
8
9
10
11
12
13

// Example 6 . 4 . 2
// Program t o C a l c u l a t e No . o f b i t s r e q u i r e d f o r g i v e n
// S i g n a l t o Q u a n t i z a t i o n N o i s e R a t i o
// i n FFT a l g o r i t h m
clear all ;
clc ;
close ;
N = 1024;
SQNR = 30; //SQNR = 30 dB
v = log2 ( N ) ; // number o f s t a g e s
b = ( log2 (10^( SQNR /10) ) + v +1) /2;
b = ceil ( b )
disp (b , The number o f b i t s r e q u i r e d r o u n d e d t o : )
Scilab code Prb 6.8 Program to Calculate DFT using DIF-FFT algorithm

1 // E x e r c i s e 6 . 8
2 // Program t o C a l c u l a t e DFT u s i n g DIFFFT a l g o r i t h m
3 // x [ n ]= 1 , 0<=n<=7
4 clear all ;
5 clc ;
6 close ;
7 x = [1 ,1 ,1 ,1 ,1 ,1 ,1 ,1];
8 X = fft (x , -1)
9 // I n v e r s e FFT
10 x_inv = real ( fft (X ,1) )

Scilab code Prb 6.11 Program to Calculate DFT using DIF-FFT algorithm
1 // E x e r c i s e 6 . 1 1
2 // Program t o C a l c u l a t e DFT u s i n g DIFFFT a l g o r i t h m
3 // x [ n ]= [ 1 / 2 , 1 / 2 , 1 / 2 , 1 / 2 , 0 , 0 , 0 , 0 ]
4 clear all ;
5 clc ;
6 close ;
7 x = [1/2 ,1/2 ,1/2 ,1/2 ,0 ,0 ,0 ,0];
8 X = fft (x , -1)

28

9
10

// I n v e r s e FFT
x_inv = real ( fft (X ,1) )

29

Chapter 7
Implementation of Discrete
Time System
7.1

Scilab Code

Scilab code Exa 7.6.3 Program to Calculate Quantization Noise in FIR


Filter For M = 32 and No.of bits = 12
1
2
3
4
5
6
7
8
9
10

// Example 7 . 6 . 3
// Program t o C a l c u l a t e
Q u a n t i z a t i o n N o i s e i n FIR
Filter
// For M = 32 and No . o f b i t s = 12
clear all ;
clc ;
close ;
b = input ( E n t e r t h e number o f b i t s ) ;
M = input ( E n t e r t h e FIR f i l t e r l e n g t h ) ;
disp ( C o e f f i c i e n t Q u a n t i z a t i o n E r r o r i n FIR F i l t e r )
Sigma_e_square = (2^( -2*( b +1) ) ) * M /12
Scilab code Eqn 7.7.1 Program to find Dead band of First order Recursive System y(n) = ay(n 1) + x(n); a = (1/2)anda = (3/4)

1
2

// E q u a t i o n 7 . 7 . 1
// Program t o f i n d Dead band o f F i r s t o r d e r R e c u r s i v e
System
30

3 // y ( n ) = a y ( n 1)+x ( n ) ; a = ( 1 / 2 ) and a = ( 3 / 4 )
4 clear all ;
5 clc ;
6 close ;
7 a = input ( E n t e r t h e c o n s t a n t v a l u e o f f i r s t
8
9
10
11
12
13
14

R e c u r s i v e system );
b = 4; //No . o f b i t s u s e d t o r e p r e s e n t
Dead_Band = (2^ - b ) *[(1/2) *(1/(1 - a ) ) , -(1/2) *(1/(1 - a ) )
]
// R e s u l t
// For a = ( 1 / 2 )
// Dead Band = [ 0 . 0 6 2 5 0 . 0 6 2 5 ]
// For a = ( 3 / 4 )
// Dead Band = [ 0 . 1 2 5 0 . 1 2 5 ]
Scilab code Exa 7.7.1 Determination of Variance of round-off noise at the
output of cascade realization

1 // Example 7 . 7 . 1
2 // D e t e r m i n a t i o n o f V a r i a n c e o f round o f f n o i s e
3 // a t t h e o u t p u t o f c a s c a d e r e a l i z a t i o n
4 //H1 ( Z ) = 1 / ( 1 ( 1 / 2 ) z 1)
5 //H2 ( Z ) = 1 / ( 1 ( 1 / 4 ) z 1)
6 //H( Z ) = ( 2 / ( 1 ( 1 / 2 ) z 1) ) (1/(1 (1/4) z 1) )
7 clear all ;
8 clc ;
9 close ;
10 a1 = (1/2) ; // p o l e o f f i r s t s y s t e m i n c a s c a d e
11
12
13
14
15
16

connection
a2 = (1/4) ; // p l o e o f s e c o n d s y s t e m i n c a s c a d e
connection
sigma_e = 1; // q u a n t i z a t i o n n o i s e v a r i a n c e
// N o i s e v a r i a n c e o f H1 ( Z )
sigma_2 = (1/(1 - a2 ^2) ) * sigma_e ^2 // n o i s e v a r i a n c e o f
second system
// N o i s e v a r i a n c e o f H2 ( Z )
sigma_1 = 1/(1 - a1 ^2) * sigma_e ^2 // n o i s e v a r i a n c e o f
f i r s t system
31

17
18
19
20
21
22
23
24

// N o s i e v a r i a n c e o f H( Z )
sigma = (((2^2) /(1 - a1 ^2) ) -((2^2) /(1 - a1 * a2 ) ) +(1/(1 - a2
^2) ) ) * sigma_e ^2
noise_variance = sigma + sigma_2 // T o t a l n o i s e
variance
// R e s u l t
1.0666667
// s i g m a 2 =
// s i g m a 1 =
1.3333333
// s i g m a
=
1.8285714
2.8952381
// n o i s e v a r i a n c e =
Scilab code Eqn 7.7.40 Signal to Quantization Noise Ratio

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

// E q u a t i o n 6 . 4 . 1 7
// p a g e 4 9 2
// Program t o C a l c u l a t e
Signal to Quantization Noise
Ratio
// i n FFT a l g o r i t h m
clear all ;
clc ;
close ;
N = input ( E n t e r t h e N p o i n t FFT v a l u e ) ;
b = log2 ( N )
Quantization_Noise = (2/3) *(2^( -2* b ) )
Signal_Power = (1/(3* N ) )
SQNR = Signal_Power / Quantization_Noise
//RESULT
// E n t e r t h e N p o i n t FFT v a l u e 1 0 2 4
// b =
10.
0.0000006
// Q u a n t i z a t i o n N o i s e =
// S i g n a l P o w e r =
0.0003255
// SQNR =
512.
//>10 l o g 1 0 (SQNR) = 2 7 . 0 9 2 7

32

Chapter 8
Design of Digital Filters
8.1

Scilab Code

Scilab code Exa 8.2.1 Design of FIR Filter using Frequecny Sampling Technique
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

// Example 8 . 2 . 1
// D e s i g n o f FIR F i l t e r u s i n g F r e q u e c n y S a m p l i n g
Technique
//Low P a s s F i l t e r D e s i g n
clear all ;
clc ;
close ;
M =15;
Hr = [1 ,1 ,1 ,1 ,0.4 ,0 ,0 ,0];
for k =1: length ( Hr )
G ( k ) =(( -1) ^( k -1) ) * Hr ( k ) ;
end
h = zeros (1 , M ) ;
U = (M -1) /2
for n = 1: M
h1 = 0;
for k = 2: U +1
h1 = G ( k ) * cos ((2* %pi / M ) *( k -1) *(( n -1) +(1/2) ) ) + h1 ;
end

33

19
20
21
22
23
24
25
26
27
28
29

30
31
32
33
34
35
36

37

h ( n ) = (1/ M ) * ( G (1) +2* h1 ) ;


end
h
[ hzm , fr ]= frmag (h ,256) ;
hzm_dB = 20* log10 ( hzm ) ./ max ( hzm ) ;
figure
plot (2* fr , hzm )
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR LPF u s i n g F r e q u e n c y
S a m p l i n g T e c h n i q u e w i t h M = 15 w i t h C u t o f f
Frequency = 0.466 )
xgrid (2)
figure
plot (2* fr , hzm_dB )
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR LPF u s i n g F r e q u e n c y
S a m p l i n g T e c h n i q u e w i t h M = 15 w i t h C u t o f f
Frequency = 0.466 )
xgrid (2)
Scilab code Exa 8.2.2 Design of FIR Filter using Frequecny Sampling Technique

1
2
3
4
5
6
7
8
9
10

// Example 8 . 2 . 2
// D e s i g n o f FIR F i l t e r u s i n g F r e q u e c n y S a m p l i n g
Technique
//Low P a s s F i l t e r D e s i g n
clear all ;
clc ;
close ;
M =32;
T1 = 0.3789795; // f o r a l p h a = 0 ( Type I )
Hr = [1 ,1 ,1 ,1 ,1 ,1 , T1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0];
for k =1: length ( Hr )
34

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

31
32
33
34
35
36
37

38

G ( k ) =(( -1) ^( k -1) ) * Hr ( k ) ;


end
h = zeros (1 , M ) ;
U = (M -1) /2
for n = 1: M
h1 = 0;
for k = 2: U +1
h1 = G ( k ) * cos ((2* %pi / M ) *( k -1) *(( n -1) +(1/2) ) ) + h1 ;
end
h ( n ) = (1/ M ) * ( G (1) +2* h1 ) ;
end
h
[ hzm , fr ]= frmag (h ,256) ;
hzm_dB = 20* log10 ( hzm ) ./ max ( hzm ) ;
figure
plot (2* fr , hzm )
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR LPF u s i n g F r e q u e n c y
S a m p l i n g T e c h n i q u e w i t h M = 15 w i t h C u t o f f
Frequency = 0.466 )
xgrid (2)
figure
plot (2* fr , hzm_dB )
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR LPF u s i n g F r e q u e n c y
S a m p l i n g T e c h n i q u e w i t h M = 15 w i t h C u t o f f
Frequency = 0.466 )
xgrid (2)
Scilab code Exa 8.2.3 Low Pass FIlter

1
2

// Example 8 . 2 . 3
//Low P a s s F I l t e r o f l e n g t h M = 61

35

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

// P a s s band Edge f r e q u e n c y f p = 0 . 1 and a S t o p e d g e


frequency fs = 0.15
// Choose t h e number o f c o s i n e f u n c t i o n s and c r e a t e
a dense grid
// i n [ 0 , 0 . 1 ) and [ 0 . 1 5 , 0 . 5 )
// m a g n i t u d e f o r p a s s band = 1 & s t o p band = 0 ( i . e )
[1 0]
// W e i g h t i n g f u n c t i o n =[1 1 ]
clear all ;
clc ;
close ;
hn = eqfir (61 ,[0 .1;.15 .5] ,[1 0] ,[1 1]) ;
[ hm , fr ]= frmag ( hn ,256) ;
disp ( The F i l t e r C o e f f i c i e n t s a r e : )
hn
figure
plot ( fr , hm )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR LPF u s i n g REMEZ
a l g o r i t h m M=61 )
figure
plot (.5*(0:255) /256 ,20* log10 ( frmag ( hn ,256) ) ) ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR LPF u s i n g REMEZ
a l g o r i t h m M=61 )
Scilab code Exa 8.2.4 Band Pass FIlter

// Example 8 . 2 . 4
// Band P a s s F I l t e r o f l e n g t h M = 32
// Lower C u t o f f f r e q u e n c y f p = 0 . 2 and Upper C u t o f f
frequency fs = 0.35
4 // Choose t h e number o f c o s i n e f u n c t i o n s and c r e a t e
a dense grid
5 // i n [ 0 , 0 . 1 ) and [ 0 . 2 , 0 . 3 5 ] and [ 0 . 4 2 5 , 0 . 5 ]
1
2
3

36

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

// m a g n i t u d e f o r p a s s band = 1 & s t o p band = 0 ( i . e )


[0 1 0]
// W e i g h t i n g f u n c t i o n =[10 1 1 0 ]
clear all ;
clc ;
close ;
hn = 0;
hm = 0;
hn = eqfir (32 ,[0 .1;.2 .35;.425 .5] ,[0 1 0] ,[10 1 10])
;
[ hm , fr ]= frmag ( hn ,256) ;
disp ( The F i l t e r C o e f f i c i e n t s a r e : )
hn
figure
plot ( fr , hm )
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR BPF u s i n g REMEZ
a l g o r i t h m M=32 )
xgrid (2)
figure
plot (.5*(0:255) /256 ,20* log10 ( frmag ( hn ,256) ) ) ;
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR BPF u s i n g REMEZ
a l g o r i t h m M=32 )
xgrid (2)
Scilab code Exa 8.2.5 Linear Phase FIR Differentiator of length M = 60

1 // Example 8 . 2 . 5
2 // L i n e a r Phase FIR D i f f e r e n t i a t o r o f
3 // P a s s Band Edge f r e q u e n c y f p = 0 . 1
4 clear all ;
5 clc ;
6 close ;

37

l e n g t h M = 60

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

M =60;
tuo = ( M /2) -1;
Wc = 0.1;
h = zeros (1 , M ) ;
for n = 1: M
if n ~= M /2
h ( n ) = cos (( n -1 - tuo ) * Wc ) /( n -1 - tuo ) ;
end
end
[ hm , fr ]= frmag (h ,1024) ;
disp ( The F i l t e r C o e f f i c i e n t s a r e : )
h
figure
plot ( fr , hm / max ( hm ) )
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR D i f f e r e n t i a t o r f o r
M=60 )
25 xgrid (2)
Scilab code Exa 8.2.6 Hilbert Transform of Length M = 31

1
2
3
4
5
6
7
8
9
10
11
12
13
14

// Example 8 . 2 . 6
// P l o t t i n g H i b e r t T r a n s f o r m e r o f Length M = 31
// D e f a u l t Window R e c t a n g u l a r Window
// Chebyshev a p p r o x d e f a u l t p a r a m e t e r = [ 0 0 ]
clear all ;
clc ;
close ;
M =31; // H i b e r t T r a n s f o r m e r Length = 31
tuo = (M -1) /2;
Wc = %pi ;
h = zeros (1 , M ) ;
for n = 1: M
if n ~= (( M -1) /2) +1
h ( n ) =(2/ %pi ) *( sin (( n -1 - tuo ) * Wc /2) ^2) /( n -1 - tuo )
;
38

15
end
16 end
17 disp ( The H i l b e r t C o e f f i c i e n t s a r e : )
18 h
19 Rec_Window = ones (1 , M ) ; // R e c t a n g u l a r Window
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

generation
h_Rec = h .* Rec_Window ; // Windowing With R e c t a n g u l a r
window
// Hamming Window g e n e a r t i o n
for n =1: M
hamm_Window ( n ) = 0.54 -0.46* cos (2* %pi *( n -1) /( M -1) ) ;
end
h_hamm = h .* hamm_Window ; // Windowing With hamming
window ;
// H i l b e r t T r a n s f o r m e r u s i n g R e c t a n g u l a r window
[ hm_Rec , fr ]= frmag ( h_Rec ,1024) ;
hm_Rec_dB = 20* log10 ( hm_Rec ) ;
figure
plot ( fr , hm_Rec_dB )
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR H i b e r t T r a n s f o r m e r
u s i n g R e c t a n g u l a r window f o r M=31 )
xgrid (2)
// H i l b e r t T r a n s f o r m e r u s i n g Hamming window
[ hm_hamm , fr ]= frmag ( h_hamm ,1024) ;
disp ( The H i l b e r t C o e f f i c i e n t s a r e : )
hm_hamm_dB = 20* log10 ( hm_hamm ) ;
figure
plot ( fr , hm_hamm_dB )
a = gca () ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR H i b e r t T r a n s f o r m e r
u s i n g hamming window f o r M=31 )
xgrid (2)

39

Scilab code Eqn 8.2.28 DESIGN AND OBTAIN THE FREQUENCY RESPONSE OF FIR FILTER LowPass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

// F i g u r e 8 . 9 and 8 . 1 0
//PROGRAM TO DESIGN AND OBTAIN THE FREQUENCY
RESPONSE OF FIR FILTER
//LOW PASS FILTER
clear all ;
clc ;
close ;
M = 61
// F i l t e r l e n g t h = 61
Wc = %pi /5;
// D i g i t a l C u t o f f f r e q u e n c y
Tuo = (M -1) /2
// C e n t e r V a l u e
for n = 1: M
if ( n == Tuo +1)
hd ( n ) = Wc / %pi ;
else
hd ( n ) = sin ( Wc *(( n -1) - Tuo ) ) /((( n -1) - Tuo ) * %pi )
;
end
end
// R e c t a n g u l a r Window
for n = 1: M
W ( n ) = 1;
end
// Windowing F i t l e r C o e f f i c i e n t s
h = hd .* W ;
disp ( F i l t e r C o e f f i c i e n t s a r e )
h;
[ hzm , fr ]= frmag (h ,256) ;
hzm_dB = 20* log10 ( hzm ) ./ max ( hzm ) ;
subplot (2 ,1 ,1)
plot ( fr , hzm )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR LPF u s i n g
R e c t a n g u l a r window M=61 )
subplot (2 ,1 ,2)
40

33
34
35
36

plot ( fr , hzm_dB )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR LPF u s i n g
R e c t a n g u l a r window M=61 )
*For further extension of the exapmle refer to
AE 8.2.28A
AE 8.2.28B
AE 8.2.28C

Scilab code Exa 8.3.2 Backward Difference


1
2
3
4
5
6
7
8
9
10
11

// Example 8 . 3 . 2
// mapping = ( z ( z 1) ) /T
//To c o n v e r t a n a l o g f i l t e r i n t o d i g i t a l
clear all ;
clc ;
close ;
s = poly (0 , s ) ;
H = 1/(( s +0.1) ^2+9)
T =1; // S a m p l i n g p e r i o d T = 1 S e c o n d
z = poly (0 , z ) ;
Hz = horner (H ,(1/ T ) *( z -( z ^ -1) ) )

filter

Scilab code Exa 8.3.4 Bilinear Transformation


1 // Example 8 . 3 . 4
2 // B i l i n e a r T r a n s f o r m a t i o n
3 //To c o n v e r t a n a l o g f i l t e r i n t o
4 clear all ;
5 clc ;
6 close ;
7 s = poly (0 , s ) ;
8 H = ( s +0.1) /(( s +0.1) ^2+16) ;
9 Omega_Analog = 4;
10 Omega_Digital = %pi /2;
11 // F i n d i n g S a m p l i n g P e r i o d

41

digital

filter

12 T = (2/ Omega_Analog ) *( tan ( Omega_Digital /2) )


13 z = poly (0 , z ) ;
14 Hz = horner (H ,(2/ T ) *(( z -1) /( z +1) ) )

Scilab code Exa 8.3.5 Single pole filter


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30

// Example 8 . 3 . 5 S i g l e p o l e a n a l o g f i l t e r
// B i l i n e a r T r a n s f o r m a t i o n
//To c o n v e r t a n a l o g f i l t e r i n t o d i g i t a l f i l t e r
clear all ;
clc ;
close ;
s = poly (0 , s ) ;
Omegac = 0.2* %pi ;
H = Omegac /( s + Omegac ) ;
T =1; // S a m p l i n g p e r i o d T = 1 S e c o n d
z = poly (0 , z ) ;
Hz = horner (H ,(2/ T ) *(( z -1) /( z +1) ) )
disp ( Hz , Hz = )
HW = frmag ( Hz (2) , Hz (3) ,512) ;
W = 0: %pi /511: %pi ;
plot ( W / %pi , HW )
a = gca () ;
a . thickness = 3;
a . foreground = 1;
a . font_style = 9;
xgrid (1)
xtitle ( Magnitude R e s p o n s e o f S i n g l e p o l e LPF F i l t e r
C u t o f f f r e q u e n c y = 0 . 2 p i , D i g i t a l Frequency
> , Magnitude ) ;
// R e s u l t
// Hz =
//
//
0.6283185 + 0.6283185 z
//

// 1 . 3 7 1 6 8 1 5 + 2 . 6 2 8 3 1 8 5 z
//
//>Hz ( 3 )=Hz ( 3 ) / 2 . 6 2 8 3 1 8 5
42

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

// Hz =
//
//
0.6283185 + 0.6283185 z
//

//
0.5218856 + z
//
//>Hz ( 2 )=Hz ( 2 ) / 2 . 6 2 8 3 1 8 5
// Hz =
//
//
0.2390572 + 0.2390572 z
//

//
0.5218856 + z
//
//
which i s e q u i v a l e n t t o
// Hz =
//
//
0 . 2 3 9 0 5 7 2 ( 1 + z 1)
//

//
1 0 . 5 2 1 8 8 5 6 z 1
*For further extension of the exapmle refer to
AE 8.3.5

Scilab code Exa 8.3.6 Analog Filter Transformation


1 // Example 8 . 3 . 6
2 // To D e s i g n an Analog B u t t e r w o r t h F i l t e r
3 // For t h e g i v e n c u t o f f f r e q u e n c y Wc = 500 Hz
4 clear all ;
5 clc ;
6 close ;
7 omegap = 2* %pi *500;
8 omegas = 2* %pi *1000;
9 delta1_in_dB = -3;
10 delta2_in_dB = -40;
11 delta1 = 10^( delta1_in_dB /20)

43

12 delta2 = 10^( delta2_in_dB /20)


13 // C a l c u l a t i o n o f F i l t e r Order
14 N = log10 ((1/( delta2 ^2) ) -1) /(2* log10 ( omegas / omegap ) )
15 N = ceil ( N )
16 omegac = omegap ;
17 // P o l e s and Gain C a l c u l a t i o n
18 [ pols , gain ]= zpbutt (N , omegac ) ;
19 disp (N , F i l t e r o r d e r N = )
20 disp ( pols , P o l e p o s i t i o n s a r e p o l s = )
21 // Magnitude R e s p o n s e o f Analog I I R B u t t e r w o r t h
22
23
24
25
26
27
28
29
30
31

32
33
34
35
36
37
38
39
40

Filter
h = buttmag (N , omegac ,1:1000) ;
// Magnitude i n dB
mag =20* log10 ( h ) ;
plot2d ((1:1000) ,mag ,[0 , -180 ,1000 ,20]) ;
a = gca () ;
a . thickness = 3;
a . foreground = 1;
a . font_style = 9;
xgrid (5)
xtitle ( Magnitude R e s p o n s e o f B u t t e r w o r t h LPF F i l t e r
C u t o f f f r e q u e n c y = 500 Hz , Analog f r e q u e n c y i n
Hz> , Magnitude i n dB > ) ;
// R e s u l t
// F i l t e r o r d e r N =
7.
// s =
// column 1 t o 3
// 6 9 9 . 0 7 0 1 3 + 3 0 6 2 . 8 2 6 4 i
1958.751+2456.196 i
2830.4772+1363.086 i
// column 4 t o 6
// 3 1 4 1 . 5 9 2 7 + 3 . 8 4 7D13 i
2830.4772 1363.086 i
1958.751 2456.196 i
// column 7
// 6 9 9 . 0 7 0 1 3 3 0 6 2 . 8 2 6 4 i
*For further extension of the exapmle refer to
AE 8.3.6
44

Scilab code Exa 8.3.7 Chebyshev Filter


1 // Example 8 . 3 . 7
2 //To D e s i g n an Analog Chebyshev F i l t e r
3 // For t h e g i v e n c u t o f f f r e q u e n c y = 500 Hz
4 clear all ;
5 clc ;
6 close ;
7 omegap = 1000* %pi ; // Analog Passband Edge f r e q u e n c y
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

in radians / sec
omegas = 2000* %pi ; // Analog S t o p band e d g e f r e q u e n c y
in radians / sec
delta1_in_dB = -1;
delta2_in_dB = -40;
delta1 = 10^( delta1_in_dB /20) ;
delta2 = 10^( delta2_in_dB /20) ;
delta = sqrt (((1/ delta2 ) ^2) -1)
epsilon = sqrt (((1/ delta1 ) ^2) -1)
// C a l c u l a t i o n o f F i l t e r o r d e r
num = (( sqrt (1 - delta2 ^2) ) +( sqrt (1 -(( delta2 ^2) *(1+
epsilon ^2) ) ) ) ) /( epsilon * delta2 )
den = ( omegas / omegap ) + sqrt (( omegas / omegap ) ^2 -1)
N = log10 ( num ) / log10 ( den )
//N = ( a c o s h ( d e l t a / e p s i l o n ) ) / ( a c o s h ( omegas / omegap ) )
N = floor ( N )
// C u t o f f f r e q u e n c y
omegac = omegap
// C a l c u l a t i o n o f p o l e s and z e r o s
[ pols , Gn ] = zpch1 (N , epsilon , omegap )
disp (N , F i l t e r o r d e r N = ) ;
disp ( pols , P o l e s o f a t y p e I l o w p a s s Chebyshev
f i l t e r a r e Sk = )
// Analog F i l t e r T r a n s f e r F u n c t i o n
h = poly ( Gn , s , c o e f f ) / real ( poly ( pols , s ) )
// Magnitude R e s p o n s e o f Chebyshev f i l t e r
[ h2 ]= cheb1mag (N , omegac , epsilon ,1:1000)
45

31
32
33
34
35
36
37
38
39

// Magnitude i n dB
mag =20* log10 ( h2 ) ;
plot2d ((1:1000) ,mag ,[0 , -180 ,1000 ,20]) ;
a = gca () ;
a . thickness = 3;
a . foreground = 1;
a . font_style = 9;
xgrid (5)
xtitle ( Magnitude R e s p o n s e o f Chebyshev Type 1 LPF
F i l t e r C u t o f f f r e q u e n c y = 500 Hz , Analog
f r e q u e n c y i n Hz> , Magnitude i n dB > ) ;
Scilab code Exa 8.4.1 Design an Digital IIR Butterworth Filter from Analog IIR Butterworth Filter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// C a p t i o n : C o n v e t i n g s i n g l e p o l e LPF B u t t e r w o r t h
f i l t e r i n t o BPF
// Exa8 . 4 . 1
// p a g e 6 9 8
clc ;
Op = sym ( Op ) ; // p a s s band e d g e f r e q u e n c y o f low
pass f i l t e r
s = sym ( s ) ;
Ol = sym ( Ol ) ; // l o w e r c u t o f f f r e q u e n c y o f band
pass f i l t e r
Ou = sym ( Ou ) ; // u p p e r c u t o f f f r e q u e n c y o f band
pass f i l t e r
s1 = Op *( s ^2+ Ol * Ou ) /( s *( Ou - Ol ) ) ; // Analog
t r a n s f o r m a t i o n f o r LPF t o BPF
H_Lpf = Op /( s + Op ) ; // s i n g l e p o l e a n a l o g LPF
Butterworth f i l t e r
H_Bpf = limit ( H_Lpf ,s , s1 ) ; // a n a l o g BPF B u t t e r w o r t h
filter
disp ( H_Lpf , H Lpf = )
disp ( H_Bpf , H Bpf = )
// R e s u l t
// H Lpf = Op/ ( s+Op)
// H Bpf = ( OuOl ) s / ( s 2+(OuOl ) s+Ol Ou)
46

Scilab code Exa 8.4.2 Digital Filter Transformation


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

// Example 8 . 4 . 2
//To D e s i g n an D i g i t a l I I R B u t t e r w o r t h F i l t e r from
Analog I I R B u t t e r w o r t h F i l t e r
// and t o p l o t i t s m a g n i t u d e r e s p o n s e
//TRANSFORMATION OF LPF TO BPF USING DIGITAL
TRANSFORMATION
clear all ;
clc ;
close ;
omegaP = 0.2* %pi ;
omegaL = (2/5) * %pi ;
omegaU = (3/5) * %pi ;
z = poly (0 , z ) ;
H_LPF = (0.245) *(1+( z ^ -1) ) /(1 -0.509*( z ^ -1) )
alpha = ( cos (( omegaU + omegaL ) /2) / cos (( omegaU - omegaL )
/2) ) ;
k = ( cos (( omegaU - omegaL ) /2) / sin (( omegaU - omegaL )
/2) ) * tan ( omegaP /2) ;
NUM = -(( z ^2) -((2* alpha * k /( k +1) ) * z ) +(( k -1) /( k +1) ) ) ;
DEN = (1 -((2* alpha * k /( k +1) ) * z ) +((( k -1) /( k +1) ) *( z ^2) )
);
HZ_BPF = horner ( H_LPF , NUM / DEN )
disp ( HZ_BPF , D i g i t a l BPF I I R F i l t e r H( Z )= )
HW = frmag ( HZ_BPF (2) , HZ_BPF (3) ,512) ;
W = 0: %pi /511: %pi ;
plot ( W / %pi , HW )
a = gca () ;
a . thickness = 3;
a . foreground = 1;
a . font_style = 9;
xgrid (1)
xtitle ( Magnitude R e s p o n s e o f BPF F i l t e r , D i g i t a l
F r e q u e n c y > , Magnitude ) ;
// R e s u l t
47

// D i g i t a l BPF I I R F i l t e r H( Z )=
//
2
3
4
31 //
0 . 2 4 5 1 . 5 7 7D17 z 0 . 2 4 5 z + 1 . 5 7 7D17 z +
1 . 3 6 0D17 z
32 //

29
30

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

//

2
3
4
//
0 . 5 0 9 + 1 . 2 9 9D16 z z + 6 . 4 3 8D17 z + 5 . 5 5 1D
17 z
//
// which i s e q u i v a l e n t t o
// H( z ) =
//
//
2
//
0.245 0 0.245 z + 0 + 0
//

//
2
//
0 . 5 0 9 + 0 z + 0+ 0
//
//H( z ) =
//
//
2
//
0.245 0 . 2 4 5 z
//

//
2
//
0.509 z
//
//H( z ) =
//
//
2
//
0.245 0 . 2 4 5 z
//

//
2
//
0.509+ z
//
48

61

//
*For further extension of the exapmle refer to
AE 8.4.2A
AE 8.4.2B

Scilab code CF 8.5 Program to generate different window functions


1 // F i g u r e 8 . 5
2 // Program t o g e n e r a t e d i f f e r e n t window f u n c t i o n s
3 clear all ;
4 close ;
5 clc
6 M =61 ;
7 for n = 1: M
8
h_Rect ( n ) = 1;
9
h_hann ( n ) = 0.5 -0.5* cos (2* %pi *( n -1) /( M -1) ) ;
10
h_hamm ( n ) = 0.54 -0.46* cos (2* %pi *( n -1) /( M -1) ) ;
11
h_balckmann ( n ) = 0.42 -0.5* cos (2* %pi * n /( M -1) ) +0.08*

cos (4* %pi * n /( M -1) ) ;


12 end
13 plot2d (1: M ,[ h_Rect , h_hann , h_hamm , h_balckmann

] ,[2 ,5 ,7 ,9]) ;
14 legend ([ R e c t a n g u l a r Window ; Hanning ; Hamming ;
Balckmann ]) ;
15 title ( Window F u n c t i o n s f o r Length M = 61 )
Scilab code CF 8.6 Program to find find frequency response of (1) Hanning window (2)Hamming window for M = 31 and M = 61
// F i g u r e 8 . 6 and F i g u r e 8 . 7
// Program t o f r e q u e n c y r e s p o n s e o f
// ( 1 ) Hanning window ( 2 ) Hamming window f o r M = 31
and M = 61
4 clear all ;
5 close ;
6 clc
1
2
3

49

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

M1 = 31;
M2 = 61;
for n = 1: M1
h_hann_31 ( n ) = 0.5 -0.5* cos (2* %pi *( n -1) /( M1 -1) ) ;
h_hamm_31 ( n ) = 0.54 -0.46* cos (2* %pi *( n -1) /( M1 -1) ) ;
end
for n = 1: M2
h_hann_61 ( n ) = 0.5 -0.5* cos (2* %pi *( n -1) /( M2 -1) ) ;
h_hamm_61 ( n ) = 0.54 -0.46* cos (2* %pi *( n -1) /( M2 -1) ) ;
end
subplot (2 ,1 ,1)
[ h_hann_31_M , fr ]= frmag ( h_hann_31 ,512) ;
[ h_hann_61_M , fr ]= frmag ( h_hann_61 ,512) ;
h_hann_31_M = 20* log10 ( h_hann_31_M ./ max ( h_hann_31_M )
);
h_hann_61_M = = 20* log10 ( h_hann_61_M ./ max (
h_hann_61_M ) ) ;
plot2d ( fr , h_hann_31_M ,2) ;
plot2d ( fr , h_hann_61_M ,5) ;
legend ([ Length M = 31 ; Length M = 61 ]) ;
title ( F r e q u e n c y R e s p o n s e 0 f Hanning window )
subplot (2 ,1 ,2)
[ h_hamm_31_M , fr ]= frmag ( h_hamm_31 ,512) ;
[ h_hamm_61_M , fr ]= frmag ( h_hamm_61 ,512) ;
h_hamm_31_M = 20* log10 ( h_hamm_31_M ./ max ( h_hamm_31_M )
);
h_hamm_61_M = = 20* log10 ( h_hamm_61_M ./ max (
h_hamm_61_M ) ) ;
plot2d ( fr , h_hamm_31_M ,2) ;
plot2d ( fr , h_hamm_61_M ,5) ;
legend ([ Length M = 31 ; Length M = 61 ]) ;
title ( F r e q u e n c y R e s p o n s e o f Hamming window )
Scilab code CF 8.7 Program to find frequency response of (1) Hanning
window (2)Hamming window for M = 31

1
2

// F i g u r e 8 . 6 and F i g u r e 8 . 7
// Program t o f r e q u e n c y r e s p o n s e o f
50

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

// ( 1 ) Hanning window ( 2 ) Hamming window f o r M = 31


clear all ;
close ;
clc
M = 31;
for n = 1: M
h_hann_31 ( n ) = 0.5 -0.5* cos (2* %pi *( n -1) /( M -1) ) ;
h_hamm_31 ( n ) = 0.54 -0.46* cos (2* %pi *( n -1) /( M -1) ) ;
end
subplot (2 ,1 ,1)
[ h_hann_31_M , fr ]= frmag ( h_hann_31 ,512) ;
h_hann_31_M = 20* log10 ( h_hann_31_M ./ max ( h_hann_31_M )
);
plot2d ( fr , h_hann_31_M ) ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e 0 f Hanning window M = 31 )
subplot (2 ,1 ,2)
[ h_hamm_31_M , fr ]= frmag ( h_hamm_31 ,512) ;
h_hamm_31_M = 20* log10 ( h_hamm_31_M ./ max ( h_hamm_31_M )
);
plot2d ( fr , h_hamm_31_M ) ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e o f Hamming window M =31 )

51

Chapter 10
Multirate Digital Signal
Processing
10.1

Scilab Code

Scilab code Exa 10.5.1 Decimation by 2, Filter Length = 30


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

// Example 1 0 . 5 . 1
// D e c i m a t i o n by 2 , F i l t e r Length = 30
// C u t o f f F r e q u e n c y Wc = %pi /2
// P a s s band Edge f r e q u e n c y f p = 0 . 2 5 and a S t o p band
edge frequency f s = 0.31
// Choose t h e number o f c o s i n e f u n c t i o n s and c r e a t e
a dense grid
// i n [ 0 , 0 . 2 5 ] and [ 0 . 3 1 , 0 . 5 ]
// m a g n i t u d e f o r p a s s band = 1 & s t o p band = 0 ( i . e )
[1 0]
// W e i g h t i n g f u n c t i o n =[2 1 ]
clear all ;
clc ;
close ;
M = 30; // F i l t e r Length
D = 2; // D e c i m a t i o n F a c t o r = 2
Wc = %pi /2; // C u t o f f F r e q u e n c y
Wp = Wc /(2* %pi ) ; // Passband Edge F r e q u e n c y

52

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

Ws = 0.31; // Stopband Edge F r e q u e n c y


hn = eqfir (M ,[0 Wp ; Ws .5] ,[1 0] ,[2 1]) ;
[ hm , fr ]= frmag ( hn ,256) ;
disp ( The LPF F i l t e r C o e f f i c i e n t s a r e : )
hn
// O b t a i n i n g P o l y p h a s e F i l t e r C o e f f i c i e n t s from hn
p = zeros (D , M / D ) ;
for k = 1: D
for n = 1:( length ( hn ) / D )
p (k , n ) = hn ( D *( n -1) + k ) ;
end
end
disp ( The P o l y p h a s e D e c i m a t o r f o r D =2 a r e : )
p
figure
plot ( fr , hm )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR LPF u s i n g REMEZ
a l g o r i t h m M=61 )
figure
plot (.5*(0:255) /256 ,20* log10 ( frmag ( hn ,256) ) ) ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e o f DECIMATOR (D=2) u s i n g
REMEZ a l g o r i t h m M=30 )
Scilab code Exa 10.5.2 Interpolation by 5, Filter Length = 30

// Example 1 0 . 5 . 2
// I n t e r p o l a t i o n by 5 , F i l t e r Length = 30
// C u t o f f F r e q u e n c y Wc = %pi /5
// P a s s band Edge f r e q u e n c y f p = 0 . 1 and a S t o p band
edge frequency f s = 0.16
5 // Choose t h e number o f c o s i n e f u n c t i o n s and c r e a t e
a dense grid
6 // i n [ 0 , 0 . 1 ) and [ 0 . 1 6 , 0 . 5 )
1
2
3
4

53

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

// m a g n i t u d e f o r p a s s band = 1 & s t o p band = 0 ( i . e )


[1 0]
// W e i g h t i n g f u n c t i o n =[3 1 ]
clear all ;
clc ;
close ;
M = 30; // F i l t e r Length
I = 5; // I n t e r p o l a t i o n F a c t o r = 5
Wc = %pi /5; // C u t o f f F r e q u e n c y
Wp = Wc /(2* %pi ) ; // Passband Edge F r e q u e n c y
Ws = 0.16; // Stopband Edge F r e q u e n c y
hn = eqfir (M ,[0 Wp ; Ws .5] ,[1 0] ,[3 1]) ;
[ hm , fr ]= frmag ( hn ,256) ;
disp ( The LPF F i l t e r C o e f f i c i e n t s a r e : )
hn
// O b t a i n i n g P o l y p h a s e F i l t e r C o e f f i c i e n t s from hn
p = zeros (I , M / I ) ;
for k = 1: I
for n = 1:( length ( hn ) / I )
p (k , n ) = hn ( I *( n -1) + k ) ;
end
end
disp ( The P o l y p h a s e I n t e r p o l a t o r f o r I =5 a r e : )
p
figure
plot ( fr , hm )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e o f FIR LPF u s i n g REMEZ
a l g o r i t h m M=61 )
figure
plot (.5*(0:255) /256 ,20* log10 ( frmag ( hn ,256) ) ) ;
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y f r ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e o f INTERPOLATOR( I =5) u s i n g
REMEZ a l g o r i t h m M=30 )

54

Scilab code Exa 10.6.1 Multistage Implementation of Sampling Rate Conversion


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

// Example 1 0 . 6 . 1
// M u l t i s t a g e I m p l e m e n t a t i o n o f S a m p l i n g Rate
Conversion
// D e c i m a t i o n f a c t o r D = 50
//D = D1xD2 , D1 = 2 5 , D2 =2
clear all ;
clc ;
close ;
Fs = 8000; // S a m p l i n g F r e q u e n c y = 8 0 0 0 Hz
Fpc = 75; // Passband F r e q u e n c y
Fsc = 80; // Stopband F r e q u e n c y
Delta_F = ( Fsc - Fpc ) / Fs ; // T r a n s i t i o n Band
Pass_Band = [0 , Fpc ];
Transition_Band = [ Fpc , Fsc ];
Delta1 = (10^ -2) ; // Passband R i p p l e
Delta2 = (10^ -4) ; // Stopband R i p p l e
D = Fs /(2* Fsc ) ;
// D e c i m a t i o n F a c t o r
// D e c i m a t o r I m p l e m e n t e d i n Two S t a g e s
D1 = D /2; // D e c i m a t o r 1
D2 = 2; // D e c i m a t o r 2
// D e c i m a t o r S i n g l e S t a g e I m p l e m e n t a t i o n
M = (( -10* log10 ( Delta1 * Delta2 ) -13) /(14.6* Delta_F ) )
+1;
M = ceil ( M )
// D e c i m a t o r M u l t i s t a g e I m p l e m e n t a t i o n
// F i r s t S t a g e I m p l e m e n t a t i o n
F1 = Fs / D1 ; //New p a s s b a n d f o r s t a g e 1
Fsc1 = F1 - Fsc ; //New Stopband f o r s t a g e 1
Delta_F1 = ( Fsc1 - Fpc ) / Fs //New T r a n s i t i o n f o r
stage1
Delta11 = Delta1 /2; //New Passband R i p p l e
Delta21 = Delta2 ; // Stopband R i p p l e same
M1 = (( -10* log10 ( Delta11 * Delta21 ) -13) /(14.6* Delta_F1
) ) +1
M1 = floor ( M1 )
55

32 // S e c o n d S t a g e I m p l e m e n t a t i o n
33 F2 = F1 / D2 ;
//New p a s s b a n d f o r s t a g e 2
34 Fsc2 = F2 - Fsc ;
//New Stopband f o r s t a g e 2
35 Delta_F2 = ( Fsc2 - Fpc ) / F1
//New T r a n s i t i o n
36
37
38
39
40
41
42
43
44
45
46
47

for
stage2
Delta12 = Delta1 /2; //New Passband R i p p l e
Delta22 = Delta2 ; // Stopband R i p p l e same
M2 = (( -10* log10 ( Delta12 * Delta22 ) -13) /(14.6* Delta_F2
) ) +1
M2 = floor ( M2 )
disp ( The F i l t e r l e n g t h R e q u i r e d i n S i n g l e s t a g e
Implementation o f Decimator i s : )
M
disp ( The F i l t e r l e n g t h R e q u i r e d i n M u l t i s t a g e
Implementation o f Decimator i s : )
M1 + M2
// C a l c u l a t i o n o f R e d u c t i o n F a c t o r
R = M /( M1 + M2 ) ;
disp ( The R e d u c t i o n i n F i l t e r Length i s : )
R

Scilab code Exa 10.8.1 Signal to Distortion Ratio


1 // Example 1 0 . 8 . 1
2 // S i g n a l t o D i s t o r t i o n R a t i o
3 // C a l c u l a t i o n o f no . o f s u b f i l t e r s
4 clear all ;
5 clc ;
6 close ;
7 SDR_dB = 50; // S i g n a l t o d i s t o r t i o n r a t i o = 50 dB
8 Wx = 0.8* %pi ; // D i g i t a l maximum f r e q u e n c y o f i n p u t
9
10
11
12

data
SDR = 10^( SDR_dB /10)
disp ( The Number o f s u b f i l t e r s r e q u i r e d )
I = Wx * sqrt ( SDR /12) ;
I = ceil ( I )

56

Scilab code Exa 10.8.2 Signal to Distortion Ratio using Linear Interpolation
1
2
3
4
5
6
7
8
9
10
11
12

// Example 1 0 . 8 . 2
// S i g n a l t o D i s t o r t i o n R a t i o u s i n g L i n e a r
Interpolation
// C a l c u l a t i o n o f no . o f s u b f i l t e r s
clear all ;
clc ;
close ;
SDR_dB = 50; // S i g n a l t o d i s t o r t i o n r a t i o = 50 dB
Wx = 0.8* %pi ; // D i g i t a l maximum f r e q u e n c y o f i n p u t
data
SDR = 10^( SDR_dB /10)
disp ( The Number o f s u b f i l t e r s r e q u i r e d )
I = Wx *(( SDR /80) ^(1/4) ) ;
I = ceil ( I )
Scilab code Exa 10.9.1 Multistage Implementation of Sampling Rate Conversion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// Example 1 0 . 9 . 1
// M u l t i s t a g e I m p l e m e n t a t i o n o f S a m p l i n g Rate
Conversion
// D e c i m a t i o n f a c t o r D = 100
//D = D1xD2 , D1 = 5 0 , D2 =2
// I n t e r p o l a t i o n f a c t o r I = 100
// I = I 1 x I 2 , I 1 = 2 , I 2 =50
clear all ;
clc ;
close ;
Fs = 8000; // S a m p l i n g F r e q u e n c y = 8 0 0 0 Hz
Fpc = 75; // Passband F r e q u e n c y
Fsc = 80; // Stopband F r e q u e n c y
Delta_F = ( Fsc - Fpc ) / Fs ; // T r a n s i t i o n Band
Pass_Band = [0 , Fpc ];
Transition_Band = [ Fpc , Fsc ];
Delta1 = (10^ -2) ; // Passband R i p p l e
57

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

Delta2 = (10^ -4) ; // Stopband R i p p l e


D = Fs /(2* Fsc ) ;
// D e c i m a t i o n F a c t o r
// D e c i m a t o r I m p l e m e n t e d i n Two S t a g e s
D1 = D /2; // D e c i m a t o r 1
D2 = 2; // D e c i m a t o r 2
// D e c i m a t o r S i n g l e S t a g e I m p l e m e n t a t i o n
M = (( -10* log10 ( Delta1 * Delta2 /2) -13) /(14.6* Delta_F ) )
+1;
M = ceil ( M )
// D e c i m a t o r M u l t i s t a g e I m p l e m e n t a t i o n
// F i r s t S t a g e I m p l e m e n t a t i o n
Delta_F1 = 0.020625 // O b t a i n e d from Example 1 0 . 6 . 1
M1 = (( -10* log10 ( Delta1 * Delta2 /4) -13) /(14.6* Delta_F1
) ) +1
M1 = floor ( M1 )
// S e c o n d S t a g e I m p l e m e n t a t i o n
Delta_F2 = 0.015625 // O b t a i n e d from Example 1 0 . 6 . 1
M2 = (( -10* log10 ( Delta1 * Delta2 /4) -13) /(14.6* Delta_F2
) ) +1
M2 = floor ( M2 )
disp ( The F i l t e r l e n g t h R e q u i r e d i n S i n g l e s t a g e
Implementation o f Decimator i s : )
M
disp ( The F i l t e r l e n g t h R e q u i r e d i n M u l t i s t a g e
Implementation o f Decimator i s : )
M1 + M2
// C a l c u l a t i o n o f R e d u c t i o n F a c t o r
R = M /( M1 + M2 ) ;
disp ( The R e d u c t i o n i n F i l t e r Length i s : )
R

58

Chapter 11
Linear Predictions and
Optimum Linear Filter
11.1

Scilab Code

Scilab code Exa 11.6.1 Design of Wiener filter of Length M =2


1 // Example 1 1 . 6 . 1
2 // D e s i g n o f w i e n e r f i l t e r o f Length M =2
3 clear all ;
4 close ;
5 clc ;
6 M =2;
// Wiener F i l t e r Length
7 Rdx = [0.6 2 0.6] // C r o s s c o r r e l a t i o n m a t r i x b e t w e e n

8
9
10
11
12
13
14
15
16

t h e d e s i r e d i n p u t s e q u e n c e and a c t u a l i n p u t
sequence
C = Rdx ( M : $ ) // R i g h t s i d e d s e q u e n c e
To_M = toeplitz ( C )
Rxx = [0.6 1 0.6] // Auto c o r r e l a t i o n m a t r i x
Rss = Rxx ( M : $ )
// F i l t e r c o e f f i c i e n t s
h = [0.451 0.165]
// C a l c u l a t i o n o f Minimum Mean S q u a r e E r r o r
sigma_d = 1; // A v e r a g e power o f d e s i r e d s e q u e n c e
MSE = sigma_d - h * Rss

59

Chapter 12
Power Spectrum Estimation
12.1

Scilab Code

Scilab code Exa 12.1.1 Determination of spectrum of a signal With maximum normalized frequency f = 0.1 using Rectangular window and Blackmann
window
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

// Example 1 2 . 1 . 1
// D e t e r m i n a t i o n o f s p e c t r u m o f a s i g n a l
// With maximum n o r m a l i z e d f r e q u e n c y f = 0 . 1
// u s i n g R e c t a n g u l a r window and Blackmann window
clear all ;
close ;
clc ;
N = 61;
cfreq = [0.1 0];
[ wft , wfm , fr ]= wfir ( l p ,N , cfreq , r e ,0) ;
wft ;
// Time domain f i l t e r
coefficients
wfm ;
// F r e q u e n c y domain f i l t e r
values
fr ;
// F r e q u e n c y s a m p l e p o i n t s
WFM_dB = 20* log10 ( wfm ) ; // F r e q u e n c y r e s p o n s e i n dB
for n = 1: N

60

16
17
18
19
20
21
22
23

24
25
26

h_balckmann ( n ) =0.42 -0.5* cos (2* %pi * n /( N -1) ) +0.08* cos


(4* %pi * n /( N -1) ) ;
end
wft_blmn = wft .* h_balckmann ;
wfm_blmn = frmag ( wft_blmn , length ( fr ) ) ;
WFM_blmn_dB =20* log10 ( wfm_blmn ) ;
subplot (2 ,1 ,1)
plot2d ( fr , WFM_dB )
xtitle ( F r e q u e n c y R e s p o n s e o f R e c t a n g u l a r window
F i l t e r e d o u t p u t M = 61 , F r e q u e n c y i n c y c l e s p e r
samples
f , Energy d e n s i t y i n dB )
subplot (2 ,1 ,2)
plot2d ( fr , WFM_blmn_dB )
xtitle ( F r e q u e n c y R e s p o n s e o f Blackmann window
F i l t e r e d o u t p u t M = 61 , F r e q u e n c y i n c y c l e s p e r
samples
f , Energy d e n s i t y i n dB )
Scilab code Exa 12.1.2 Evaluating power spectrum of a discrete sequence
Using N-point DFT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

// Example 1 2 . 1 . 2
// E v a l u a t i n g power s p e c t r u m o f a d i s c r e t e s e q u e n c e
// U s i n g Np o i n t DFT
clear all ;
clc ;
close ;
N =16; // Number o f s a m p l e s i n g i v e n s e q u e n c e
n =0: N -1;
delta_f = [0.06 ,0.01]; // f r e q u e n c y s e p a r a t i o n
x1 = sin (2* %pi *0.315* n ) + cos (2* %pi *(0.315+ delta_f (1) )
*n);
x2 = sin (2* %pi *0.315* n ) + cos (2* %pi *(0.315+ delta_f (2) )
*n);
L = [8 ,16 ,32 ,128];
k1 = 0: L (1) -1;
k2 = 0: L (2) -1;
k3 = 0: L (3) -1;
k4 = 0: L (4) -1;
61

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

fk1 = k1 ./ L (1) ;
fk2 = k2 ./ L (2) ;
fk3 = k3 ./ L (3) ;
fk4 = k4 ./ L (4) ;
for i =1: length ( fk1 )
Pxx1_fk1 ( i ) = 0;
Pxx2_fk1 ( i ) = 0;
for m = 1: N
Pxx1_fk1 ( i ) = Pxx1_fk1 ( i ) + x1 ( m ) * exp ( - sqrt ( -1) *2*
%pi *( m -1) * fk1 ( i ) ) ;
Pxx2_fk1 ( i ) = Pxx1_fk1 ( i ) + x1 ( m ) * exp ( - sqrt ( -1) *2*
%pi *( m -1) * fk1 ( i ) ) ;
end
Pxx1_fk1 ( i ) = ( Pxx1_fk1 ( i ) ^2) / N ;
Pxx2_fk1 ( i ) = ( Pxx2_fk1 ( i ) ^2) / N ;
end
for i =1: length ( fk2 )
Pxx1_fk2 ( i ) = 0;
Pxx2_fk2 ( i ) = 0;
for m = 1: N
Pxx1_fk2 ( i ) = Pxx1_fk2 ( i ) + x1 ( m ) * exp ( - sqrt ( -1) *2*
%pi *( m -1) * fk2 ( i ) ) ;
Pxx2_fk2 ( i ) = Pxx1_fk2 ( i ) + x1 ( m ) * exp ( - sqrt ( -1) *2*
%pi *( m -1) * fk2 ( i ) ) ;
end
Pxx1_fk2 ( i ) = ( Pxx1_fk2 ( i ) ^2) / N ;
Pxx2_fk2 ( i ) = ( Pxx1_fk2 ( i ) ^2) / N ;
end
for i =1: length ( fk3 )
Pxx1_fk3 ( i ) = 0;
Pxx2_fk3 ( i ) = 0;
for m = 1: N
Pxx1_fk3 ( i ) = Pxx1_fk3 ( i ) + x1 ( m ) * exp ( - sqrt ( -1) *2*
%pi *( m -1) * fk3 ( i ) ) ;
Pxx2_fk3 ( i ) = Pxx1_fk3 ( i ) + x1 ( m ) * exp ( - sqrt ( -1) *2*
%pi *( m -1) * fk3 ( i ) ) ;
end
Pxx1_fk3 ( i ) = ( Pxx1_fk3 ( i ) ^2) / N ;
62

49
Pxx2_fk3 ( i ) = ( Pxx1_fk3 ( i ) ^2) / N ;
50 end
51 for i =1: length ( fk4 )
52
Pxx1_fk4 ( i ) = 0;
53
Pxx2_fk4 ( i ) = 0;
54
for m = 1: N
55
Pxx1_fk4 ( i ) = Pxx1_fk4 ( i ) + x1 ( m ) * exp ( - sqrt ( -1) *2*
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

%pi *( m -1) * fk4 ( i ) ) ;


Pxx2_fk4 ( i ) = Pxx1_fk4 ( i ) + x1 ( m ) * exp ( - sqrt ( -1) *2*
%pi *( m -1) * fk4 ( i ) ) ;
end
Pxx1_fk4 ( i ) = ( Pxx1_fk4 ( i ) ^2) / N ;
Pxx2_fk4 ( i ) = ( Pxx1_fk4 ( i ) ^2) / N ;
end
figure
title ( f o r f r e q u e n c y s e p a r a t i o n = 0 . 0 6 )
subplot (2 ,2 ,1)
plot2d3 ( gnn ,k1 , abs ( Pxx1_fk1 ) )
subplot (2 ,2 ,2)
plot2d3 ( gnn ,k2 , abs ( Pxx1_fk2 ) )
subplot (2 ,2 ,3)
plot2d3 ( gnn ,k3 , abs ( Pxx1_fk3 ) )
subplot (2 ,2 ,4)
plot2d3 ( gnn ,k4 , abs ( Pxx1_fk4 ) )
figure
title ( f o r f r e q u e n c y s e p a r a t i o n = 0 . 0 1 )
subplot (2 ,2 ,1)
plot2d3 ( gnn ,k1 , abs ( Pxx2_fk1 ) )
subplot (2 ,2 ,2)
plot2d3 ( gnn ,k2 , abs ( Pxx2_fk2 ) )
subplot (2 ,2 ,3)
plot2d3 ( gnn ,k3 , abs ( Pxx2_fk3 ) )
subplot (2 ,2 ,4)
plot2d3 ( gnn ,k4 , abs ( Pxx2_fk4 ) )
Scilab code Exa 12.5.1 Determination of power, frequency and varaince
of Additive noise

63

1 // Example 1 2 . 5 . 1
2 // D e t e r m i n a t i o n o f power , f r e q u e n c y and v a r a i n c e o f
3 // A d d i t i v e n o i s e
4 clear all ;
5 clc ;
6 close ;
7 ryy = [0 ,1 ,3 ,1 ,0]; // A u t o c o r r e l a t i o n o f s i g n a l
8 cen_ter_value = ceil ( length ( ryy ) /2) ; // c e n t e r v a l u e

of autocorrelation
9 // Method1
10 //TO f i n d o u t t h e v a r i a n c e o f t h e a d d i t i v e N o i s e
11 C = ryy ( ceil ( length ( ryy ) /2) : $ ) ;
12 corr_matrix = toeplitz ( C ) ; // c o r r e l a t i o n m a t r i x
13 evals = spec ( corr_matrix ) ; // E i g e n V a l u e s c o m p u t a t i o n
14 sigma_w = min ( evals ) ; // Minimum o f e i g e n v a l u e =
15
16
17
18
19
20
21
22
23
24
25

varinace of noise
// Method2
//TO f i n d o u t t h e v a r i a n c e o f t h e a d d i t i v e N o i s e
P = [1 , - sqrt (2) ,1]; // P l o y n o m i a l i n d e c r e a s i n g o r d e r
Z = roots ( P ) ; // r o o t s o f t h e p o l y n o m i a l
P1 = ryy ( cen_ter_value +1) / real ( Z (1) ) ; // power o f t h e
sinusoid
A = sqrt (2* P1 ) ; // a m p l i t u d e o f t h e s i n u s o i d
sigma_w1 = ryy ( cen_ter_value ) - P1 ; // v a r i a n c e o f n o i s e
method2
disp ( P1 , Power o f t h e a d d i t i v e n o i s e )
f1 = acos ( real ( Z (1) ) ) /(2* %pi )
disp ( f1 , f r e q u e n c y o f t h e a d d i t i v e n o i s e )
disp ( sigma_w1 , V a r i a n c e o f t h e a d d i t i v e n o i s e )

64

Appendix to Examples
Scilab code AE 4.2.7 Sampling a Nonbandlimted signal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

// Example 4 . 2 . 7 S a m p l i n g a N o n b a n d l i m i t e d S i g n a l
// P l o t t i n g D i s c r e t e Time F o u r i e r T r a n s f o r m o f
// D i s c r e t e Time S i g n a l x ( nT )= exp (AT a b s ( n ) )
clear all ;
clc ;
close ;
// Analog S i g n a l
A =1;
// A m p l i t u d e
Dt = 0.005;
t = -2: Dt :2;
// C o n t i n u o u s Time S i g n a l
xa = exp ( - A * abs ( t ) ) ;
// D i s c r e t e Time S i g n a l
Fs = input ( E n t e r t h e S a m p l i n g F r e q u e n c y i n H e r t z ) ;
// Fs = 1Hz ( o r ) 20 Hz
Ts = 1/ Fs ;
n = -5:1:5;
nTs = n * Ts ;
x = exp ( - A * abs ( nTs ) ) ;
// Analog S i g n a l r e c o n s t r u c t i o n
Dt = 0.005;
t = -2: Dt :2;
Xa = x * sinc_new ( Fs *( ones ( length ( nTs ) ,1) *t - nTs * ones
(1 , length ( t ) ) ) ) ;
// c h e c k
error = max ( abs ( Xa - xa ) )
65

25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

subplot (2 ,1 ,1) ;
a = gca () ;
a . x_location = o r i g i n ;
a . y_location = o r i g i n ;
plot (t , xa ) ;
xlabel ( t i n msec . ) ;
ylabel ( xa ( t ) )
title ( O r i g i n a l Analog S i g n a l )
subplot (2 ,1 ,2) ;
a = gca () ;
a . x_location = o r i g i n ;
a . y_location = o r i g i n ;
xlabel ( t i n msec . ) ;
ylabel ( xa ( t ) )
title ( R e c o n s t r u c t e d S i g n a l from x ( n ) u s i n g s i n c
f u n c t i o n );
40 plot (t , Xa ) ;
*Refer to the following for Scilab code of sinc
ARC 4A

Scilab code ARC 4A sinxbyx


1 function [ y ]= sinc_new ( x )
2 i = find ( x ==0) ;
3 x ( i ) = 1;
// From LS : don t n e e d t h i s

warning i s o f f
4 y = sin ( %pi * x ) ./( %pi * x ) ;
5 y ( i ) = 1;
6 endfunction
Scilab code AE 4.4.2 Frequency Response
1 clear all ;
2 close ;
3 clc ;

66

i s /0

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

W = - %pi :(1/500) : %pi ;


z = exp ( sqrt ( -1) * W ) ;
H = z ./( z -0.8) ;
Mag_H = abs ( H ) ;
[ Phase_H , m ] = phasemag ( H ) ;
// phasemag u s e d t o c a l c u l a t e p h a s e and m a g n i t u d e i n
dB
subplot (2 ,1 ,1)
plot2d (W , Mag_H )
xlabel ( F r e q u e n c y i n R a d i a n s )
ylabel ( a b s (H) )
title ( Magnitude R e s p o n s e )
subplot (2 ,1 ,2)
plot2d (W , Phase_H )
xlabel ( F r e q u e n c y i n R a d i a n s )
ylabel ( <(H) )
title ( Phase R e s p o n s e )
Scilab code AE 8.2.28A DESIGN AND OBTAIN THE FREQUENCY
RESPONSE OF FIR FILTER Band Pass

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

//PROGRAM TO DESIGN AND OBTAIN THE FREQUENCY


RESPONSE OF FIR FILTER
// Band PASS FILTER
clear all ;
clc ;
close ;
M = 11
// F i l t e r l e n g t h = 11
Wc = [ %pi /4 ,3* %pi /4];
// D i g i t a l C u t o f f
frequency
Wc2 = Wc (2)
Wc1 = Wc (1)
Tuo = (M -1) /2
// C e n t e r V a l u e
hd = zeros (1 , M ) ;
W = zeros (1 , M ) ;
for n = 1:11
if ( n == Tuo +1)
hd ( n ) = ( Wc2 - Wc1 ) / %pi ;
67

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

else
n
hd ( n ) = ( sin ( Wc2 *(( n -1) - Tuo ) ) - sin ( Wc1 *(( n -1) Tuo ) ) ) /((( n -1) - Tuo ) * %pi ) ;
end
if ( abs ( hd ( n ) ) <(0.00001) )
hd ( n ) =0;
end
end
hd ;
// R e c t a n g u l a r Window
for n = 1: M
W ( n ) = 1;
end
// Windowing F i t l e r C o e f f i c i e n t s
h = hd .* W ;
disp ( F i l t e r C o e f f i c i e n t s a r e )
h;
[ hzm , fr ]= frmag (h ,256) ;
hzm_dB = 20* log10 ( hzm ) ./ max ( hzm ) ;
subplot (2 ,1 ,1)
plot (2* fr , hzm )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y
ylabel ( Magnitude ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR BPF
R e c t a n g u l a r window M=11 )
subplot (2 ,1 ,2)
plot (2* fr , hzm_dB )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR BPF
R e c t a n g u l a r window M=11 )

W ) ;
using

W ) ;
using

Scilab code AE 8.2.28B DESIGN AND OBTAIN THE FREQUENCY


RESPONSE OF FIR FILTER Band Stop
1

//PROGRAM TO DESIGN AND OBTAIN THE FREQUENCY


RESPONSE OF FIR FILTER
68

2 // Band S t o p FILTER ( o r ) Band R e j e c t F i l t e r


3 clear all ;
4 clc ;
5 close ;
6 M = 11
// F i l t e r l e n g t h = 11
7 Wc = [ %pi /4 ,3* %pi /4];
// D i g i t a l C u t o f f
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

frequency
Wc2 = Wc (2)
Wc1 = Wc (1)
Tuo = (M -1) /2
// C e n t e r V a l u e
hd = zeros (1 , M ) ;
W = zeros (1 , M ) ;
for n = 1:11
if ( n == Tuo +1)
hd ( n ) = 1 -(( Wc2 - Wc1 ) / %pi ) ;
else
hd ( n ) =( sin ( %pi *(( n -1) - Tuo ) ) - sin ( Wc2 *(( n -1) Tuo ) ) + sin ( Wc1 *(( n -1) - Tuo ) ) ) /((( n -1) - Tuo ) * %pi ) ;
end
if ( abs ( hd ( n ) ) <(0.00001) )
hd ( n ) =0;
end
end
hd
// R e c t a n g u l a r Window
for n = 1: M
W ( n ) = 1;
end
// Windowing F i t l e r C o e f f i c i e n t s
h = hd .* W ;
disp ( F i l t e r C o e f f i c i e n t s a r e )
h;
[ hzm , fr ]= frmag (h ,256) ;
hzm_dB = 20* log10 ( hzm ) ./ max ( hzm ) ;
subplot (2 ,1 ,1)
plot (2* fr , hzm )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude ) ;

69

37
38
39
40
41
42

title ( F r e q u e n c y R e s p o n s e 0 f FIR BPF u s i n g


R e c t a n g u l a r window M=11 )
subplot (2 ,1 ,2)
plot (2* fr , hzm_dB )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR BPF u s i n g
R e c t a n g u l a r window M=11 )
Scilab code AE 8.2.28C DESIGN AND OBTAIN THE FREQUENCY
RESPONSE OF FIR FILTER High

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

// F i g u r e 8 . 9 and 8 . 1 0
//PROGRAM TO DESIGN AND OBTAIN THE FREQUENCY
RESPONSE OF FIR FILTER
//LOW PASS FILTER
clear all ;
clc ;
close ;
M = 61
// F i l t e r l e n g t h = 61
Wc = %pi /5;
// D i g i t a l C u t o f f f r e q u e n c y
Tuo = (M -1) /2
// C e n t e r V a l u e
for n = 1: M
if ( n == Tuo +1)
hd ( n ) = Wc / %pi ;
else
hd ( n ) = sin ( Wc *(( n -1) - Tuo ) ) /((( n -1) - Tuo ) * %pi )
;
end
end
// R e c t a n g u l a r Window
for n = 1: M
W ( n ) = 1;
end
// Windowing F i l t e r C o e f f i c i e n t s
h = hd .* W ;
disp ( F i l t e r C o e f f i c i e n t s a r e )
h;
70

25 [ hzm , fr ]= frmag (h ,256) ;


26 hzm_dB = 20* log10 ( hzm ) ./ max ( hzm ) ;
27 subplot (2 ,1 ,1)
28 plot ( fr , hzm )
29 xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
30 ylabel ( Magnitude ) ;
31 title ( F r e q u e n c y R e s p o n s e 0 f FIR LPF u s i n g
32
33
34
35
36

R e c t a n g u l a r window M=61 )
subplot (2 ,1 ,2)
plot ( fr , hzm_dB )
xlabel ( N o r m a l i z e d D i g i t a l F r e q u e n c y W ) ;
ylabel ( Magnitude i n dB ) ;
title ( F r e q u e n c y R e s p o n s e 0 f FIR LPF u s i n g
R e c t a n g u l a r window M=61 )
Scilab code AE 8.3.5 High Pass Filter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

// Example 8 . 3 . 5
// F i r s t Order B u t t e r w o r t h F i l t e r
//Low P a s s F i l t e r
clear all ;
clc ;
close ;
s = poly (0 , s ) ;
Omegac = 0.2* %pi ;
H = Omegac /( s + Omegac ) ;
T =1; // S a m p l i n g p e r i o d T = 1 S e c o n d
z = poly (0 , z ) ;
Hz = horner (H ,(2/ T ) *(( z -1) /( z +1) ) )
HW = frmag ( Hz (2) , Hz (3) ,512) ;
W = 0: %pi /511: %pi ;
plot ( W / %pi , HW )
a = gca () ;
a . thickness = 3;
a . foreground = 1;
a . font_style = 9;
xgrid (1)

71

21

xtitle ( Magnitude R e s p o n s e o f S i n g l e p o l e LPF F i l t e r


C u t o f f f r e q u e n c y = 0 . 2 p i , D i g i t a l Frequency
> , Magnitude ) ;
Scilab code AE 8.3.6 Analog Low Pass

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

// Example 8 . 3 . 6
// To D e s i g n an Analog Low P a s s I I R B u t t e r w o r t h
Filter
// For t h e g i v e n c u t o f f f r e q u e n c y Wc = 500 Hz
clear all ;
clc ;
close ;
omegap = 500;
omegas = 1000;
delta1_in_dB = -3;
delta2_in_dB = -40;
delta1 = 10^( delta1_in_dB /20)
delta2 = 10^( delta2_in_dB /20)
// C a l c u l a t i o n o f F i l t e r Order
N = log10 ((1/( delta2 ^2) ) -1) /(2* log10 ( omegas / omegap ) )
N = ceil ( N )
omegac = omegap ;
// P o l e s and Gain C a l c u l a t i o n
[ pols , gain ]= zpbutt (N , omegac ) ;
// Magnitude R e s p o n s e o f Analog I I R B u t t e r w o r t h
Filter
h = buttmag (N , omegac ,1:1000) ;
// Magnitude i n dB
mag =20* log10 ( h ) ;
plot2d ((1:1000) ,mag ,[0 , -180 ,1000 ,20]) ;
a = gca () ;
a . thickness = 3;
a . foreground = 1;
a . font_style = 9;
xgrid (5)
xtitle ( Magnitude R e s p o n s e o f B u t t e r w o r t h LPF F i l t e r
C u t o f f f r e q u e n c y = 500 Hz , Analog f r e q u e n c y i n
72

Hz> , Magnitude i n dB > ) ;


Scilab code AE 8.4.1 High Pass Filter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

// Example 8 . 3 . 5
// F i r s t Order B u t t e r w o r t h F i l t e r
// High P a s s F i l t e r
// T a b l e 8 . 1 3 : U s i n g D i g i t a l F i l t e r T r a n s f o r m a t i o n
clear all ;
clc ;
close ;
s = poly (0 , s ) ;
Omegac = 0.2* %pi ;
H = Omegac /( s + Omegac ) ;
T =1; // S a m p l i n g p e r i o d T = 1 S e c o n d
z = poly (0 , z ) ;
Hz_LPF = horner (H ,(2/ T ) *(( z -1) /( z +1) ) ) ;
alpha = -( cos (( Omegac + Omegac ) /2) ) /( cos (( Omegac Omegac ) /2) ) ;
HZ_HPF = horner ( H_LPF , -( z + alpha ) /(1+ alpha * z ) )
HW = frmag ( HZ_HPF (2) , HZ_HPF (3) ,512) ;
W = 0: %pi /511: %pi ;
plot ( W / %pi , HW )
a = gca () ;
a . thickness = 3;
a . foreground = 1;
a . font_style = 9;
xgrid (1)
xtitle ( Magnitude R e s p o n s e o f S i n g l e p o l e HPF F i l t e r
C u t o f f f r e q u e n c y = 0 . 2 p i , D i g i t a l Frequency
> , Magnitude ) ;
Scilab code AE 8.4.2A Analog Filter Transformation

// Example 8 . 4 . 2
//To D e s i g n an D i g i t a l I I R B u t t e r w o r t h F i l t e r from
Analog I I R B u t t e r w o r t h F i l t e r
3 // and t o p l o t i t s m a g n i t u d e r e s p o n s e
1
2

73

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

//TRANSFORMATION OF LPF TO BSF USING DIGITAL


TRANSFORMATION
clear all ;
clc ;
close ;
omegaP = 0.2* %pi ;
omegaL = (2/5) * %pi ;
omegaU = (3/5) * %pi ;
z = poly (0 , z ) ;
H_LPF = (0.245) *(1+( z ^ -1) ) /(1 -0.509*( z ^ -1) )
alpha = ( cos (( omegaU + omegaL ) /2) / cos (( omegaU - omegaL )
/2) ) ;
k = tan (( omegaU - omegaL ) /2) * tan ( omegaP /2) ;
NUM =(( z ^2) -((2* alpha /(1+ k ) ) * z ) +((1 - k ) /(1+ k ) ) ) ;
DEN = (1 -((2* alpha /(1+ k ) ) * z ) +(((1 - k ) /(1+ k ) ) *( z ^2) ) ) ;
HZ_BPF = horner ( H_LPF , NUM / DEN )
HW = frmag ( HZ_BPF (2) , HZ_BPF (3) ,512) ;
W = 0: %pi /511: %pi ;
plot ( W / %pi , HW )
a = gca () ;
a . thickness = 3;
a . foreground = 1;
a . font_style = 9;
xgrid (1)
xtitle ( Magnitude R e s p o n s e o f BSF F i l t e r , D i g i t a l
F r e q u e n c y > , Magnitude ) ;
Scilab code AE 8.4.2B Digital Filter Transformation

1
2
3
4
5
6

// C a p t i o n : C o n v e t i n g s i n g l e p o l e LPF B u t t e r w o r t h
f i l t e r i n t o BPF
// Exa8 . 4 . 1
// p a g e 6 9 8
clc ;
Op = sym ( Op ) ; // p a s s band e d g e f r e q u e n c y o f low
pass f i l t e r
s = sym ( s ) ;

74

7 Ol = sym ( Ol ) ;

// l o w e r c u t o f f f r e q u e n c y o f band

pass f i l t e r
8 Ou = sym ( Ou ) ; // u p p e r c u t o f f

f r e q u e n c y o f band

pass f i l t e r
9 s1 = Op *( s ^2+ Ol * Ou ) /( s *( Ou - Ol ) ) ; // Analog
10
11
12
13
14
15
16

t r a n s f o r m a t i o n f o r LPF t o BPF
H_Lpf = Op /( s + Op ) ; // s i n g l e p o l e a n a l o g LPF
Butterworth f i l t e r
H_Bpf = limit ( H_Lpf ,s , s1 ) ; // a n a l o g BPF B u t t e r w o r t h
filter
disp ( H_Lpf , H Lpf = )
disp ( H_Bpf , H Bpf = )
// R e s u l t
// H Lpf = Op/ ( s+Op)
// H Bpf = ( OuOl ) s / ( s 2+(OuOl ) s+Ol Ou)

75

You might also like