Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 283; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.