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

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

Отправлено 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 дБ. Поэтому кроме как флоатинг-пойнт или его эмуляция ничего не поможет, никакая нормировка.

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

Ответы


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

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

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


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