Mañana tengo examen de laboratorio de tratamiento digital de la señal y cuando ya no tienes ganas de estudiar sólo tienes ganas de hacer el melón. Así que aquí tenéis un script de Matlab al cual le pasas un número telefónico y te genera y reproduce un wav con los tonos DTMF para hacer la llamada. Descolgáis el teléfono, lo acercáis a los altavoces y ejecutáis “ring(numero)”.
Lo quería hacer en Octave (por aquello del software libre y tal) pero es una _censored_ patata pinchada en un palo y me he cansado de sus pejiguerías.
¿En qué se basa esto? A cada número se le asigna una pareja de tonos según la tabla siguiente y se envía la suma de éstos, el nombre es bastante explicativo: Dual Tone Multi Frequency.
En mi portátil no funciona porque mis altavoces están cascadísimos y no reproducen como deberían xDDD En el portátil de Rafa sí que iba.
Aquí está el código:
function y = ring(x) number = x; numberstr = int2str(number); % Sampling Frequency fs = 8000; % initializing arrays, 1200 samples digit = 0:1199; silence = zeros(1,1200); disp('Calculating DTMF tones...'); % row sinusoids sin697 = sin(2*pi*697*digit/fs); sin770 = sin(2*pi*770*digit/fs); sin852 = sin(2*pi*852*digit/fs); sin941 = sin(2*pi*941*digit/fs); % column sinusoids sin1209 = sin(2*pi*1209*digit/fs); sin1336 = sin(2*pi*1336*digit/fs); sin1477 = sin(2*pi*1477*digit/fs); % numbers num1 = (sin1209+sin697)/2; num2 = (sin1336+sin697)/2; num3 = (sin1477+sin697)/2; num4 = (sin1209+sin770)/2; num5 = (sin1336+sin770)/2; num6 = (sin1477+sin770)/2; num7 = (sin1209+sin852)/2; num8 = (sin1336+sin852)/2; num9 = (sin1477+sin852)/2; num0 = (sin1336+sin941)/2; % an asterisk would be: (sin1336+sin941)/2); % a pad would be: (sin1477+sin941)/2); % insert a silence in the begining y = zeros(1, 1200); % fill the rest for i = 1:length(numberstr) num = str2num(numberstr(i)); switch num case 0 dtmf = num0; case 1 dtmf = num1; case 2 dtmf = num2; case 3 dtmf = num3; case 4 dtmf = num4; case 5 dtmf = num5; case 6 dtmf = num6; case 7 dtmf = num7; case 8 dtmf = num8; case 9 dtmf = num9; otherwise disp('O_o'); end % insert the number samples y = [y dtmf]; % insert the silence samples y = [y silence]; end wavwrite(y,fs,'ring.wav'); disp('Ringing number:'); disp(numberstr); % play it wavplay(y,fs); disp('Happy talking');
–
Fuente original en http://vierito.es/wordpress
Similar Posts:
- Descodificar tonos DTMF usando Matlab
- Para los amantes de XKCD llega…
- Port-Knocking y Crypt-Port-Knocking


19 responses so far ↓
1 Rafa
// Jan 15, 2009 at 2:53 am
Sólo por la hazaña de llamar por teléfono con Matlab deberían darnos matrícula de honor
PD: esta es una de las aplicaciones absurdas de lo que se aprende en la ETSIT
2 vierito5
// Jan 15, 2009 at 12:40 pm
Quita quita, a mí con que me aprueben me basta, que no las tengo conmigo.
3 Death_Master
// Jan 15, 2009 at 7:02 pm
Jajajaja… qué pedazo de frikada. Me encanta.
4 Kraladriel
// Jan 15, 2009 at 8:28 pm
Qué frikis….^^
5 Gololo
// Jan 16, 2009 at 11:11 am
Como mola… me voy a instalar el Matlab sólo para hacerme unos cuantos tonos para el móvil! xDDD
6 vierito5
// Jan 16, 2009 at 12:03 pm
Ese iba a ser el siguiente script cabrón!!
Me has quitado la idea, hacer uno que aceptase nota y duración y devolviera el politono! Envía politono Gunther!
7 Zurdo
// Apr 17, 2009 at 6:00 pm
Está muy bueno el Script, soy estudiante principiante del matlab, trate de correrlo pero no pude, me podeis explicar por favor paso a paso como se hace???, como se carga,?? ya que me bota error de funcion y algo asi como que no esta permitido,,, Agradezco tu ayuda..Salud
8 vierito5
// Apr 17, 2009 at 10:58 pm
@Zurdo: Graba el código como ring.m y puedes o cambiar el directorio de trabajo de Matlab a donde esté el fichero o lo copiarlo a tu directorio de trabajo actual. Luego desde el intérprete de órdenes de Matlab ejecuta ring(x) siendo x el número al que quieres llamar., por ejemplo: ring(123456789)
9 magoirlandes
// Sep 11, 2009 at 6:22 pm
Muy interesante. ¿Y al contrario? Osea, recibir los tonos y decodificarlos, para saber que nos envían.
Esto me parece también muy interesante
10 vierito5
// Sep 11, 2009 at 9:01 pm
@magoirlandes: pues lo tengo implementado por ahí, así que visto el interés lo busco y publicaré un post con el código
11 magoirlandes
// Sep 12, 2009 at 9:53 am
Pues muchas gracias. Si puedo lo usaré. Es curioso pero no he encontrado ningun sofware que haga esto (libre claro).
Un saludo
12 david ruxo
// Nov 10, 2009 at 11:16 am
ey vierito5 pues podrias subir el caso conttrario que tengo que hacerlo y estoy super perdido!!gracias
13 vierito5
// Nov 10, 2009 at 12:47 pm
¡Se me había pasado totalmente! Lo busco o si no lo hago de nuevo. Será el próximo post.
14 Descodificar tonos DTMF usando Matlab | It should work...
// Nov 25, 2009 at 2:16 am
[...] vimos como crear tonos DTMF usando Matlab y han pedido en un par de comentarios cómo se haría a la inversa, así que aquí [...]
15 vierito5
// Nov 25, 2009 at 2:22 am
@(david ruxo), @magoirlandes: después de mucho tiempo pero ahí lo tenéis, un saludo!
16 Roland
// May 29, 2010 at 11:58 am
Hay un error el numero cero no tiene asignadas las frecuencias adecuadas.
17 vierito5
// May 29, 2010 at 12:04 pm
Cierto!! Muchas gracias Roland! Arreglado
18 Roland
// May 29, 2010 at 2:45 pm
Nada, lo estuve probando y no entendía porque me decía que el número no existía, llegué a pensar que me cortaron la línea, jaja
19 vierito5
// May 29, 2010 at 2:47 pm
xDD no me di cuenta de que me colé de columna porque todo lo probé con números sin ceros
Leave a Comment