Hola a todos.
Hace unos días he terminado un proyecto de un interface telefónico en el que se necesitaba
detectar el progreso de llamada para poder realizar determinada acciones.
Quisiera comentaros varias cuestiones que se han de tener en cuenta:
Las señales de indicación de proceso de llamada se definen por un tono de una determinada frecuencia entre
310Hz a 640 Hz con distintas cadencias según lo que este ocurriendo en la línea.
Para detectar estas frecuencias se puede utilizar un filtro pasa banda en el rango de 310Hz a 640 Hz con corte abrupto
tanto en el rango inferior como en el superior.
Hay integrados específicos que realizan esta función, yo he utilizado el M-980-02 que esta diseñado para este propósito.
Este integrado tiene una patilla para la entrada de señal de audio desde la interfaz de línea, una patilla de habilitación y la salida de señal, uno lógico para tono detectado y cero para tono no detectado, o fuera de banda.
Una vez implementado el circuito solo tendremos que analizar la cadencia de las señales para determinar el estado del progreso de la llamada.
Cuando generamos una llamada tendremos:
1º Descolgado, tono continuo salida a 1 que es tono de línea
2º Una vez marcado el numero a llamar si este es correcto tendremos la cadencia 2.0/4.0s o lo que es lo mismo dos segundos con la salida a 1 y cuatro segundos con la salida a 0
3º Al descolgar al otro lado de la línea desaparece la cadencia y aparecerán impulsos en la patilla de salida, esto se produce por que las frecuencias vocales tienen un amplio rango de frecuencias que entraran dentro del rango de detección del filtro del call progress detector.
4º Si se produce el colgado al otro lado de la línea tendremos una cadencia de pulsos de 0.25/0.25s
------------------------------------------------------------------------------------------------------
Para poder detectar con claridad estas cadencias tendremos que programar un algoritmo que tenga en cuenta estas variables, atendiendo de manera especifica al apartado 3 y los impulsos producidos por las señales vocales.
En el sistema que yo he programado he utilizado dos cronómetros que me indican el tiempo de los impulsos tanto en estado alto como en estado Bajo de las señales suministradas por la salida de detección del integrado.
Y he aplicado después unas ventanas de comparación para el análisis de los distintos estados del progreso de la llamada.
Se han de tener en cuenta métodos para evitar que el sistema de los cronómetros, se quede enganchado en un bucle infinito.
Y realizar muestreos sucesivos de las señales.
El peor de los casos es la detección de colgado al otro lado de la línea cuando están presentes señales de voz o datos durante el funcionamiento normal del sistema.
Para lo cual recomiendo que se realicen tomas de datos periódicas para no ralentizar otras tareas, a no ser que dediquemos un procesador especifico para el análisis del progreso de llamada que se comunique con el procesador general.
Conclusiones.
Como podéis ver, la detección se complica y sobre todo cuando hay señales vocales y de datos durante el análisis de las mismas, de todas formas en el momento en que se cuelga al otro extremo de la línea, la secuencia de tonos es clara y limpia y solo nos tenemos que preocupar de falsas indicaciones de colgado durante la transmisión de voz o de los datos.
Para los que no conozcan muy bien el sistema de señalización de las líneas telefónicas, indicaros, que en las centrales modernas urbanas (las de las compañías telefónicas) se produce otra señalización mucho más clara y más segura, que es la de la inversión de polaridad en la línea. (se puede detectar con un opto acoplador en serie con la línea telefónica)
La línea cambiara de polaridad cada vez que al otro lado de la misma se realice una operación de colgado o descolgado.
Con lo que dispondremos de señales precisas y fáciles de analizar.
Por desgracia las extensiones de centralitas PBX carecen de este sistema de señalización para no incrementar los costes de las mismas, por lo cual me vi obligado a implementarlo en mi proyecto, ya que se conectaría a una centralita telefónica de un hogar.
Para finalizar, comentaros que hay integrados con detección de dos rangos de frecuencias uno para los producidos en el margen de la detección de progreso de llamada, y otro fuera del rango, de este modo si tenemos un 1 lógico en los dos terminales podemos descartar que sé este produciendo una señalización de progreso de llamada y se tratara de una información o vocal o de datos.
Hay sistemas o integrados que realizan un análisis completo de las señales pero son caros y difíciles de implementar por sus complicadas señales de inicialización, e incluso hay sistemas basados en DSP que implementan los filtros y el análisis de las señales, se puede encontrar documentación en Internet.
Esto es todo.
Gracias por vuestra atención
Saludos
Juan