[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено ВН 26 февраля 2002 г. 18:37
В ответ на: Много думал.... Кажется это не совсем то (см. внутри)..... отправлено Dimitry 26 февраля 2002 г. 16:34

Как делать битовый коррелятор - через XOR с подсчетом 1, или через обычные умножения с послед. суммированием - зависит от того, на чем Вы его хотите сделать и что хотите экономить.
Если экономить время вычисл. -на большинстве DSP (если не на всех)
быстрее ,да и удобнее, мне кажется, через умножения. Вх. биты - в слова, можно в 2-х вариантах.
1. Бит = 1 - слово=1, бит=0 - слово=-1. Далее сумма произведений, как уже писали.
2. Бит = 1 - слово=1, бит=0 - слово=0. Далее тоже сумма произведений,
но затем сумма удваивается и из нее вычитается длина опорной последовательности. В этом случае рез-т совпадет с 1. Если удвоение и вычитание не делать - рез-т будет смещен.
Если экономить память - лучше иметь дело с битами, XOR-ть их с опорной последовательностью и считать число 1 после XOR. Далее, как в 2., полученное число удвоить и вычесть длину опоры.
Естественно, необходим сдвиг уже принятых бит с поступлением каждого нового бита.
Но работать с длинными (больше длины слова) битовыми потоками в DSP неудобно - и многословный сдвиг вещь неприятная и подсчет числа 1 тоже. Если все таки решите - могу предложить алгоритм довольно быстрого подсчета 1. На примере 16-р. слова (a la C, для простоты):
1. unsigned int temp=inp_wrd & 0xAAAA; // inp_wrd -вх. слово.
2. temp>>=1;
3. inp_wrd&=0x5555;
4. inp_wrd+=temp; //1-4 - 1-я ступень.

5. temp=inp_wrd&0xCCCC;
6. temp>>=2;
7. inp_wrd&=0x3333;
8. inp_wrd+=temp; //5-8 -2-я

9. temp=inp_wrd&0xF0F0;
10.temp>>=4;
11.inp_wrd&=0x0F0F;
12. inp_wrd+=temp; //9-12 - 3-я

13.temp=inp_wrd&0xFF00;
14. temp>>=8;
15. inp_wrd&=0xFF;
16. inp_wrd+=temp; //последняя, результат в inp_wrd.
При наличии операции косого сдвига выполняется довольно быстро.
Очевидно - легко расширяется до большей разрядности.
Число ступеней =LOG2(SIZE OF WORD).
Есть и другие алгоритмы, у этого особенность - выполняется одно и тоже время независимо от вх. данных. Иногда это важно.


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru