[an error occurred while processing this directive]
|
Для случая Q.15 все правильно. А в ассемблере есть одна команда, реальзующая ACC1=ACC2+(*ptr1++)*(*ptr2++). Называется MAC xmem,ymem,src,dst. Есть еще более полезная команда - MACD smem,pmad,src. Вторая кроме умножения с накоплением выполняет еще и сдвиг содержимого линии задержки с входным сигналом. Также есть команда-префикс RPT, позволяющая повторить следующую команду N раз. Итого весь Ваш фильтр выйдет в две команды - RPT и MACD. Ну плюс какие-то подготовительные операции. Далее. Если ИХ фильтра имеет четную симметрию, то возможно использование команд RPT FIRS. Эта команда (FIRS) умножает сумму двух операндов на коэффициент и производит накопление. Итого четно-симметричный фильтр требует в два раза меньше тактов процессора, чем длина ИХ. При условии, разумеется, использования циркулярной адресации в линии задержки, чтобы не требовался ее сдвиг.
Осторожно! Импульсная характеристика может и не уложиться в Q.15 - тогда понадобится использовать для нее другой формат (например Q.14, Q.13), и соответственно скорректировать сдвиг выходного результата.
Кстати С должен уметь использовать команды умножения с накоплением. Но использовать FIRS ума ему вряд-ли хватит.
E-mail: info@telesys.ru