Sie sind auf Seite 1von 2

1

DECODIFICADOR DTMF
Luis Nicolalde, Joshua Reyes
Departamento de Eléctrica y Electrónica
Universidad de la Fuerzas Armadas ESPE
Sangolquí,Ecuador
e-mail: jsreyes@espe.edu.ec,ldnicolalde1@espe.edu.ec

Resumen: Diseño de un decodificador de mensajes Para todos los filtros establecimos que el rizo de la banda
codificados en el sistema de marcación por tonos, también pasante tendría 3 decibelios (Rp = 3) y para la atenuación
llamado sistema multifrecuencial o DTMF, utilizando filtros de la stopband,es decir el numero de decibelios que de la
analógicos en Matlab. stopband ha bajado de la banda de paso, la establecimos en
60 (Rs = 60) y finalmente escogimos filtros analógicos de tipo
Palabras Clave — Filtros analógicos, decodificador, tonos chebyshev I de orden 10.
DTMF , Matlab . Estos parámetros se los estableció en base a pruebas que
realizamos con diferentes valores con los diferentes tipos de
filtros que disponemos y los que nos dieron mejores resultados
I. I NTRODUCCIÓN fueron los anteriores mencionados.
Se ah dispuesto realizar un decodificador de mensajes a
partir de tonos DTMF utilizando solo filtros analógicos, de III. LÓGICA PARA LA IDENTIFICACIÓN DE LAS
donde tenemos de antemano la siguiente información: SEÑALES
TABLA I Al ingresar la señal de entrada logramos identificar que cada
FRECUENCIAS DE LAS SEÑALES tono con una frecuencia de 4kHz poseía 2000 muestras con
SEGÚN EL TECLADO TELEFÓNICO datos y las siguientes 1000 muestras no poseían nada hasta
empezar el siguiente tono y esto se repetía con los demás.
Hz 1209 1336 1477 Con esa información decidimos localizar donde iniciará el
primer tono para luego formar un vector con el número de
697 1 2(ABC) 3(DEF) la muestra donde inicia cada tono.
aux=1;
770 4(GHI) 5(JKL) 6(MNO) while(canal1(aux)==0)
aux=aux+1;
852 7(PQRS) 8(TUV) 9(WXYZ) end

x=aux:3000:length(canal1);
941 * 0 #
En el código anterior, localizamos en que muestra comienza
Como se puede observar en la tabla para que nuestro mensaje
el primer tono y creamos un vector con pasos de 3000 para
codificado posea un 2 debería tener una señal sinusoidal de
eliminar los silencios de nuestra señal, logrando asi el total de
1336 Hz mas otra sinusoidal de 697 Hz.
tonos en la señal.
Además de las frecuencias de las señales también sabemos
Para analizar como se relacionan la señal de entrada con la
que la letra A esta codificada como un 21, la B como 22, la C
numeración del teclado telefónico, teniendo en cuenta que cada
como 23 y así sucesivamente con todas las letras que posee el
numero posee dos señales sinusoidales de diferente frecuencia,
teclado telefónico pero en el caso que deseemos el numero en
decidimos analizar los números como matrices donde tendrán
vez de la letra sabemos que se codifico como # mas el numero
su frecuencia de fila y su frecuencia de columna, entonces
como por ejemplo si nuestro mensaje posee un 1 lo veríamos
primero se le hizo pasar por cada filtro columna a la señal
codificado como #1.
de entrada y después a la misma señal por cada filtro fila,
Ya con la información de la codificación bien establecida se
para luego observar la salida de cada uno en el tiempo
procedió a realizar el decodificador.
donde concluimos que se debe analizar en cada muestra que
determina el vector x con un intervalo de 2000 haciendo
II. DISEÑO DE LOS FILTROS referencia que ahí existe un tono, y si la magnitud mayor
Para la resolución se diseño 7 filtros analógicos donde los en todo ese intervalo es mayor a 0.4 la señal de entrada se
clasificamos: en 4 filtros para las frecuencias ubicadas en las encuentra en ese filtro de lo contrario se elimino.
filas de la TABLA I, y 3 filtros para las frecuencias ubicadas for i=1:length(x)
en las columnas de la TABLA I.
2

if(max(salida1(x(i):x(i)+2000))>=0.4) .
f1(i)= 1;
else if f1(i)==1 && f7(i)==1
f1(i)= 0; codigo(num)= ’*’;
end end

if(max(salida2(x(i):x(i)+2000))>=0.4) if f2(i)==1 && f7(i)==1


f2(i)= 1; codigo(num)= ’0’;
else end
f2(i)= 0;
end if f3(i)==1 && f7(i)==1
codigo(num)= ’#’;
. end
.
. num=num+1;
end
if(max(salida5(x(i):x(i)+2000))>=0.4)
f5(i)= 1; Como se puede observar analizamos todas las combinaciones
else posibles entre filas y columnas y en el caso de ser cierto le
f5(i)= 0;
end asignamos su respectiva codificación.

if(max(salida6(x(i):x(i)+2000))>=0.4) V. DECODIFICACIÓN MENSAJE


f6(i)= 1;
else Como ya poseemos el mensaje codificado para su decodifi-
f6(i)= 0;
end cación utilizamos Phyton para agregarle un diccionario y así
determinar que nos dice nuestro mensaje.
if(max(salida7(x(i):x(i)+2000))>=0.4) Nuestro diccionario:
f7(i)= 1;
else order = py.dict(pyargs(’00’,’+’,’21’,
f7(i)= 0; ’A’,’22’,’B’,’23’,’C’,’31’,’D’,’32’,
end ’E’,’33’,’F’,’41’,’G’,’42’,’H’,’43’,
end ’I’,’51’,’J’,’52’,’K’,’53’,’L’,’61’,
’M’,’62’,’N’,’63’,’O’,’71’,’P’,’72’,
El código de arriba se compara que si en todo el intervalo de ’Q’,’73’,’R’,’74’,’S’,’81’,’T’,’82’,
’U’,’83’,’V’,’91’,’W’,’92’,’X’,’93’,
2000 muestras hay una que supere el 0.4 y se colocar un 1 ’Y’,’94’,’Z’,’1#’,’1’,’2#’,’2’,’3#’,
para referenciar que justo en ese intervalo si hay un tono de la ’3’,’4#’,’4’,’5#’,’5’,’6#’,’6’,’7#’,
señal de entrada de lo contrario un 0 porque el filtro elimino ’7’,’8#’,’8’,’9#’,’9’,’0#’,’0’,’10’,’ ’));
el tono en ese intervalo Una ves ya definido nuestro diccionario procedemos a tomar
Con esto tendremos 7 vectores correspondientes a nuestros 7 de dos en dos nuestro mensaje codificado para que analice
filtros con los cuales tendremos las posiciones de todos los nuestro diccionario y nos de finalmente el mensaje listo para
tonos que pasaron por dichos filtros basados en la longitud leer.
del vector x que tiene el total de tonos.
for i=1:2:length(codigo)
c1=codigo(i);
IV. ASIGNACIÓN DE NUMERACIÓN DE LAS c2=codigo(i+1);
d=order{strcat(c1,c2)};
SEÑALES clave=clave+d;
Para poder identificar las señales que están relacionadas para end
poder asignarles su respectivo numero, debemos recordar que clave
en el mismo tiempo van a estar las dos señales por lo tanto en
nuestros vectores de posiciones si estan relacionadas deberian VI. FUNCIONAMIENTO
estar en las mismas posiciones.
num=1;
for i=1:length(x)

if f1(i)==1 && f4(i)==1


codigo(num)= ’1’;
end

if f2(i)==1 && f4(i)==1


codigo(num)= ’2’;
end

if f3(i)==1 && f4(i)==1


codigo(num)= ’3’;
end

.
.
.

Das könnte Ihnen auch gefallen