[an error occurred while processing this directive]
Ответ (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)
|
Отправлено
homekvn 31 октября 2006 г. 13:25
В ответ на: Ответ: отправлено
st256 31 октября 2006 г. 12:54
|
|
|
|
По поводу длины КИХ. Тут шевели-не шевели извилинами - все плохо. (См. мой пост на этой же странице под названием "Вопрос, подкупающий своей новизной"; http://www.telesys.ru/wwwboards/dsp/265/messages/41277.shtml). Если коротко, то требования заказчика (оспариванию не подлежат, даже если они "неправильные") такие: сделать эквализацию каждого из 14-ти аудиоканалов. Частотные диапазоны всех каналов разные, т.е. понижение частоты в некоторых, но не во всех каналах, делать можно. В том посте я привел в таблице предполагаемый довнсемплинг для каждого канала.
Разрешение по частоте для вуферных каналов 5.5 Герц, для сабвуфера - и того меньше - 3 Гц. Для каналов Tweater+Midrange (в которых понижение частоты сделать нельзя вообще - разрешение по частоте 25 Гц). Все это приводит в итоге к тем длинам фильтров, что я указал в таблице. С сабвуфером - отдлельная тема для разговора. Там длину фильтра можно было бы уменьшить, если бы все каналы обрабатывались отдельно. Но проблема в том, что благодаря SIMD существует очень эффективный способ обработки стереоканала (по производительности это будет почти то же самое, что и моноканала). Таким образом за цену одного канала мы обрабатываем сразу два. Поэтому сабвуфер имеет смысл обрабатывать не разделяя вместе с его стереопарой - центральным каналом (Center). А раз так, то длины фильтров должны быть одни и те же. Для центрального канала я могу сделать понижение частоты только на 4. Поэтому длина фильтра должна быть 3840 (чтобы удовлетворить требованиям и того, и другого канала). Кстати, даже если бы я захотел понизить частоту в сабвуферном канале еще и еще, то это привело бы к большой задержке, которую бы пришлось выравнивать по всем каналам. А у меня и так задержки большие.
Есть еще один геморрой - количество внутренней памяти процессора сильно ограничено. Все фильтры туда не влезут однозначно. Более того, я хочу взять процессор с таким количеством внутренней памяти, что туда не взезет даже один фильтр. Поэтому вариант один. Использовать внешнюю память и разделить импульсную или частотную характеристику фильтра на куски, и во время обработки очередного куска фильтра, подгружать ДМА-каналом из внешней памяти другой (при этом при необходимости не забыть выгрузить во внешнюю память кусок данных посчитанный на предыдущем шаге). Вобщем, получается оригинальная комбинация работы методов overlap-add и overlap-save и диспетчера внешней памяти.
С такими длинами фильтров делать фильтрацию прямо во временной области не получится, в особенности с учетом нехватки внутр. памяти. Так что придется использовать частотную область. (Можете посчитать - при обработке во временной области фильтр загнется; а у меня на Шарке получилось довести операцию КИХ-фильтрации до 112 тактов на семпл при длине фильтра 1024; и это еще не предел; т.е. получается, что фильтрация в частотной области для фильтров с такими длинами по меньшей мере в 10 раз эффективнее).
С нормировкой - подчеркну еще раз - могут возникнуть проблемы, поскольку динамический диапазон вх. сигнала варьируется в пределах 120 дБ. Поэтому кроме как флоатинг-пойнт или его эмуляция ничего не поможет, никакая нормировка.
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Ответ: — st256 (31.10.2006 14:07 217.151.231.218, 733 байт)
- Ответ (+) — homekvn (31.10.2006 15:25 212.185.161.237, 1930 байт)
- Ответ. Окончательный и обсуждению не подлежащий. — st256 (31.10.2006 16:16 217.151.231.218, 1062 байт)
- Ответ (ну я не настаиваю на окончательности моего ответа и на его необсуждаемости) — homekvn (31.10.2006 16:47 212.185.161.237, 1778 байт)
- А еще по поводу fixed и floating... (+) — ASergej_R19 (31.10.2006 17:24 80.250.160.170, 326 байт)
- Да я и это не оспаривал (+) — homekvn (31.10.2006 17:45 212.185.161.237, 1479 байт)
- Вот пример не в отрыве... (+) — ASergej_R19 (31.10.2006 18:16 80.250.160.170, 67 байт)
- Ответ (+) — homekvn (31.10.2006 18:26 212.185.161.237, 258 байт)
- Ответ — ASergej_R19 (31.10.2006 18:46 80.250.160.170, 330 байт)
- Ответ (+) — homekvn (31.10.2006 19:14 212.185.161.237, 2314 байт)
- Я же Вам писал по поводу Блекфина... (+) — ASergej_R19 (31.10.2006 19:45 80.250.160.170, 348 байт)
- А вот еще последний гвоздь (+) — homekvn (31.10.2006 19:27 212.185.161.237, 773 байт)
- Вообще-то я ничего не сдвигаю - просто складываю раздельно сумму и число отсчетов... (+) — ASergej_R19 (31.10.2006 19:40 80.250.160.170, 165 байт)
- Уж не знаю как там у блэкфина, но делить каждое число перед возведением в квадрат - это какое-то особенный шик, больше напоминающий извращение. Вот Вам навскидку метОд. Отдельно суммируете старшие 16-ти разрядные чапсти квадратов, отдельно младшие. Потом суммы сшиваете и результат делите. Или сначала делите, потом сшиваете, пофигу. И гвоздь Ваш совсем ржавый в результате получился. — -=ВН=- (31.10.2006 19:36 193.125.71.140, пустое)
- Можно эту операцию расписать для того примера, что я привел ранее (+) — homekvn (31.10.2006 19:53 212.185.161.237, 552 байт)
- А я Вам ответил, что точный результат получается за время ~2*N. И если нужно деление (считается средний квадрат), то делится означенный точный результат, а вовсе не каждый операнд. И годится это дело для любого вектора, хорошего ли, плохого ли. 2*N гораздо хуже, чем N, гораздо, но много лучше деления каждого отсчета, много лучше. — -=ВН=- (31.10.2006 20:02 193.125.71.140, пустое)
- А никто и не говорил, что у Блекфина производительность больше чем у Шарка... (+) — ASergej_R19 (31.10.2006 20:02 80.250.160.170, 222 байт)
- А если использовать оба аккумулятора A0 и A1, то посчитает за время вдвое меньшее.. — quark (31.10.2006 20:06 62.140.241.223, пустое)
- С последним утверждением я не спорю и не возражал против него. Просто пример Вы привели, на мой взгляд, не очень удачный для демонстрации этого утверждения. Вот там-то я и завозражал. — homekvn (31.10.2006 20:05 212.185.161.237, пустое)
- А я начал возражать Вам, потому что Вы возражали неправильным применением fixed point... :-) (+) — ASergej_R19 (31.10.2006 20:21 80.250.160.170, 398 байт)
- Ну, про точность я готов продолжить. Приведите, если Вам не трудно, пример наихудшего для floating-point вычислений вектора, где бы начались проблемы с точностью, но при этом 32-битный fixed-point подобных проблем бы не имел. — homekvn (31.10.2006 20:29 212.185.161.237, пустое)
- Не в состоянии прочитать всю дискуссию, но сейчас особенно моден формат ieee754. Каковой для флоата обычного оговаривает на все прол все 32-х разряда. С учетом этого сложите во float 2 числа и доложите результат. Первое число=1073741823, второе =1073741822. — -=ВН=- (31.10.2006 20:38 193.125.71.140, пустое)
- Ну-у! Так и я могу. А теперь Вы сложите серию чисел вроде 8.21e+48 или (e-48), которые также соответствуют приведенному Вами стандарту. И потом Вы мне исходные числа приведите, которые надо в квадрат возвести, а потом просуммировать. А потом сами на блекфине сделайте то же самое. — homekvn (31.10.2006 21:08 212.185.161.237, пустое)
- Вы подменили вопрос. 8.21e+48 не входят в ДИАПАЗОН 32-х разрядных чисел целых. Не входят. А приведенные мной числа в ДИАПАЗОН флоата одинарной точности входят. Я ведь не просил Вас складывать в одинарном флоате числа порядка 8.21e+16799. Нехорошо, нехорошо, Вы пытаетесь меня обмануть :-((( — -=ВН=- (31.10.2006 21:18 193.125.71.140, пустое)
- Да признаюсь, перебрал. Докладываю результат 3,9999997 И что? Кстати (+) — homekvn (31.10.2006 21:41 212.185.161.237, 635 байт)
- Да где Вы видели, что кто-то Ваш Шарк принижал? :-) Это ж разные процессоры, заточены под разные вещи... (+) — ASergej_R19 (31.10.2006 22:05 80.250.160.170, 339 байт)
- Вы знаете, я как-то догадывался, что Шарик и с целыми числами умеет, я даже с шариком работал, правда это было давно, шарик старый был, 21065, подох наверное уже. И мне в общем по барабану, кто кого сделает, шарик блэкфина или наоборот. Вы задаете вопрос или приводите пример, я Вам в ответ на это и только на это и демонстрирую всякие ноу и даже хау. — -=ВН=- (31.10.2006 21:48 193.125.71.140, пустое)
- Отлично! :-) (+) — ASergej_R19 (31.10.2006 20:42 80.250.160.170, 289 байт)
- Вот кстати и так тоже можно... (-) — ASergej_R19 (31.10.2006 19:41 80.250.160.170, пустое)
- В силу последнего замечания для нахождения RMS Блекфин даже и точнее-то ну никак не будет (ввиду обязательной нормировки входного вектора). — homekvn (31.10.2006 19:33 212.185.161.237, пустое)
- Конечно все познается в сравнении... (+) — ASergej_R19 (31.10.2006 17:14 80.250.160.170, 635 байт)
- Ответ: — st256 (31.10.2006 17:06 217.151.231.218, 53 байт)
- Очепятка: Шарк, конечно же, не только для аудиосигналов годится. — homekvn (31.10.2006 16:50 212.185.161.237, пустое)
- Эээ... А у меня тоже входной сигнал варьируется в районе 120 дБ... (+) — ASergej_R19 (31.10.2006 13:49 80.250.160.170, 494 байт)
- Ответ (+) — homekvn (31.10.2006 14:42 212.185.161.237, 1741 байт)
- Ответ: — st256 (31.10.2006 14:52 217.151.231.218, 156 байт)
- Ответ (+) — homekvn (31.10.2006 15:33 212.185.161.237, 776 байт)
- Добавлю (+) — homekvn (31.10.2006 15:37 212.185.161.237, 286 байт)
- Ответ: — st256 (31.10.2006 14:11 217.151.231.218, 304 байт)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание