You are on page 1of 11

PROJECT REPORT

Digital Signal Processing using MATLAB


(EC-316)

TITLE-DTMF DECODER DESIGN USING MATLAB

SUBMITTED TOMR.RAJESH HOODA Deputy Dean (School of Electronics & Electrical Engineering)

SUBMITTED BYGurpreet Kaur (E102037) Harsimran Kaur (E102042) Heena (E102043) Jyoti Chawla (E102052)

D.S.P /EC-316

DTMF DECODER DESIGN USING MATLAB


INTRODUCTION:
Analog DTMF telephone signaling is based on encoding standard telephone Keypad digits and symbols in two audible sinusoidal signals of frequencies FL and FH. Thus the scheme gets its name as dual tone multi frequency (DTMF). Telephone touch-tone pads generate dual tone multiple frequency (DTMF) signals to dial a telephone. When any key is pressed, the sinusoids of the corresponding row and column frequencies, shown in Fig. 1, are generated and summed. Hence the name dual tone. As an example, pressing the 5 key generates a signal containing the sum of the two tones, one at 770 Hz and the other at 1336 Hz. The frequencies in Fig. 1 were chosen, by the design engineers, to avoid harmonics. No frequency is an integer multiple of another, the difference between any two frequencies does not equal any of the frequencies, and the sum of any two frequencies does not equal any of the frequencies. This makes it easier to detect exactly which tones are present in the dialed signal in the presence of non-linear line distortions.

Each digit or symbol represented in figure 1 has 2 distinct high and low frequency components. Thus each high-low frequency pair uniquely identifies the corresponding telephone keypad digit or symbol. Each key pressed can be represented as a discrete time signal of form dt[n] = sin[L n] + sin[H n] , 0 n N-1 Where N is defined as number of samples taken. Typically the sampling frequency used is 8khz. Thus if the two individual frequency components of the signal can be identified then the number dialed can be decoded.
CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

STEPS TO DECODE A DTMF SIGNAL:


1. Divide the time signal into short time segments representing individual key presses. 2. Filter the individual segments to extract the possible frequency components. In this step, bandpass filters can be used to isolate the sinusoidal components. 3. Determine which two frequency components are present in each time segment by measuring the size of the output signal from all of the bandpass filters. 4. Determine which key was pressed, 09, AD, *, or # by converting frequency pairs back into key names according to Fig. 1. It is possible to decode DTMF signals using a simple FIR filter bank. The filter bank in Fig. 2 consists of eight bandpass filters, where each filter passes only one of the eight possible DTMFfrequencies. The input signal for all the filters is the same DTMF signal.

WORKING OF THE SYSTEM:


When the input to the filter bank is a DTMF signal, the outputs from two of the bandpass filters (BPFs) should be larger than the rest. If we detect (or measure) which two outputs are the large ones, then we know the two corresponding frequencies. These frequencies are then used as row and column pointers to
CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

determine the key from the DTMF code. A good measure of the output levels is the peak value at the filter outputs, because when the BPF is working properly it should pass only one sinusoidal signal and the peak value would be the amplitude of the sinusoid passed by the filter.

MATLAB CODE:
%DTMF DECODER function varargout = decode(varargin) % DECODE M-file for decode.fig % DECODE, by itself, creates a new DECODE or raises the existing % singleton*. % % H = DECODE returns the handle to a new DECODE or the handle to % the existing singleton*. % % DECODE('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in DECODE.M with the given input arguments. % % DECODE('Property','Value',...) creates a new DECODE or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before decode_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to decode_OpeningFcn via varargin.

gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @decode_OpeningFcn, ... 'gui_OutputFcn', @decode_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin & isstr(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % --- Executes just before decode is made visible. function decode_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data

CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

% varargin

command line arguments to decode

% Choose default command line output for decode handles.output = hObject; % Update handles structure guidata(hObject, handles); % --- Outputs from this function are returned to the command line. function varargout = decode_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args; % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data % Get default command line output from handles structure varargout{1} = handles.output;

% --- Executes on button press in 1. function b1_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=697;f2=1209; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2; sound(y,fs) subdecode; % --- Executes on button press in 2. function b2_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=697;f2=1336; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in A. function A_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=697;f2=1663; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in 3. function b3_Callback(hObject, eventdata, handles)

CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

t=[0:0.000125:.05]; fs=8000; f1=697;f2=1447; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in 4. function b4_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=770;f2=1209; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in 5. function b5_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=770;f2=1336; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in B. function B_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=770;f2=1633; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in 6. function b6_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=770;f2=1477; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; %--- Executes on button press in 7. function b7_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=852;f2=1209; y1=.25*sin(2*pi*f1*t);

CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in 8. function b8_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=852;f2=1336; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in C. function C_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=852;f2=1633; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in 9. function b9_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=852;f2=1477; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in *. function ba_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=941;f2=1209; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in 0. function b0_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=941;f2=1336; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs)

CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

subdecode; % --- Executes on button press in D. function D_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=941;f2=1633; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs) subdecode; % --- Executes on button press in #. function bn_Callback(hObject, eventdata, handles) t=[0:0.000125:.05]; fs=8000; f1=941;f2=1477; y1=.25*sin(2*pi*f1*t); y2=.25*sin(2*pi*f2*t); y=y1+y2;sound(y,fs); subdecode; % --- Executes on button press in info. function info_Callback(hObject, eventdata, handles) msgbox('File was created by: ECE-6X','Info') % --- Executes on button press in close. function close_Callback(hObject, eventdata, handles) close; %SUBDECODE axes(handles.fig1); plot(t,y); set(handles.fig1,'XMinorTick','on'); title('DTMF Input');xlabel('Time'); ylabel('Amplitude');grid; rmain=2048*2;rmag=1024*2; cn=9;cr=0.5; cl=.25;ch=.28; [b,a]=cheby1(cn,cr,cl); yfilt1=filter(b,a,y); h2=fft(yfilt1,rmain); hmag2=abs(h2(1:rmag)); [b1,a1]=cheby1(cn,cr,ch,'high'); yfilt2=filter(b1,a1,y); h3=fft(yfilt2,rmain); hmag3=abs(h3(1:rmag)); axes(handles.fig2); plot(yfilt1);grid;

CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

title('Filtered Low Freq. Signal'); xlabel('Time');ylabel('Amplitude'); axes(handles.fig3); plot(yfilt2);grid; title('Filtered High Freq. Signal'); xlabel('Time');ylabel('Amplitude'); hlow=fft(yfilt1,rmain); hmaglow=abs(hlow); axes(handles.fig4); plot(hmaglow(1:rmag)); title('FFT Low Pass');grid; xlabel('Time');ylabel('Amplitude'); hhigh=fft(yfilt2,rmain); hmaghigh=abs(hhigh); axes(handles.fig5); plot(hmaghigh(1:rmag)); title('FFT High Pass');grid; xlabel('Time');ylabel('Amplitude'); m=max(abs(hmag2));n=max(abs(hmag3)); o=find(m==hmag2);p=find(n==hmag3); j=((o-1)*fs)/rmain; k=((p-1)*fs)/rmain; if j<=732.59 & k<=1270.91; disp('---> Key Pressed is 1'); elseif j<=732.59 & k<=1404.73; disp('---> Key Pressed is 2'); elseif j<=732.59 & k<=1553.04; disp('---> Key Pressed is 3'); elseif j<=732.59 & k>1553.05; disp('---> Key Pressed is A'); elseif j<=809.96 & k<=1270.91; disp('---> Key Pressed is 4'); elseif j<=809.96 & k<=1404.73; disp('---> Key Pressed is 5'); elseif j<=809.96 & k<=1553.04; disp('---> Key Pressed is 6'); elseif j<=809.96 & k>1553.05; disp('---> Key Pressed is B'); elseif j<=895.39 & k<=1270.91; disp('---> Key Pressed is 7'); elseif j<=895.39 & k<=1404.73; disp('---> Key Pressed is 8'); elseif j<=895.39 & k<=1553.04; disp('---> Key Pressed is 9'); elseif j<=895.39 & k>1553.05; disp('---> Key Pressed is C');

CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

elseif j>895.40 & disp('---> Key elseif j>895.40 & disp('---> Key elseif j>895.40 & disp('---> Key elseif j>895.40 & disp('---> Key end

k<=1270.91; Pressed is *'); k<=1404.73; Pressed is 0'); k<=1553.04; Pressed is #'); k>1553.05; Pressed is D');

OUTPUT:

CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

D.S.P /EC-316

CHITKARA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHANDIGARH-PATIALA NATIONAL HIGHWAY, RAJPURA, DISTT. PATIALA 140401

You might also like