O algoritmo de busca direta (direct look-up) para geração dinâmica de formas de onda (AN1771) sugere um algoritmo para a geração dinâmica de formas de onda. O algoritmo de busca direta proposto utiliza uma tabela com N entradas dos valores da senóide como base para produzir qualquer das freqüências utilizadas no DTMF.
Uma freqüência de amostragem (Fs) define a freqüência com que novas amostras da tabela são obtidas e enviadas para o conversor A/D. Um registrador denominado Acumulador de fase é utilizado para indicar a linha da tabela que deve ser acessada na presente amostragem (fase corrente) e na freqüência Fs o Acumulador é incrementado de um valor Delta. O Acumulador é utilizado “módulo N” para que os acessos que ultrapassem o tamanho da tabela sejam feitos no seu inicio.
O valor de Delta define então o intervalo entre uma e a próxima amostra tomadas da tabela. Fazendo Delta igual a 1 o algoritmo percorrerá todas as N entradas da tabela, o que resultaria na reprodução da forma de onda da senóide na freqüência Fs de amostras. O tempo Tgen para geração de um período da forma de onda seria então o tempo para percorrer todas as N amostras na freqüência Fs:
![]() |
(1) |
Se fizermos Delta igual a 2, somente metade das amostras na tabela serão percorridas e portanto, percorrendo-as na mesma freqüência Fs, o tempo Tgen para gerar um período da forma de onda cai pela metade:
![]() |
(2) |
A freqüência gerada (Fgen) é 1/Tgen e portando:
![]() |
(3) |
Pelo critério de Nyquist (a freqüência no sinal analógico não pode ter componentes de freqüência maior que metade da taxa de amostragem) Delta é uma quantia fracionária válida no intervalo:
![]() |
(4) |
Assim, para produzir uma data frequência o algoritmo segue os seguintes passos:
1.Calcula o valor de Delta a partir de N, Fs e Fgen 2.Enquanto for para gerar o tom: 1.Acumulador = Acumulador + Delta 2.Envia o valor de Tabela[Acumulador] para o conversor A/D
Como DTMF utiliza a síntese simultânea de dois tons, o algoritmo acima deve ser estendido para fazê-lo. Para isso são utilizados acumuladores e deltas separados para cada uma das freqüências. Em cada amostra são calculados os valores dos deltas separadamente para cada freqüência desejada e incrementados os acumuladores. São extraídos então dois valores da tabela seno. Esses valores são somados algebricamente e o resultado é enviado para o decodificador D/A. É preciso, no entanto, tratar ou evitar a ocorrência de um possível overflow nesta soma.
Pedro Ribeiro 2009-07-08