[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)
Если интересует битреверс индекса массива и никак нельзя воспользоваться аппаратной поддержкой, то кроме простого сдвига и табличного, например по байтам, методов, ниже еще один метод.
Для 16-ти разрядного индекса.
При меньшей разрядности - либо вход сдвинуть влево, либо выход вправо.
Медленней, конечно, чем таблица. Но быстрее простого сдвига. На сколько - от проц. зависит. Для с54 раза в полтора.
Карты так тасуют.
int bitrindx(int indx)
{
indx=((indx&0x5555)<<1)|((indx&0xAAAA)>>1);
indx=((indx&0x3333)<<2)|((indx&0xCCCC)>>2);
indx=((indx&0x0f0f)<<4)|((indx&0xf0f0)>>4);
indx=((indx&0x00ff)<<8)|((indx&0xff00)>>8);
return indx;
}
А если первую операцию выкинуть - будет четвертичноинверсная перестановка. Digit reverse с digit'ом=4.
Еще пара замечаний, касательно FFT уже.
Собственно битреверсная адресация может понадобиться только для sin,cos таблиц. Для данных она может оказаться и ненужной. Т.е. ненужной, как отдельная операция перестановки данных в массиве.
Но дополнит. массив размером=размеру массива данных может потребоваться и маленькая циклическая таблица.
Например для fft с прореживанием по времени по основ. 4, размер этой таблички=длине fft/16.
Для того же примера - вх. данные в естественном порядке. Адресация на первой ступени внутри бабочки по осн. 4 с индексом=длине/4. При переходе с бабочки на бабочку - с 1.
На второй ступени, на каждой подступени, с индексом=длине/16 внутри бабочки и 1 с бабочки на бабочку. И т.д.
А чтобы и естественный порядок на выходе поиметь, используется вышеупомянутый дополн. массив и табличка, но только на последней ступени fft. Результат кладется в доп. массив.
Времени отжирает намного меньше, чем явная перестановка данных в массиве. Но ценой памяти.
Составить ответ
|||
Конференция
|||
Архив
Ответы
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru