Ответ: (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено SM 17 марта 2003 г. 09:46
В ответ на: Детектирование DTMF используя АЦП - объясните пожалуйста, как бороться с входными уровнями. отправлено ХУДОжник 17 марта 2003 г. 06:36

для 8051:
1. Делаешь АРУ. Это примерно так. Hаходишь абсолютное значение сигнала. Сравниваешь с записанным в ячейке. Если больше - заменяешь записанный на новый. Если меньше - ничего не делаешь. В таймере раз например в 1 мс эту ячейку домножаешь на константу, определяющую время задержки АРУ. Ну константа для 51-го вероятнее всего должна быть в формате Q8 без знака. И, самое основное - каждую выборку сдвигаешь влево на один раз меньше, чем в той ячейке старших битов = 0.

2. Учитывая что 8051 сейчас штука быстрая ....

2.1 Можно попробовать посчитать при помощи рекурсивного фильтра Герцеля. Для одной частоты он требует одного умножения и одного сложения на выборку. Умножать тут можно 8 бит на 8 бит, получая 16 бит. Но умножать надо со знаком. Это может вызвать некоторые трудности. Результатом работы этого фильтра является спектральная составляющая в заданной точке спектра. То есть это полный аналог ДПФ для одной точки.

2.2 Так я делал даже на 16-мгц 12-тактовом. Сворачивал старшие 4 бита сигнала с 4-мя битами синуса и косинуса. Это давало хороший выигрыш. В результате перемножения получается 8 бит число, которое накапливалось в 16-бит аккумуляторах.

На счет квадратов при рассчете через корреляцию. Это обязательно. А вот корень в этом случае никому не нужен - так как если квадрат больше, то и корень из него больше.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru