DSP
DTMF EN MATLAB
UNIVERSIDAD POLITECNICA SALESIANA
JUAN DIEGO BERNAL, JAIME SANCHEZ R, CHRISTIAN ROMERO, MARCO SANCHEZ
ESTUDIANTES DE LA CARRERA DE INGENIERÍA ELECTRÓNICA
Abstract
Dentro de la telefonía, el sistema DTMF es
muy usado para detectar las teclas que se
están pulsando y según eso realizar la
marcación. Para esto se hace un análisis en
frecuencia de los tonos y se va viendo el
rango en el que estos están. Esto se puede
implementar d manera física o usando un
software, que ese es nuestro caso. A
continuación se detalla el proceso y
conceptos básicos que se debe saber sobre
este tema. Fig1. Rango de frecuencias de los tonos
Palabras clave:
DTMF, rango de frecuencias, FFT 1.2 DETECCION DE FRECUENCIAS
Colocamos la frecuencia a la cual se debe
1. DTMF muestrear y de ahí sacamos la transformada
de Fourier para analizarlas de la siguiente
Es un método utilizado por el sistema forma:
telefónico para reconocer las teclas pulsadas
durante la marcación. Al pulsar una tecla en Function
el teclado del teléfono se generan dos tonos [f,modulo]=transform(sonido)
f=0;
simultáneos, que son descodificados por la modulo=0;
centralita para determinar la tecla fc=8000;
pulsada. Este método se aplica tanto para
celulares como para teléfonos N=length(sonido);
convencionales para poder enlazar una L=2.^nextpow2(N);
comunicación. %longitud de la transformada de
fourier
FFT_intera=fft(sonido,L)/N; %
Para poder realizar la práctica, primero se transformada de fourier
tuvo que revisar el rango de frecuencias en normalizada
las que se encontraban cada uno de los f=linspace(0,1,L/2)*fc/2;
números, para esto se reviso la siguiente % eje de frecuencia f=F*fc/2
tabla: (frequenze da zero a fc/2)
FFT=FFT_intera(1:L/2);
% seleccionar muestras
modulo=2*abs(FFT);
Con las sentencias anteriormente descritas,
podemos detectar las frecuencias. Ahora una
PRACTICA DTMF Pá gina 1
DSP
vez hecho este pasó, procedemos a analizar num='4';
el sonido adquirido, ya que el mismo si no elseif indice== [2 6]
num='5';
esta dentro el rango especificado, no servirá elseif indice== [2 7]
de nada. Para esto num='6';
Nos valemos de la siguiente función: elseif indice== [3 5]
num='7';
function num=detection(f,modulo) elseif indice== [3 6]
num='8';
elseif indice== [3 7]1
num='9';
base_f=[697 770 852 941 1209 1336
elseif indice== [4 5]
1477]; % frecuencias dtmf
num='asterisco';
f_base=zeros(1,length(base_f));
elseif indice== [4 6]
% vector de ceros igual al vector
num='0';
de frecuencias
elseif indice== [4 7]
rango=2;
num='numeral';
% error mas menos de Hz
else
num=0;
num='error';
end
end
for j=1:length(base_f)
a(j)=find(f>(base_f(j)-
rango),1,'first'); % indice
b(j)=find(f>(base_f(j)+ Como se observa en las líneas de código, se
rango),1,'first'); % coloca el rango de frecuencias en los que
queremos analizar. Después de eso se hace
umbral(j)=max(modulo(a(j):b(j))); las respectivas comparaciones para saber
% que digito es el presionado y según eso para
end
dirigirnos a la subrutina que nos indica el
número correcto.
u_umbral=max(umbral)/3;
%
Finalmente mostramos el numero que se
for i=1:length(base_f) presiona en el celular mediante una imagen.
if (umbral(i)>u_umbral) Esto se logra con las siguientes líneas de
f_base(i)=base_f(i); código:
else
f_base(i)=0;
end
function
end
pushbutton1_Callback(hObject,
eventdata, handles)
indice=find(f_base); global f
global modulo
if (length(indice)>2) || sonido=wavrecord(8000*3,8000,1);G
(length(indice)==0) RABO SONIDO DE 3 SEGUNDOS a 8000
num='error'; Hz
else [f,modulo]=transform(sonido); %
if indice==[1 5] HAGO LA TRANFORMADA DE FOURIER DE
SONIDO Q GRABE
num='1'; num=deteccion(f,modulo);%
elseif indice==[1 6] Devolverá el nombre de la imagen
num='2'; relacionada a la tecla pulsada o
elseif indice== [1 7] un mensaje de error
num='3';
elseif indice== [2 5] 1
PRACTICA DTMF Pá gina 2
DSP
nome_img_display=strcat(num,'.bmp las mismas ayudaron a determinar el rango
'); de análisis de los mismos.
display=imread(nome_img_display);
% leer la imagen
imshow(display) Cabe recalcar que la realización de la
presenta practica nos ayudara a futuro en
si queremos poder ver la tranforma de donde tengamos que implementar
fourier de la señal para ver el pico de algoritmos computacionales más complejos,
frecuencia en donde se encuentra par aver si sin embargo los mismos no nos resultaran
concuerda o no con la table mostrada al difíciles si aplicamos los conceptos
inicio del ensayo.2 adquiridos en la presente práctica.
global f Estas serian nuestras conclusiones al término
global modulo de la presente práctica.
figure
plot(f,modulo)
3. REFERENCIAS
title('FFT')
xlabel('FRECUENCIA [Hz]')
ylabel('AMPLITUD') [1][Link]
e/[Link]
[2][Link]
2. CONCLUSIONES terface-DTMF
[3][Link]
Al terminar la siguiente práctica hemos nal/[Link]?
sacado como conclusiones los siguientes file=/products/demos/shipping/signal/dtmfd
puntos: [Link]
Como se ha podido observar, la detección de
tonos DTFM es muy utiliza en el mundo de la
telefonía, ya que si no hubiera esto no se
podría discar o marcar un número telefónico
para enlazar una comunicación.
Por otro lado, para la detección de los tonos
se puede usar un circuito aparte o mediante
un software computacional, que en nuestro
caso fue matlab. Este nos permitió adquirir el
sonido de los tonos mediante el micrófono
del computador y mediante un algoritmo
computacional detectar las frecuencias y ver
que numero es el pulsado.
Otro aspecto que se considero, fue el rango
de frecuencias en las cuales el DTMF
trabajaba. Para esto nos valimos de una tabla
en donde nos especifica las frecuencias de
los tonos. Nos resulto de gran ayuda ya que
PRACTICA DTMF Pá gina 3