Você está na página 1de 4

PROCESSAMENTO DIGITAL DE SINAIS (PDS)

LABORATÓRIO 4 – APLICAÇÕES DO PROCESSAMENTO DIGITAL DE SINAIS


SÍNTESE E DETEÇÃO DTMF
Prof. Marcelo Pellenz

(DTMF) DUAL-TONE MULTIFREQUENCY


N=205 FT = 8 kHz
Tom de Valor inteiro Erro
Valor
frequência de k mais absoluto
exato de k
(Hz) próximo em k
697 17,861 18 0,139
770 19,731 20 0,269
852 21,833 22 0,167
941 24,113 24 0,113
1209 30,981 31 0,019
1336 34,235 34 0,235
1477 37,848 38 0,152
1633 41,846 42 0,154

N=201 FT = 8 kHz
Segunda Valor inteiro Erro
Valor
harmônica de k mais absoluto
exato de k
(Hz) próximo em k
1394 35,024 35 0,024
1540 38,692 39 0,308
1704 42,813 43 0,187
1882 47,285 47 0,285
2418 60,752 61 0,248
2672 67,134 67 0,134
2954 74,219 74 0,219
3266 82,058 82 0,058

697 Hz 1 2 3 A

770 Hz 4 5 6 B

852 Hz 7 8 9 C

941 Hz * 0 # D

1209 Hz 1336 Hz 1477 Hz 1633 Hz

1
Fórmulas do cálculo da DFT de N pontos:

( )
X e jw ⇒ DTFT
( )
X [k ] = X e jw
wk =
2π k k = 0, 1, K , N − 1
N
N −1
 j2π
X [k ] = ∑ x[n]⋅ W
n =0
kn
N k = 0, 1, K , N − 1 W N = exp −
 N 

1 – No sistema DTMF são utilizadas duas freqüências distintas para representar cada dígito. O
programa a seguir calcula a DFT de cada freqüência. Podemos observar que existe um
espalhamento da energia em torno da freqüência central (leakage).

k FS
Fk = , k = 0, 1, K , N − 1
N

% Amostras selecionadas da DFT para


% cada um dos tons de sinais DTMF
clear; clc;
close all;
fs=8000;
n=0:204;
f=[697 770 852 941 1209 1336 1447 1633];
escala=[[10 25];[10 25];[15 30];[15 30];[25 40];[25 40];[35 50];[35 50]];
for i=1:8
figure(i);
x=sin(2*pi*f(i)*n*(1/fs));
X=fft(x);
stem(n,abs(X));
label=num2str(f(i));
title(strcat(label,' Hz'));
ylabel('|X[k]|');
xlabel('n')
axis([escala(i,1) escala(i,2) 0 110]);
end

2 – O programa a seguir sintetiza, analisa e decodificada os tons de freqüência de discagem. Os


tons transmitidos são enviados para o conversor D/A e podem ser ouvidos através da placa de
som.

% Funcao para calcular 1 amostra da DFT


% XF=gfft(x,N,k)
% x = sequencia de entrada de comprimento <= N
% N = comprimento da DFT
% k = numero da amostra
% XF = amostra desejada da DFT

function XF=gfft(x,N,k)
if length(x)<N
xe=[x zeros(1,N-length(x))];
else
xe=x;
end

x1=[xe 0];
d1=2*cos(2*pi*k/N); W=exp(-i*2*pi*k/N);
y=filter(1,[1 -d1 1],x1);
XF=y(N+1)-W*y(N);

2
% DUAL-TONE MULTIFREQUENCY TONE DETECTION

clear; clc;

fs=8000;
n=0:204;
n1=0:319;
loop=0;

while loop==0,

d=input('Digite Numero:');
symbol=abs(d);

if symbol==1
f1=697; f2=1209;
end
if symbol==2
f1=697; f2=1336;
end
if symbol==3
f1=697; f2=1477;
end
if symbol==4
f1=770; f2=1209;
end
if symbol==5
f1=770; f2=1336;
end
if symbol==6
f1=770; f2=1477;
end
if symbol==7
f1=852; f2=1209;
end
if symbol==8
f1=852; f2=1336;
end
if symbol==9
f1=852; f2=1477;
end
if symbol==0
f1=941; f2=1336;
end

y=sin(2*pi*f1*n1*(1/fs))+sin(2*pi*f2*n1*(1/fs));
sound(y,fs);

x=sin(2*pi*f1*n*(1/fs))+sin(2*pi*f2*n*(1/fs));

k=[18 20 22 24 31 34 38 42];

for m=1:8;
Fx(m)=gfft(x,205,k(m));
val=abs(Fx);
end
stem(k,val); grid;
limit=8100;

if val(1)*val(5)>limit
disp('Tecla Apertada = 1');
end

3
if val(1)*val(6)>limit
disp('Tecla Apertada = 2');
end

if val(1)*val(7)>limit
disp('Tecla Apertada = 3');
end

if val(2)*val(5)>limit
disp('Tecla Apertada = 4');
end

if val(2)*val(6)>limit
disp('Tecla Apertada = 5');
end

if val(2)*val(7)>limit
disp('Tecla Apertada = 6');
end

if val(3)*val(5)>limit
disp('Tecla Apertada = 7');
end

if val(3)*val(6)>limit
disp('Tecla Apertada = 8');
end

if val(3)*val(7)>limit
disp('Tecla Apertada = 9');
end

if val(4)*val(6)>limit
disp('Tecla Apertada = 0');
end

end

3 – No programa a seguir analisamos o efeito do comprimento da DFT na análise espectral. O sinal


analisado no domínio da freqüência é

x[n] = 0,5 sen(2 π f 1 n) + sen(2 π f 2 n), 0 ≤ n ≤ N −1


f 1 = 0,22 f 2 = 0,34

Calcule a DFT do sinal de comprimento N=16. Utilize os seguintes comprimentos para a DFT:

R=16 R=32 R=64 R=128


clear; clc;
close all;
N=input('Comprimento do Sinal: ');
R=input('Comprimento da DFT: ');
f1=0.22; f2=0.34;
n=0:N-1;
x=0.5*sin(2*pi*f1*n)+sin(2*pi*f2*n);
X=fft(x,R);
figure(1);
k=0:R-1;
stem(k,abs(X)); grid;
title(['N = ', num2str(N),' R = ',num2str(R)]);
xlabel('k'); ylabel('|X[k]|');

Você também pode gostar