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 frecuenci as as de l os t onos
Palabras clave:
DTMF, rango de frecuencias, FFT
1.
DTMF
Es un método utilizado por el sistema telefónico para reconocer las teclas pulsadas durante la marcación. Al pulsar una tecla en el teclado del teléfono se generan dos tonos simultáneos, que son descodificados por la centralita para determinar la tecla pulsada. Este método se aplica tanto para celulares como para teléfonos convencionales para poder enlazar una comunicación. Para poder realizar la práctica, primero se tuvo que revisar el rango de frecuencias en las que se encontraban cada uno de los números, para esto se reviso la siguiente tabla:
1.2 DETECCION DE FRECUENCI AS
Colocamos la frecuencia a la cual se debe muestrear y de ahí sacamos la transformada de Fourier para analizarlas de la siguiente forma: Function [f,modulo]=transform(sonido) f=0; modulo=0; fc=8000; N=length(sonido); L=2.^nextpow2(N); %longitud de la transformada de fourier FFT_intera=fft(sonido,L)/N; % transformada de fourier normalizada f=linspace(0,1,L/2)*fc/2; % eje de frecuencia f=F*fc/2 (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 el sonido adquirido, ya que el mismo si no esta dentro el rango especificado, no servirá de nada. Para esto Nos valemos de la siguiente función:
num='4'; elseif indice== [2 6] num='5'; elseif indice== [2 7] num='6'; elseif indice== [3 5] num='7'; elseif indice== [3 6] num='8'; elseif indice== [3 7] 1 num='9'; elseif indice== [4 5] num='asterisco'; elseif indice== [4 6] num='0'; elseif indice== [4 7] num='numeral';
function num=detection(f,modulo)
base_f=[697 770 852 941 1209 1336 1477]; % frecuencias dtmf f_base=zeros(1,length(base_f)); % vector de ceros igual al vector de frecuencias rango=2; % error mas menos de Hz num=0;
else 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)+ rango),1,'first'); % umbral(j)=max(modulo(a(j):b(j))); % end u_umbral=max(umbral)/3; % for i=1:length(base_f) if (umbral(i)>u_umbral) f_base(i)=base_f(i); else f_base(i)=0; end end indice=find(f_base); if (length(indice)>2) || (length(indice)==0) num='error'; else if indice==[1 5] num='1'; elseif indice==[1 6] num='2'; elseif indice== [1 7] num='3'; elseif indice== [2 5]
PRACTICA DTMF
Como se observa en las líneas de código, se coloca el rango de frecuencias en los que queremos analizar. Después de eso se hace las respectivas comparaciones para saber que digito es el presionado y según eso para dirigirnos a la subrutina que nos indica el número correcto. Finalmente mostramos el numero que se presiona en el celular mediante una imagen. Esto se logra con las siguientes líneas de código:
function pushbutton1_Callback(hObject, eventdata, handles) global f global modulo sonido=wavrecord(8000*3,8000,1); G RABO SONIDO DE 3 SEGUNDOS a 8000 Hz [f,modulo]=transform(sonido); % HAGO LA TRANFORMADA DE FOURIER DE SONIDO Q GRABE num=deteccion(f,modulo); % Devolverá el nombre de la imagen
Página 2
DSP relacionada a la tecla pulsada o un mensaje de error nome_img_display=strcat(num, '.bmp '); display=imread(nome_img_display); % leer la imagen imshow(display)
si queremos poder ver la tranforma de fourier de la señal para ver el pico de frecuencia en donde se encuentra par aver si concuerda o no con la table mostrada al inicio del ensayo.2 global f global modulo figure plot(f,modulo) title('FFT') xlabel('FRECUENCIA [Hz]') ylabel('AMPLITUD')
2.
CONCLU SIONE S
Al terminar la siguiente práctica hemos sacado como conclusiones los siguientes puntos:
los tonos. Nos resulto de gran ayuda ya que las mismas ayudaron a determinar el rango de análisis de los mismos. 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. Estas serian nuestras conclusiones al término de la presente práctica. 3.
AS REFERENCI
[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
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
PRACTICA DTMF
Página 3