Sei sulla pagina 1di 3

Llamando por telfono con Matlab

January 15th, 2009 19 Comments programming


Maana tengo examen de laboratorio de tratamiento digital de la seal y cuando ya no tienes
ganas de estudiar slo tienes ganas de hacer el meln. As que aqu tenis un script de Matlab al
cual le pasas un nmero telefnico y te genera y reproduce un wav con los tonos DTMF para
hacer la llamada. Descolgis el telfono, lo acercis a los altavoces y ejecutis ring(numero).
Lo quera 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 pejigueras.
En qu se basa esto? A cada nmero se le asigna una pareja de tonos segn la tabla siguiente y
se enva la suma de stos, el nombre es bastante explicativo: Dual Tone Multi Frequency.

En mi porttil no funciona porque mis altavoces estn cascadsimos y no reproducen como


deberan xDDD En el porttil de Rafa s que iba.
Aqu est el cdigo:
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


Cuestin de optimizacin

Tags: DTMFMatlabOctave

Potrebbero piacerti anche