DSP
Decodificador De Tonos DTMF (04 Diciembre 2017) UNIDADES TECNOLOGICAS DE SANTANDER BUCARAMANGA DIEGO ARMANDO VARGAS PEREZ, KEVIN JAIMES MORENO, WBEYMAR ANDRES PEÑA MENDOZA ESTUDIANTES 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, filtro pasabandas, filtro pasa bajas, filtro pasa altas.
1.
DTMF
En telefonía, la marcación por tonos también llamada marcación por tonos duales de multifrecuencia, consiste en que cuando un usuario pulsa una tecla de su teléfono correspondiente al dígito que quiere marcar, se envían dos tonos de distinta frecuencia, los tonos como se puede apreciar en la tabla un tono es de baja frecuencia inferior a un 1kHz y el otro tono esta en rango de altas frecuencias entre 1kHz y 2 Khz. Las frecuencias han sido seleccionas con mucha precesión, para que la detección del multitono sea precisa:
En un teléfono convencional no tiene la última columna de la tabla, esta fue usada por los militares para tener prioridad en la línea. 1.1 REQUERIMIENTOS DTMF
Las especificaciones ITU Q.24 para la detección DTMF son las siguientes: Tolerancia de la frecuencia: para que un tono DTMF sea válido debe tener una desviación en frecuencia dentro del 1.5% de tolerancia. Los tonos con una desviación en frecuencia mayor al 3.5% deben ser rechazados. Este requerimiento ayuda a prevenir la detección de falsas señales como tonos DTMF inválidos.
Duración de la señal: Un tono DTMF
con una duración mínima de 40ms debe ser considerado válido. La duración de la PRACTICA DTMF
Página 1
DSP señal no debe ser menor de 23ms (considerado sin funcionamiento). Un espaciado mínimo entre tonos de 50 ms
Los dígitos requieren que sean transmitidos en un ratio de menos de 10 por segundo
Atenuación de la señal: El detector
debe trabajar con una relación señal-ruido (SNR) de 15db en el peor de los casos y una atenuación de 26dB.
Interrupción de la señal: Una señal
DTMF válida interrumpida por un máximo de 10ms, no debe ser detectada como dos tonos distintos.
Pausa en la señal: Una señal DTMF
válida separada por una pausa de tiempo de al menos 40ms debe ser detectada como dos tonos distintos.
Fase: El detector debe operar con un
máximo de 8dB en fase normal y 4dB en fase invertida.
Rechazo al habla: El detector debe
operar en la presencia del habla rechazando la voz como un símbolo DTMF válido.
1.2 DETECCION DE FRECUENCIAS
El algoritmo que se utiliza para identificar las dos frecuencias asociadas con el boton oprimido, la separacion de los dos tonos; primero mediante un filtro pasa bajas y otro pasa altas. La frecuencia de corte del filtro pasa bajas es ligeramente superior a 1000Hz, la frecuencia de corte del filtro pasa altas es ligeramente superior a 1200Hz La salida de cada filtro se procesa por medio de un banco de filtros pasabanda con banda de paso estrechas. PRACTICA DTMF
Los 4 filtros pasabanda en el canal de baja frecuencia tiene frecuencias centrales de 697, 770, 857 y 941Hz. Los 4 filtros pasabanda en el canal de alta frecuencia tienen frecuencias centrales a 1209, 1336,1477 y 1633Hz. 2.
CODIGOS DE MATLAB
Para realizar el filtrado general de la señal inicial (adc.txt) utilizamos los filtros antes nombrados, utilizando una herramienta muy util como lo es matlab, acontinuacion daremos una breve explicacion de las funciones utilizadas para este proyecto: FiltroPasaBandaDeMuestreo FrecuenciaDeMuestreo es la frecuencia a la cual se tomo la señal fstop1,fpass1,fpass2,fstop2,Rp,Rs, son los parametros para el filtro Pasabanda iGraficar = si queremos que nos de una imagen de la muestra 1 para que grafique o cero que no grafique sNombre: nombre de la imagen que se crea o el plot. La funcion nos devuelve la maxima frecuencia y la maxima amplitud de dicha frecuencia hallada.
BancoDeFiltrosDeFrecuenciasAltas Esta funcion recibe dos parametros (SenalEntrada)= es la muestra a la cual queremos obtenerle el valor de la frecuencia (FrecuenciaDeMuestreo) = Es la frecuencia de muestreo a la cual se tomo la muestra Esta funcion retorna la frecuencia detecta en la muestra o señal de entrada. Esta funcion recibe como parametros la señal de entrada y entregalas frecuencias altas para el reconocimiento de frecuencias DTMF las cuales van entre 1209 y 1633Mz.
BancoDeFiltrosDeFrecuenciasBajas Esta funcieon recibe los mismos parametros que el filtro anterior.
Página 2
DSP Esta funcion recibe como parametros la señal de entrada y entregalas frecuencias bajas para el reconocimiento de frecuencias DTMF las cuales van entre 697 y 941Mz. GuiGraficarSenal Esta funcion sirve para graficar las distintas señales, el codigo de dicha funcion es:
function GuiGraficarSenal(handles,SenalEnt rada,nombreSenal,Color) %[0,0.7,0.9] ejemplo de Color
PeriodoMuestreo = 1/FrecuenciaDeMuestreo; LongitudSenal = size(SenalEntrada); %Tiempo de la señal tiempo = (0:LongitudSenal1).*PeriodoMuestreo; %Reproducimos el audio original (ArchivoAudioTxt) %soundsc(SenalEntrada);%sounds(To no A escuchar , Frecuencia de muestreo)
axes(handles.Graficas) plot(SenalEntrada,'Color',Color) xlabel('Tiempo') ylabel('Amplitud') title(nombreSenal)
BancoDeFiltrosFrecuenciasAltas y BancoDeFiltrosFrecuenciasBajas En estas funciones lo unico que hacemos es tomar las frecuencias bajas y altas ya filtradas por las funciones anteriores y las comparamos mediante una matriz para determinar exactamente que frecuencia se esta utilizando y asi, al tener que frecuencia alta y baja tiene la señal se determina que tecla se ha oprimido (gracias al cuadro de frecuencias utilizadas en DTMF).
DecodificarSenal Esta funcion es la que se encarga de sacar cada señal ya filtrada y la toma como una muestra independiente, seria como la funcion fundamental para hallar los numeros marcados. el codigo completo y explicado (como esta en matlab) es el siguiente:
function [SenalDeEntradaSinRuido NMuestras IntervaloDeLaMuestra MuestrasEncontradas ContenedorDatosTeclado] = DecodificarSenal(SenalEntrada) %Decodificador De Tonos DTMF FrecuenciaDeMuestreo = 32660;
PRACTICA DTMF
%Hacemos una grafica de la señal de audio Original (ArchivoAudioTxt) %GraficarSenal(SenalEntrada,'Seña l De Audio Original') %Eliminamos el ruido de 60 Hz de la señal de entrada con un filtro pasa %banda %******************************Cr eamos El Filtro Pasa Banda entre 697 y 1633 para eliminar el Ruido ********************* %Determinamos el orden del filtro fstop1 = 400; fpass1 = 697; fpass2 = 1633; fstop2 = 1800; Rp = 2; Rs = 6; Fnyquist = FrecuenciaDeMuestreo/2 ; Ws(1) Wp(1) Wp(2) Ws(2)
= = = =
fstop1/Fnyquist; fpass1/Fnyquist; fpass2/Fnyquist; fstop2/Fnyquist;
[n,Wn] = buttord(Wp,Ws,Rp,Rs); %Seleccion de los coeficientes del filtro [b,a] = butter(n,Wn);
Página 3
DSP %**************************Aplica mos el filtro a la señal de entrada para eliminar el ruido ***** SenalDeEntradaSinRuido = filter(b,a,SenalEntrada); %GraficarSenal(SenalDeEntradaSinR uido,'Señal De Audio Sin Ruido') %************************Aplicamo s el algoritmo de muestreo************************* **************************** %Determinamos donde hay Señales de tono %la funcion ObtenerMuestras obtiene muestras de la señal esclusibamente %donde hay frecuencia DTMF creando una nueva señal mas limpia [NMuestras IntervaloDeLaMuestra MuestrasEncontradas] = ObtenerMuestras(SenalDeEntradaSin Ruido,FrecuenciaDeMuestreo,120);% 120
%*************************Aplicam os el filtro pasa bajas para conseguir que la señal (MuestrasEncontradas) solo tenga frecuencias desde 697Hz hasta 941Hz %Creamos El Filtro pasa Bajas de 1090 Hz %aqui busco el orden del filtro y establezco la Fcorte. fstop = 1090; fpass = 990; Rp = 6; Rs = 18; Fnyquist = FrecuenciaDeMuestreo/2;
%Seleccion de los coeficientes del filtro [b,a] = butter(n,Wn,'low'); %Aplicamos el filtro pasa bajas a la señal sin ruido SenalDeFrecuenciaBajas = filter(b,a,MuestrasEncontradas);
%*************************Aplicam os el filtro pasa Altas para conseguir que la señal (MuestrasEncontradas) solo tenga frecuencias desde 1209Hz hasta 1633Hz %Creamos El Filtro pasa Altas de 950 Hz %aqui busco el orden del filtro y establezco la Fcorte. fstop =950; fpass = 1200; Rp = 4; Rs = 30; Fnyquist = FrecuenciaDeMuestreo/2; Ws = fstop /Fnyquist; Wp = fpass /Fnyquist; [n,Wn] = buttord(Wp,Ws,Rp,Rs); %Seleccion de los coeficientes del filtro [b,a] = butter(n,Wn,'high'); %Aplicamos el filtro pasa Altas a la señal sin ruido SenalDeFrecuenciaAltas = filter(b,a,MuestrasEncontradas);
ContenedorDatosTeclado = []; for x = 1 : NMuestras
Ws = fstop /Fnyquist; Wp = fpass /Fnyquist; [n,Wn] = buttord(Wp,Ws,Rp,Rs);
PRACTICA DTMF
LimiteInferior = IntervaloDeLaMuestra(x,1); LimiteSuperior = IntervaloDeLaMuestra(x,2);
Página 4
DSP end %Tomamos una muestra de la señal de frecuencias bajas que va desde 6 a 1710 Muestra1 = SenalDeFrecuenciaBajas( LimiteInferior : LimiteSuperior);%2300:3997 %GraficarSenal(Muestra1,'Muestra 1') %ObtenerEspectro(Muestra1,Frecuen ciaDeMuestreo,1,'Espectro Señal Muestra1');
end
InterfasDTMF Lo ultimo que elaboramos fue la interfaz grafica que es donde se ejecuta todo el programa y se ve en varios pasos los procesos por los que pasa la señal, acontinuacion tenemos una breve explicacion de la misma:
%Obtenemos la componente de la frecuencia baja del tono de la muestra. aplicando el banco de filtros pasa banda FrecuenciaBaja = BancoDeFiltrosFrecuenciasBajas(Mu estra1,FrecuenciaDeMuestreo); %Tomamos una muestra de la señal de frecuencias Altas que va desde 6 a 1710 Muestra1 = SenalDeFrecuenciaAltas( LimiteInferior : LimiteSuperior); %ObtenerEspectro(Muestra1,Frecuen ciaDeMuestreo,1,'Espectro Señal Frecuencias Altas Muestra1'); %Obtenemos la componente de la frecuencia Alta del tono de la muestra. aplicando el banco de filtros pasa banda FrecuenciaAlta = BancoDeFiltrosFrecuenciasAltas(Mu estra1,FrecuenciaDeMuestreo);
Esta seria la pantalla inicial de la interfaz grafica. Primero donde dice agregar archivo se le da click y abre una ventana donde podemos buscar en este caso el archivo adc.txt que es el dado para el proyecto, luego se le da en abrir y tras esperar tenemos la imagen ya cargada:
%Obtenemos la tecla que representa las frecuencias altas y bajas que %componen el tono TeclaDelTono = ObtenerTecla(FrecuenciaBaja,Frecu enciaAlta); ContenedorDatosTeclado = [ContenedorDatosTeclado TeclaDelTono];
PRACTICA DTMF
Esta seria la imagen de la señal inicial (el archivo adc.txt) en la parte izquierda tendremos los numeros marcados y la cantidad de tonos en este caso 60, tambien al pulsar los botones de la parte superior de la imagen podemos escuchar la señal (play) o Página 5
DSP abrir la imagen aparte para poder analizarla (Generar img). La interfas tambien tiene puntos que se pueden seleccionar en la parte superior y asi poder ver el procedimiento para hallar dichos numeros. En este caso tenemos la señal luego de pasar por el filtro pasa bandas:
Aca tenemos la señal completamente limpia, sin ningun ruido, se puede decir que solo se ve en la imagen las señales a utilizarse en el filtro DTMF (señal completamente decodificada:
Por ultimo podemos analizar cada muestra por separado, en este caso serian 60 muestras las cuales podemos analizar una por una, solamente ponemos el numero de la muestra a analizar y damos click en el boton, acontinuacion como ejemplo analizaremos la muestra numero 60:
Este seria el espectro en frecuencia de dicha muestra (numero 60). En la imagen podemos ver dos puntos superioes en rojo (al final de las dos lineas verticales, estos puntos son las frecuencias maximas y minimas de dicha muestra. No solamente la podriamos analizar en frecuencia, tambien en el tiempo para asi ver la amplitud total de dicha muestra, faltaria dar click en donde nos indica el circulo rojo, el resultado seria:
Esta seria una breve explicacion de las funciones utilizadas para nuestro proyecto, en este caso utilizamos, vale recalcar; matlab como aplicacion para desarrollar este proyecto de la materia: procesamiento digital de señales. En la carpeta final (codigo completo de matlab), se utilizaron otras funciones de menos reelevancia para el funcionamiento del mismo, los cuales es su mayoria son borradores para obtener las funciones finales anteriormente descritas. 3.
PRACTICA DTMF
CONCLUSIONES
Página 6
DSP Al terminar la siguiente práctica hemos sacado como conclusiones los siguientes puntos: Como se ha podido observar, la detección de tonos DTFM es muy utilizada 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.
4.
REFERENCIAS
[1]http://www.mediacollege.com/audio/ton e/dtmf.html [2]http://www.scribd.com/doc/39576022/In terface-DTMF [3]http://www.mathworks.com/products/sig nal/demos.html?file=/products/demos/shipp ing/signal/dtmfdemo.html
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 del archivo adc.txt y un algoritmo computacional para detectar las frecuencias y ver que tecla fue pulsada. Fue muy importante en este caso el uso de filtros(pasabanda, pasa baja y pasa alta) para el correcto desarrollo de esta practica asi como la TFD y los temas vistos a lo largo de el curso de procesamiento digital de señales. 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 las mismas ayudaron a determinar el rango de análisis de los mismos y nos direcciono en el uso de cada uno de los filtros. Cabe recalcar que la realización de la presenta practica nos ayudara a futuro en donde tengamos que implementar algoritmos computacionales más complejos, sin embargo los mismos no nos resultaran difíciles si aplicamos los conceptos adquiridos en la presente práctica. Al realizar el filtrado general de la practica tenemos como resultado 60 muestras, cada muestra referida a un boton, los ultimos 4 digitos marcados son “2111”, asociandolos
con la tabla inicial estos numeros se asocian a las letras “UK”.
PRACTICA DTMF
Página 7