КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Пример. КИХ-фильтрация
Пример. Оптимизация циклов Оптимизация циклов - реализуемые в компиляторах методы, направленные на повышение скорости выполнения программных циклов. В действительности, все эти методы можно объединить в два эмпирических правила: никогда не следует делать в цикле лишних действий, которые можно сделать вне его, и необходимо избавляться от передач управления внутри циклов, где это возможно. Ниже приведен пример на Си и его реализация на Assembler в двух вариантах. Второй вариант программы более рационален, так как он полностью удовлетворяет двум правилам оптимизации – нет нагромождения в цикле, следовательно, быстродействие повышается. Реализация на Си: int sum(const short *a, int n) /* в регистр AR0 заносятся входные значения массива а[n], T0 хранится размер массива n */ { int sum = 0; int i; #pragma MUST_ITERATE(1) for(i=0; i<n; i++) { sum += a[i]; } return sum; } Реализация на Аssembler: _sum: _sum: MOV #0, AR1 SUB #1, T0, AR2 BCC L2,T0 <= #0 MOV AR2, CSR
SUB #1, T0, AR2 MOV #0, AC1 MOV AR2, CSR RPT CSR RPT CSR ADD *AR0+, AC1, AC1 ADD *AR0+, AC1, AC1 MOV AC1, T0 L2: MOV AC1, T0 RET RET void fir(short onchip *h, short *x, short * restrict y, short m, short n) { short i, j; short i, j; long y0,y1; long y0; for (j = 0; j < m; j+=2) #pragma UNROOL(2) { for (j = 0; j < m; j++) y0 = 0; { y1 = 0; y0 = 0; for (i = 0; i < n; i++) #pragma MUST_ITERATE(1) { for (i = 0; i < n; i++) y0 += (long)x[j-i] * h[i]; { y1 += (long)x[j-i+1] * h[i]; y0 += (long)x[j-i] * h[i]; } y[j] = (short) (y0 >> 16); y[j] = (short) (y0 >> 16); } y[j+1] = (short) (y1 >> 16); } } /* x[-i]=x[n-i-1] – периодический */ } Пояснение. КИХ-фильтрация - алгоритм, который реализует один из видов линейных цифровых фильтров, характерной особенностью которого является ограниченность по времени его импульсной характеристики (с какого-то момента времени она становится точно равной нулю). Такой фильтр называют ещё нерекурсивным из-за отсутствия обратной связи. Знаменатель передаточной функции такого фильтра — некая константа. КИХ-фильтрация математически описывается следующим выражением: Алгоритм вычисляет конечную импульсную характеристику с использованием коэффициентов, хранящихся в векторе h. Актуальные входные данные сохранены в векторе x. Результат на выходе фильтра сохраняется в вектор y, n- размер массива коэффициентов, m- размер массива входных и выходных данных. Пример 7 реализован с помощью следующих составляющих: - h[i]-указатель на вектор коэффициентов фильтра размера n (h хранится в обратном порядке: h(n-1),... h(0)) - x[j]-указатель на вектор входных значений размера m(вектор x - шум) - y[j]-указатель на вектор выходных значений размера m. В рассмотренном варианте второй пример более рационален, в связи с тем, что в нем реализован алгоритм без нагромождений и использования лишних переменных(например, y1). Для повышения оптимизации КИХ-фильтрации рекомендуется использовать циклическую адресацию.
Дата добавления: 2014-01-11; Просмотров: 317; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |