algoritmo de busca direta

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:

$\displaystyle Tgen = N * 1 / 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:

$\displaystyle Tgen = N /(2 Fs)$ (2)

A freqüência gerada (Fgen) é 1/Tgen e portando:

$\displaystyle Fgen = (Fs * Delta)/N$ (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:

$\displaystyle 0 <= Delta < N/2$ (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