Está en la página 1de 6

DECODIFICADOR DTMF

NOMBRES: RICARDO URBINA ; GOMEZ ALEX

Por medio del microfono se procedio a coger una muestra de audio para su posterior decodificacion
mediante el siguiente codigo.

clc
clear all
close all
fs=8000;
recObj = audiorecorder;
disp('Inicia la grabación.')

Inicia la grabación.

recordblocking(recObj, 10);
disp('Fin de la grabación.');

Fin de la grabación.

% Store data in double-precision array.


myRecording = getaudiodata(recObj);

t=(0:length(myRecording)-1)*fs/length(myRecording);

nombre=input('Ingrese el nombre de la grabacion entre comilla y tenrminado en .wav : ')

nombre =
'ricky.wav'

%Guardar archivo .wav


audiowrite(nombre,myRecording,fs);
[wave,fs]=audioread(nombre);
t=0:1/fs:(length(wave)-1)/fs;

%Graficar en tiempo
plot(t,5*wave),xlabel('tiempo [ms]'),ylabel('Señal Amplitud'),title('Señal en tiempo [ms]');

1
%Sonido
sound(5*wave,fs)

%Fourier
figure
Four=fft(wave);
L=length(wave);
P2 = abs(Four/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = (fs)*(0:(L/2))/L;
plot(f,P1)
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')

2
%Espectograma
figure
spectrogram(100*wave,fs/10,[],[],fs,'yaxis','MinThreshold',-100);
ylim([0.65 1.5]);

3
[S,F,T]=spectrogram(100*wave,fs/10,[],[],fs,'yaxis','MinThreshold',-100);
[row colum]=size(S);
Sa=abs(S);
for i=1:length(F)
if F(i)-697<2
pos1b=i;
end
if F(i)-770<2
pos2b=i;
end
if F(i)-850<2
pos3b=i;
end
if F(i)-941<2
pos4b=i;
end
if F(i)-1209<2
pos1a=i;
end
if F(i)-1336<2
pos2a=i;
end
if F(i)-1477<2
pos3a=i;
end
if F(i)-1633<2
pos4a=i;

4
end
end
j=1;
for i=1:colum
M=max(Sa(:,i));
var1=0.85*M;
if M>500
if (M-Sa(pos1b,i)<var1) && (M-Sa(pos1a,i)<var1)
numeros(j)=1;
j=j+1;
end
if (M-Sa(pos1b,i)<var1)&& (M-Sa(pos2a,i)<var1)
numeros(j)=2;
j=j+1;
end
if (M-Sa(pos1b,i)<var1) && (M-Sa(pos3a,i)<var1)
numeros(j)=3;
j=j+1;
end
if (M-Sa(pos2b,i)<var1) && (M-Sa(pos1a,i)<var1)
numeros(j)=4;
j=j+1;
end
if (M-Sa(pos2b,i)<var1) && (M-Sa(pos2a,i)<var1)
numeros(j)=5;
j=j+1;
end
if (M-Sa(pos2b,i)<var1) && (M-Sa(pos3a,i)<var1)
numeros(j)=6;
j=j+1;
end
if (M-Sa(pos3b,i)<var1) && (M-Sa(pos1a,i)<var1)
numeros(j)=7;
j=j+1;
end
if (M-Sa(pos3b,i)<var1) && (M-Sa(pos2a,i)<var1)
numeros(j)=8;
j=j+1;
end
if (M-Sa(pos3b,i)<var1) && (M-Sa(pos3a,i)<var1)
numeros(j)=9;
j=j+1;
end
if (M-Sa(pos4b,i)<var1)&& (M-Sa(pos2a,i)<var1)
numeros(j)=0;
j=j+1;
end
if (M-Sa(pos4b,i)<var1)&& (M-Sa(pos1a,i)<var1)
numeros(j)=4573;
j=j+1;
end
if (M-Sa(pos4b,i)<var1)&& (M-Sa(pos3a,i)<var1)
numeros(j)=3548;

5
j=j+1;
end

else
numeros(j)=812;
j=j+1;
end
end
j=1;
for i=1 : length(numeros)-1

if (numeros(i)==812)

disp('');
x=2;
elseif (numeros(i+1)== numeros(i))
disp('');
x=3;

else

deco(j)=numeros(i);
j=j+1;
end
end

disp('El numero ingresado es :')

El numero ingresado es :

disp(deco)

0 9 7 8 6 0 0 6 5 5

Entonces se marco con el telefono celular un numero de 10 digitos que corresponde cuyo resultado del
programa nos otorga 0978600655 que fue el numero ingresado en el telefono celular.

También podría gustarte