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

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

Отправлено homekvn 06 октября 2006 г. 16:52
В ответ на: Ответ: отправлено st256 06 октября 2006 г. 12:23

======= Все мы чего-то не знаем.
- Это правда. Да я Вас в этом и не упрекал.

======= Что касается того, что написали Вы, это конечно очень интересно, но Вы снова предпочитаете меня не слышать. Я же сказал (и это мой заглавный пост в данном топике) - нет таких програм на Си, коих при использовании в DSP нужно оптимизировать.

- Но в другом месте Вы говорите так: "А вот расчеты на Си я бы не рекомендовал производить. Все-таки время дороже удобств...". А в самом начале с иронией отзываетесь о принципиальной возможности использования Си при разработке DSP-приложений. Так все-таки о чем же дискуссия? Все, что я пытался Вам сказать (и все время придерживался именно этой темы, и никакой другой) - это то, что не стоит быть столь категоричным. Си нужен. Ассемблер тоже нужен. И у каждого языка свое место в DSP-приложении.

А насчет оптимизации кода на Си... Я бы и здесь не был столь категоричным. Очень часто сервис-функции или функции инициализации должны быть написаны таким образом, чтобы сэкономить память. Или, например, чтобы уменьшить размер программного кода. Ведь, к примеру, для сортировки можно выбрать алгоритм пузырька, который занимает три-четыре строчки и не требует дополнительных ресурсов памяти, но который является довольно медленным, а можно выбрать и сортировку слиянием, которая работает очень быстро, но и программный код для нее существенно больше, и дополнительная память требуется, и стек за счет рекурсии используется нещадно. Так что и здесь оптимизация в своем роде тоже требуется.

======= Очень сомнителен пассаж о ф-циях пересчета. Из своей практики могу сказать, что они очень даже реал-тайм.

- Разный бывает пересчет. Есть тот, который действительно должен производиться синхронно с вызовом реал-тайм задачи (например, пересчет биквадов в течение заданного времени - он же морфинг, или интерполяция). Есть не-реалтайм пересчет. Например, изменение параметров компрессора звукового сигнала; изменение параметров внутреннего генератора шума или гармонического сигнала; да даже пересчет новых значений коэффициентов биквада или как у Вас эквалайзера частично это делается в сервис-функции. Почему? Да потому что делать полный пересчет в реал-тайме нецелесообразно и очень накладно: к примеру у Вас есть биквадратный фильтр А. Надо теперь перейти к фильтру В. Параметры биквада это: частота среза (или центральная частота в случае полосового фильтра), Q-фактор, коэффициент усиления в полосе. Рассчет коэффициентов числителя и знаменателя передаточной функции фильтра по приведенным выше параметром - дорогостоящий процесс, поскольку требует вызов косинуса, синуса и прочей ерунды. Чтобы этого не делать, я рассчитываю (в нереалтаймовской функции - т.е. в сервис-функции) только конечное состояние и приращения величин, которые я использую при интерполяции коэффициентов напрямую, без рассчета фильтра на каждом шаге заново. Вот сами коэффициенты интерполируются уже в реал-тайме, используя примитивные формулы.

Так что даже те модули, которые требуют реал-тайм перестройки параметров, в большинстве своем требуют подготовительных расчетов, сделанных в нереалтайме. И вот этот нереалтайм - это удел Си.

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

Ответы


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

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

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


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