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

миниатюрный аудио-видеорекордер mAVR

Отправлено homekvn 31 октября 2006 г. 19:14
В ответ на: Ответ отправлено <font color=gray>ASergej_R19</font> 31 октября 2006 г. 18:46

Так вот благодаря квадрату роль небольших величин тем паче никакая. Чтобы подчеркнуть эту мысль, предлагаю рассмотреть не среднеквадратичное значение, а средне биквадратичное, или даже так:

MS[K] = [sum{|x[i]|^K}/N, i=1,2,...N]^(1/K), где K - целое число больше двух. Например, K=10. Вот и увидите, что, чем больше эта степень, тем меньшее влияние игнают малые величины. Кстати, в пределе при K стремящимся к бесконечности величина MS будет равна max{x[i], i=1,2,...N}

А вдобавок еще скажу, что чем больше данных, тем больше фактор 1/N, стоящий под корнем и тем еще меньшую роль играют малые величины. Например, если N=128=2^7, то деление на N приведет к уничтожению семи младших разрядов. Если сумма малых величин укладывалась в эти младшие семь бит, то они (эти малые величины) в самом буквальном смысле никакой погоды не сделают.

А потом еще, зачем нужно такое точное-преточное значение среднеквадратичной величины. Обычно при обработке сигналов его используют в различного рода адаптивных алгоритмах. При этом требуется определить порядок мощности сигнала на входе. Вот порядком и ограничиваются.

А умножать 32разрядное число на 32-разрядное число на 16битном проце все-таки дело неблагодарное. Вот на Шарке эта операция (вместе с суммированием) пролетит в две строчки (сам цикл, предустановки не в счет):

Предустановки:
1. Загружаем в R4 значение N/2;
2. Устанавливаем указатель на вектор данных;
3. Включаем SIMD-mode;
4. Читаем первое слово (точнее пару слов - потому что SIMD) и записываем в регистр R0 и смещаем указатель по вектору данных на 1 (фактически на 2 поскольку мы в SIMD-режиме);
5. Обнуляем R2;

ЦИКЛ от 1 до R4,
R1=R0*R0 || R0 = читаем новое значение из вектора и смещаем указатель;
R2=R2+R1;

После цикла:
Выключаем SIMD-режим;
R2=R2+S2;

И все!

S2 - аналог регистра R2 во втором АЛУ, в котором все операции в SIMD-режиме дублируют первое АЛУ. Поэтому до предпоследней операции в R2 находится сумма квадратов нечетных отсчетов, а в S2 - сумма квадратов четных отсчетов.

Кроме того, на самом деле правильно считать, что в цикле я выполняют не две операции, а всего одну - ведь цикл-то у меня не до N, а до N/2.

Так что еще сто раз подумаешь, на чем такую математику делать. Блекфин по этой задаче будет отставать о-очень сильно.



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

Ответы


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

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

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание