This code of matlab can find the respone of DTMF signals.
Example:
Sound files: http://www.fileserve.com/file/EWvr97D
İt includes 11-digit phone number
Main code (.m file)
Odev3.m
close all
clear all
clc
[n1,Fs]=WAVREAD('num1.wav'); %ses dosyalarını okutuyor
[n2]=WAVREAD('num2.wav');
[n3]=WAVREAD('num3.wav');
[n4]=WAVREAD('num4.wav');
[n5]=WAVREAD('num5.wav');
[n6]=WAVREAD('num6.wav');
[n7]=WAVREAD('num7.wav');
[n8]=WAVREAD('num8.wav');
[n9]=WAVREAD('num9.wav');
[n10]=WAVREAD('num10.wav');
[n11]=WAVREAD('num11.wav');
n1=fft(n1,16000); %ses dosyalarının fourier dönüşümünü alıyor
n2=fft(n2,16000);
n3=fft(n3,16000);
n4=fft(n4,16000);
n5=fft(n5,16000);
n6=fft(n6,16000);
n7=fft(n7,16000);
n8=fft(n8,16000);
n9=fft(n9,16000);
n10=fft(n10,16000);
n11=fft(n11,16000);
bul(n1) %num.m funtionununa n1 değerini atıyor
bul(n2)
bul(n3)
bul(n4)
bul(n5)
bul(n6)
bul(n7)
bul(n8)
bul(n9)
bul(n10)
bul(n11)
bul.m
function y=bul(x)
if 500<abs(x(697))
if 500<abs(x(1209))
disp('1')
elseif 500<abs(x(1336))
disp('2')
elseif 500<abs(x(1477))
disp('3')
end
end
if 500<abs(x(770))
if 500<abs(x(1209))
disp('4')
elseif 500<abs(x(1336))
disp('5')
elseif 500<abs(x(1477))
disp('6')
end
end
if 500<abs(x(852))
if 500<abs(x(1209))
disp('7')
elseif 500<abs(x(1336))
disp('8')
elseif 500<abs(x(1477))
disp('9')
end
end
if 500<abs(x(941))
if 500<abs(x(1209))
disp('*')
elseif 500<abs(x(1336))
disp('0')
elseif 500<abs(x(1477))
disp('#')
end
end
Command window
0 5_3_5 6_9_5 4_7 7_1
Ses sinyallerini ilk 16000 değerinin fourier dönüşümünü yapar. Ardından başka bir function içinde MDFT değerlerini kontrol eder. Fourier dönüşümünden sonra gerekli high ve low frekanslarda 1000 büyüklüğünde dürtüler var. İf komutu kullanarak high ve low frekansların 500 den büyük olup olmadığını kontrol eder. Ardından telefon numarasına ulaştım.
Grafikler için;
For graph;
figure
SUBPLOT(3,1,1),plot(t*16000,n1)
SUBPLOT(3,1,2),plot(t*16000,n2)
SUBPLOT(3,1,3),plot(t*16000,n3)
figure
SUBPLOT(3,1,1),plot(t*16000,n4)
SUBPLOT(3,1,2),plot(t*16000,n5)
SUBPLOT(3,1,3),plot(t*16000,n6)
figure
SUBPLOT(3,1,1),plot(t*16000,n7)
SUBPLOT(3,1,2),plot(t*16000,n8)
SUBPLOT(3,1,3),plot(t*16000,n9)
figure
SUBPLOT(2,1,1),plot(t*16000,n10)
SUBPLOT(2,1,2),plot(t*16000,n11)