Mini Project Final Draft
Mini Project Final Draft
Mini Project Final Draft
By
(1)Amal Roshan B110511EC
(2) Dennis Leslie Jacob B110357EC
(3) Jithin VJ- B110011EC
(4) Animesh Mukherjee- B110826EC
(5) Deepak Surendran-B110172EC
CERTIFICATE
This is to certify that the thesis entitled IVRS BASED COLLEGE RESULT INFORMATION
SYSTEM is a bona fide record of the mini-project done by Amal Roshan(Roll No.B110511EC),
Dennis Leslie Jacob (Roll No. B110357EC), Jithin VJ (Roll No.B110011EC),Animesh
Mukherjee(Roll No. B110826EC) and Deepak Surendran (Roll No.B110172EC) under my
supervision and guidance, in partial fulfillment of the requirements for the award of Degree of
Bachelor of Technology in Electronics and Communication Engineering from National Institute of
Technology Calicut for the year 2015.
Dr A.V. Babu
(Guide)
Associate Professor
Dept. of Electronics and Communication Engineering
Place:
Date:
ACKNOWLEDGEMENT
We take this opportunity to express our profound gratitude and deep regards to our guide Professor
A V Babu for his exemplary guidance, monitoring and constant encouragement throughout the
course of this thesis. The blessing, help and guidance given by him time to time shall carry us a
long way in the journey of life on which we are about to embark. We are obliged to our fellow
classmates for the valuable information provided by them in their respective fields. We are also
thankful for our project evaluators Dr.P C Subramaniam, Ms.Bindiya T.S and Mrs. Suja K J for
pointing out the drawbacks and for their valuable feedback.
Lastly, we thank almighty, parents, brothers, sisters and friends for their constant encouragement
without which this assignment would not be possible.
INTRODUCTION
Interactive voice response (IVR) is a technology that allows a computer to interact with humans
through the use of voice and DTMF tones input via keypad.
In telecommunications, IVR allows customers to interact with a companys host system via a
telephone keypad or by speech recognition, after which they can service their own inquiries by
following the IVR dialogue. IVR systems can respond with pre-recorded or dynamically generated
audio to further direct users on how to proceed. IVR applications can be used to control almost any
function where the interface can be broken down into a series of simple interactions. IVR systems
deployed in the network are sized to handle large call volumes.
IVR technology is also being introduced into automobile systems for hands-free operation. Current
deployment in automobiles revolves around satellite navigation, audio and mobile phone systems.
It is common in industries that have recently entered the telecommunications industry to refer to
an automated attendant as an IVR. The terms, however, are distinct and mean different things to
traditional telecommunications professionals, whereas emerging telephony and VoIP professionals
often use the term IVR as a catch-all to signify any kind of telephony menu, even a basic automated
attendant. The term voice response unit (VRU), is sometimes used as well.
Objective:
The objective of our project is to develop an Interactive Voice Response System that can be used
to provide information such as announcement of results via a user demanded query. The system
should have proper responses for every query that is demanded.
Methodology:
The project is divided in following parts as under methodologies:
1. Database: At first we require a source of information which is created in the form of excel
sheets that include student details like name, roll number, year, cgpa and attendance. Further details
are included like faculty names for different courses and average marks. These excel files are then
accessed via matlab during the initiation of the system. The information can be accessed by
following the instructions as delivered by the system.
The user that is the caller presses keys on his keypad which are converted into DTMF tones and
sent via his mobile phone to the mobile phone in the system. The audio output of the mobile phone
at the receiver is given as input to the dtmf decoder which changes it into a digital output .This
digital output is used by the microcontroller and sent to the computer via USB. Matlab accesses the
serial port of the laptop and gets the user input from there.
In Matlab a FSM is created. The inputs from the serial output
2. Creation of a FSM: FSM or finite state machine is created in the matlab so that based upon
the queries different states or LEVELS OF INFORMATION can be accessed. The coding is done
in the matlab using its indigenous methods and functions. Further the database is linked to the FSM
so that the system can now provide information based upon the queries.
3. Providing an Input interface: The system should be able to get inputs from users, that is
ensured by the serial communication process between the system and the user can provide inputs by
pressing keys that generate Dual tone multi frequency (DTMF) signals that are decoded to provide
proper levels of information. The pressed key from the input is acquired at the system and is
decoded by the DTMF decoder which is serially connected to the FSM.
4. Wireless signal detector circuit and receiver: The receiver phone has automatic call
answer on i.e. it receives call itself. The presence of a call is detected by a ring detector circuit that
can be used to initiate the IVRS system i.e. to make it go to its first state from where it starts the
process of information announcement.
4.1 Working of signal detector: Under zero signal conditions the threshold value is adjusted
using a rheostat and this threshold value is used to compare the detected signals and light up the
LED which is used as the detector. The cellphone signals are from 0.9 GHz to 3 GHz and the
detector is thus designed using capacitors like 100nF.
Overview of working of the circuit: The IVRS system is initiated by a call from some user
that acts to bring the FSM to its zero state. This call is detected and decoded using the wireless
signal detector and the DTMF decoder. After that the user can retrieve information as per his/her
choice by pressing suitable keys as query inputs. Pressing * reverts the process and it begins from
the zero state again if the user is not sure about the previous query.
BLOCK DIAGRAM
In the absence of any wireless signals, the input or antenna only has some noise voltage
which is less than the voltage at Pin 3, as it is a fixed DC voltage. Now the o/p of U1-A is
high and thus voltage at Pin5 is high, then we adjust the voltage at Pin6 using the
potentiometer to get a proper higher value that keeps the Pin7 at a high state so that LED is
reverse biased and does not glow.
What happens when there is a wireless signal in the neighborhood?
As the antenna pics up a wireless signal of frequency say some GHz ranged, the capacitor
C2 gets short.Effectively,the differential voltage appearing across U!-A is very small, hence
the o/p is also very low,ie PIN 5 is at low, and Pin6 is at high. So the output of the U1-B is
low i.e. Pin 7 is at low and hence LED is forward biased. Thus wireless signals are detected.
A DTMF keypad (generator or encoder) generates a sinusoidal tone which is mixture of the row
and column frequencies. The row frequencies are low group frequencies. The column frequencies
belong to high group frequencies. This prevents misinterpretation of the harmonics. Also the
frequencies for DTMF are so chosen that none have a harmonic relationship with the others and that
mixing the frequencies would not produce sum or product frequencies that could mimic another valid
tone. The high-group frequencies (the column tones) are slightly louder than the low-group to
DTMF tones are able to represent one of the 16 different states or symbols on the keypad. This is
equivalent to 4 bits of data, also known as nibble.
Most DTMF decoders can process at least 10 tones per second under the worst of conditions, so
DTMF can easily convey 40 (10 x 4) bits or 5 bytes of data per second which is nowhere near to the
performance of a good communication modem, which can operate nearly 600 times faster (28,800
bits per second). But DTMF signalling is lot more robust under noisy line conditions.
It should be noted that the numbers and symbols on the keypad do not always match the binary values
of DTMF decoders. Most notably, the 0 on the keypad is represented in DTMF by a decimal value
of 10 or binary value of 1010.
The binary codes corresponding to symbols in a DTMF keypad are listed below.
DECIMAL VALUE
BINARY VALUE
KEYBOARD SYMBOL
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
10
1010
11
1011
12
1100
13
1101
14
1110
15
1111
Applications
DTMF tones are thus mainly used at the telephone switching centres for detection of dialled/called
number. They are also used by certain radio and cable TV networks. These networks use DTMF tones
to signal a network station or local cable operator when a local advertisement is to be inserted or for
station identification. In broadcasting, this is known as local insertion. DTMF tones were also used
by terrestrial stations for turning on and shutting off remote transmitters.
DTMF (dual tone multi frequency) is the signal to the phone company that you generate when you
press an ordinary telephone's touch keys. In the United States and perhaps elsewhere, it's known as
"Touchtone" phone (formerly a registered trademark of AT&T). DTMF has generally replaced loop
disconnect ("pulse") dialling. With DTMF, each key you press on your phone generates two tones of
specific frequencies. So that a voice can't imitate the tones, one tone is generated from a highfrequency group of tones and the other from a low frequency group. Here are the signals you send
when you press your touchtone phone keys:
A number of companies make microchips that send and receive DTMF signals. The Telephony
Application Program Interface (TAPI) provides a way for a program to detect DTMF digits.
ARDUINO UNO
Arduino is a single-board microcontroller, intended to make the application of interactive
objects or environments more accessible.[1] The hardware consists of an open-source
hardware board designed around an 8-bit Atmel AVR microcontroller, or a 32-bit Atmel ARM.
Current models feature a USB interface, 6 analog input pins, as well as 14 digital I/O pins which
allows the user to attach various extension boards.
Introduced in 2005, it was designed to give students an inexpensive and easy way to program
interactive objects. It comes with a simple integrated development environment (IDE) that runs
on regular personal computers and allows to write programs for Arduino using C or C++.
The current prices of Arduino boards run around $30 and those of related "clones" as low as $9.
Arduino boards can be purchased pre-assembled or as do-it-yourself kits. Hardware design
information is available for those who would like to assemble an Arduino by hand. It was
estimated in mid-2011 that over 300,000 official Arduinos had been commercially produced, and
in 2013 that 700,000 official boards were in users' hands.
Arduino Code
Analog input- The Arduino samples the analog output of the signal detector circuit. It is sampled
using ADC of the Arduino board. It has an ADC which can convert analog values in the range of 0
to 5V into 1024 levels. This is compared with a threshold value to detect whether a call is active
or not. If the values are high constantly it indicates that there is no call. There will be some
fluctuations in the output when there is an active call. These fluctuations are detected. The
threshold set is 500 if the sensor value falls below 500 we assume a call is detected. If the
sensor value remains high above 500 for a long time (here 1000 is the number of times used).
The DTMF decoder output is read from the I/O pins. There will be change in the DTMF output
only when a user presses any key. The Arduino compares the read value (Val) with the previous
value (preval) it reads and sends it to the laptop only if there is any change the DTMF output.
int preval;
int val;
int call;
int count = 0;
int sensorPin = A0;
int sensorValue = 0;
void setup()
{
// start serial port at 9600 bps:
Serial.begin(9600);
Serial.println('a');
char a = 'b';
while(a!='a')
{
a = Serial.read();
}
//pinMode(0, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
}
void loop()
{
//val =dtmf();
val =0;
if(digitalRead(3)==1)
val =val+1;
if(digitalRead(4)==1)
val =val+2;
if(digitalRead(5)==1)
val =val+4;
if(digitalRead(6)==1)
val =val+8;
sensorValue = analogRead(sensorPin);
if(sensorValue<500)
{
count =0;
call = 1;
}
else
{
count++;
if(count>1000)
call= 0;
}
if(val != preval&&call==1)// sends dtmf output to the serial port if there is any change in dtmf
//output and call is active
{
Serial.println(val);
preval =val;
}
else
{
}
}
MATLAB
Matlab is a high-level language and interactive environment for numerical computation,
visualization, and programming. Using MATLAB, you can analyze data, develop algorithms,
and create models and applications. The language, tools, and built-in math functions enable you
to explore multiple approaches and reach a solution faster than with spreadsheets or traditional
programming languages, such as C/C++ or Java.
We can use MATLAB for a range of applications, including signal processing and
communications, image and video processing, control systems, test and measurement,
computational finance, and computational biology. More than a million engineers and scientists
in industry and academia use MATLAB, the language of technical computing.
OVERVIEW OF CODE
Matlab application is run on the laptop. It keeps reading the serial port. Matlab first imports all
the excels sheets. It then setups serial communication with the Arduino board. It repeatedly
reads the serial port to check for inputs from Arduino board. When the phone is not in a call
matlab receives no input and waits for an input. The code is based on an FSM model. In the
model there are some variables to hold state information. An array is made to hold the
information of the state table. Whenever a new input is received from the serial port it uses this
input and the value of the current state to determine the next state. So the main script contains an
infinite loop which reads the current input and accesses the table (runs state change script) to find
which the next state is. Once it enters the new state it runs the audio out script which contains all
the required audio outputs corresponding to the state. The roll number, branch etc. which are
given as input by the user are stored in separate variables which are used to access the excel files
for the required data as requested by the user. Matlab uses text to speech conversion to convert
techniques to read out the details which will reach audio the user.
Matlab code
Main script: This script should be run in Matlab in the
beginning. This script runs all the other necessary scripts.
In =11;
prev =11;
setup_text_to_speech_converter
disp('speech converter ready');
get_data
disp('data ready');
setup_state_machine
[s] = setupSerial('COM7');
audio_out
while(1)
%gets input from serial port
in1 = fscanf(s);
in = str2num(in1)
%in = input('enter input from serial');
%code for exchanging 10 and 0
if(in==12)
in= prev;
else
prev = in;
end
if(size(in)~=0)%checks if there is any input string
statechange;%changes state according to input
if(in~=11)
audio_out;%makes corresponding audio output
end
end
end
%
%
%
%
%
%
%
%
%
%
%
DTMF CODES
1 1
....
9 9
10 0
11 *
12 #
13 A
14 B
15 C
0 D
NET.addAssembly('System.Speech');
speak = System.Speech.Synthesis.SpeechSynthesizer;
speak.Volume = 100;
get data: This script is used to import all the necessary excel files. This same code is repeated
for each excel file. All the numeric data is available in an array form by using the command
eeef.data.Sheet1; it returns a floating point array with all
numeric data in arrat form.
char(eeef.textdata.Sheet1); gets all text data in array form and
can be used to an array of strings
eeef = importdata('eeef.xls');
%code for extracting all information regarding numeric data
eeef_list = eeef.data.Sheet1;
eeef_roll_max = max(eeef_list,[],1);
eeef_roll_max = eeef_roll_max(1);
struct('current_state',4,'max_input',10,'state_to_max_input',4,'
table',[1,5;2,5;3,5;4,5;5,5;6,5;7,5;8,5;9,5;10,5]),%first digit
incorrect
struct('current_state',5,'max_input',10,'state_to_max_input',5,'
table',[1,6;2,6;3,6;4,6;5,6;6,6;7,6;8,6;9,6;10,6]),%second digit
struct('current_state',6,'max_input',10,'state_to_max_input',6,'
table',[1,7;2,7;3,7;4,7;7,7;6,7;7,7;8,7;9,7;10,7]),%third digit
struct('current_state',7,'max_input',2,'state_to_max_input',8,'t
able',[1,9;2,9;3,9;4,9;5,9]),%attendance or marks
struct('current_state',8,'max_input',2,'state_to_max_input',8,'t
able',[1,9;2,9;3,9;4,9;5,9]),%attendance or marks
struct('current_state',9,'max_input',2,'state_to_max_input',9,'t
able',[1,9;2,9;3,9;4,9;5,9])%marks
struct('current_state',10,'max_input',4,'state_to_max_input',11,
'table',[1,11;2,11;3,11])%enter branch incorrect
struct('current_state',11,'max_input',4,'state_to_max_input',12,
'table',[1,3;2,3;3,3;4,3])%enter year
struct('current_state',12,'max_input',4,'state_to_max_input',12,
'table',[1,3;2,3;3,3;4,3])
struct('current_state',13,'max_input',3,'state_to_max_input',14,
'table',[1,15;2,15;3,15])
struct('current_state',14,'max_input',3,'state_to_max_input',14,
'table',[1,15;2,15;3,15])
struct('current_state',15,'max_input',10,'state_to_max_input',15
,'table',[1,17;2,17;3,17;4,17;5,17;6,17;7,17;8,17;9,17;10,17])%e
nter course code
struct('current_state',16,'max_input',10,'state_to_max_input',17
,'table',[1,17;2,17;3,17;4,17;5,17;6,17;7,17;8,17;9,17;10,17])%e
nter course code
struct('current_state',17,'max_input',10,'state_to_max_input',17
,'table',[1,18;2,18;3,18;4,18;5,18;6,18;7,18;8,18;9,18;10,18])%e
nter course code
struct('current_state',18,'max_input',2,'state_to_max_input',19,
'table',[1,20;2,20;3,20;4,20])
struct('current_state',19,'max_input',2,'state_to_max_input',19,
'table',[1,20;2,20;3,20;4,20])
struct('current_state',20,'max_input',2,'state_to_max_input',20,
'table',[1,20;2,20;3,20;4,20])]
State =1;
roll_number= 0;
faculty_or_student =0;
current_year = 0;
coursecode=0;
branch =0;
setup_serial: This is a function that returns a serial object that can be used to access the serial
port. The baud rate, number of databits and stopbits are set and initial handshaking protocol is
used to make sure serial communication with the arduino is done properly.
function [ s] = setupSerial(comPort )
s = serial(comPort);
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',9600);
set(s,'Parity','none');
fclose(s);
fopen(s);
a = 'b';
while(a~='a')
a = fread(s,1,'uchar');
end
if(a == 'a')
disp('serial communication setup successfully');
end
fprintf(s,'a')
end
Statechange: The state change script checks whether input is 11 which is used to indicate
restart. If in =11 it goes backs to initial state and resets all state variables. If the input is
not 11 it uses the state table to decide which the next state is.
if(in~=11)
if(in>statetable(state). max_input||in ==0)
state = statetable(state). state_to_max_input;
else
state = statetable(state).table(in,2);
end
else
state =1;
roll_number =0;
coursecode =0;
faculty_or_student =0;
current_year = 0;
in =11;
audio_out;
branch =0;
disp('new call or restart');
end
disp(roll_number);
case {6}
roll_number =roll_number*10+in;
disp(roll_number);
case {7}
roll_number =roll_number*10+in;
disp(roll_number);
switch(branch)
case {1}
switch(current_year)
case {1}
if(roll_number>eee1_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(eee1_list(roll_number,1)));
speak.Speak('Name entered in marklist is');
speak.Speak(eee1_textinfo(eee1_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
case {2}
if(roll_number>eee2_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(eee2_list(roll_number,1)));
speak.Speak('Name entered in marklist is');
speak.Speak(eee2_textinfo(eee2_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
case {3}
if(roll_number>eee3_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(eee3_list(roll_number,1)));
speak.Speak(ece2_textinfo(ece2_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
case {3}
if(roll_number>ece3_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(ece3_list(roll_number,1)));
speak.Speak('Name entered in marklist is');
speak.Speak(ece3_textinfo(ece3_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
case {4}
if(roll_number>ece4_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(ece4_list(roll_number,1)));
speak.Speak('Name entered in marklist is');
speak.Speak(ece4_textinfo(ece4_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
otherwise
end
case {3}
switch(current_year)
case {1}
if(roll_number>cse1_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(cse1_list(roll_number,1)));
speak.Speak('Name entered in marklist is');
speak.Speak(cse1_textinfo(cse1_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
case {2}
if(roll_number>cse2_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(cse2_list(roll_number,1)));
speak.Speak('Name entered in marklist is');
speak.Speak(cse2_textinfo(cse2_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
case {3}
if(roll_number>cse3_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(cse3_list(roll_number,1)));
speak.Speak('Name entered in marklist is');
speak.Speak(cse3_textinfo(cse3_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
case {4}
if(roll_number>cse4_roll_max)
speak.Speak('
roll
number
incorrect Please enter
again');
state = 4;
roll_number = 0;
else
speak.Speak('entered roll
number is');
speak.Speak(num2str(cse4_list(roll_number,1)));
speak.Speak('Name entered in marklist is');
speak.Speak(cse4_textinfo(cse4_no_of_rows+roll_number+1,:));
speak.Speak('press
1
for
grade point average
two
for
attendance');
end
otherwise
end
otherwise
end
case {8}
speak.Speak('press
1
for
grade point average
two
for
attendance');
case {9}%marks
if(in == 1)
speak.Speak('your grade point average is');
else
speak.Speak('your attendance is');
end
switch(branch)
case{1}
switch(current_year)
case{1}
text = num2str(eee1_list(roll_number,2+in));
case{2}
text = num2str(eee2_list(roll_number,2+in));
case{3}
text = num2str(eee3_list(roll_number,2+in));
case{4}
text = num2str(eee4_list(roll_number,2+in));
otherwise
end
case {2}
switch(current_year)
case{1}
text = num2str(ece1_list(roll_number,2+in));
case{2}
text = num2str(ece2_list(roll_number,2+in));
case{3}
text = num2str(ece3_list(roll_number,2+in));
case{4}
text = num2str(ece4_list(roll_number,2+in));
otherwise
end
case {3}
switch(current_year)
case{1}
text = num2str(cse1_list(roll_number,2+in));
case{2}
text = num2str(cse2_list(roll_number,2+in));
case{3}
text = num2str(cse3_list(roll_number,2+in));
case{4}
text = num2str(cse4_list(roll_number,2+in));
otherwise
end
otherwise
end
speak.Speak(text);
speak.Speak('press
1
for grade point average
two
for
attendance or else press star symbol to restart');
case{10}
speak.Speak('Branch entered was incorrect press 1 for electrical
press 2 for electronics press 3 for computer science ');
case{11}
branch =in;
switch(branch)
case {1}
speak.Speak('You have chosen electrical');
case {2}
speak.Speak('You have chosen electronics');
case {3}
speak.Speak('You have chosen computer science');
otherwise
end
disp(branch);
speak.Speak('Please enter your current year ');
case{12}
speak.Speak('Entered year is incorrect please enter again');
case{13}
speak.Speak('press 1 for electrical press 2 for electronics
press 3 for computer science ');
case{14}
speak.Speak('Branch entered was incorrect press 1 for electrical
press 2 for electronics press 3 for computer science ');
case{15}
branch = in;
speak.Speak('Please enter the course code');
case{16}
case{17}
if(in<10)
coursecode =in
end
case{18}
if(in<10)
coursecode =coursecode*10+in
end
switch(branch)
case{1}
if(coursecode>eeef_roll_max)
speak.Speak('course code entered was incorrect ');
state =16;
else
speak.Speak('entered course code was ');
speak.Speak(num2str(eeef_list(coursecode,1)));
speak.Speak('name of course entered was');
speak.Speak(eeef_textinfo(eeef_no_of_rows+coursecode+1,:));
speak.Speak('Press 1 to know faculty in charge else Press 2 to
know average marks in previous year');
end
case{2}
if(coursecode>ecef_roll_max)
speak.Speak('course code entered was incorrect ');
state =16;
else
speak.Speak('entered course code was ');
speak.Speak(num2str(ecef_list(coursecode,1)));
speak.Speak('name of course entered was');
speak.Speak(ecef_textinfo(ecef_no_of_rows+coursecode+1,:));
speak.Speak('Press 1 to know faculty in charge else Press 2 to
know average marks in previous year');
end
case{3}
if(coursecode>csef_roll_max)
speak.Speak('course code entered was incorrect ');
state =16;
else
speak.Speak('entered course code was ');
speak.Speak(num2str(csef_list(coursecode,1)));
speak.Speak('name of course entered was');
speak.Speak(csef_textinfo(csef_no_of_rows+coursecode+1,:));
speak.Speak('Press 1 to know faculty in charge else Press 2 to
know average marks in previous year');
end
otherwise
end
case{19}
speak.Speak('Invalid input Press 1 to know faculty in charge
else Press 2 to know average marks in previous year');
case{20}
switch(branch)
case{1}
if(in==1)
speak.Speak('faculty in charge is');
speak.Speak(eeef_textinfo(2*eeef_no_of_rows+coursecode+1,:));
elseif(in==2)
speak.Speak('average marks in previous year');
speak.Speak(num2str(eeef_list(coursecode,4)));
end