|
для 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