Jump to content

    

_sv_

Участник
  • Content Count

    52
  • Joined

  • Last visited

Everything posted by _sv_


  1. Добрый вечер еще раз. Обойтись без фильтрации не получилось. Приходится возвращаться к затронутой теме. Нашел вот такой ресурс: http://www.micromodeler.com/dsp/ В принципе - делает почти все, что мне надо. Но есть пара вопросов: 1) Можно увидеть, что дизайнер, пересчитывая коэффициенты, подбирает их переполнение Q18, Q13 и т.д. Совершенно не понимаю каким образом они пересчитывают переполнение. 2) Сдвиги... В этом же примере как-то определяют те же сдвиги влево-вправо на 13, 14, 15 (и т.д.) битов. Как это считают? Спасибо.
  2. Да. Могу. Заранее рассчитать - не проблема. Но мне надо чуточку иное. Существует ли способ перевода коэфицинетов "плавающей точки" в фиксированную? Т.е. посчитать коэфицинеты в варианте "плавающей точки" (а1, а2, в0, в1 и в2) получается. Вроде бы получается. По крайней мере - фильтр делает то, что я ожидаю. Но перевод в фиксированную точку пока не удался.
  3. ответ на этот вопрос очевиден... я, к своему стыду, впервые слышу об этом методе. благодарен вам за ликбез. только пока не совсем понимаю каким образом реализовать сам сдвиг. ресамплингом? пока бродил по просторам интернета, нашел вот такую ссылку: A Collection of Useful C++ Classes for Digital Signal Processing Ссылка: Коллекция Загрузить весь архив сюда на форум не получается. Он чуток больше, чем 25мег. Много полезного выкусил из архива. Оставил только эти "полезные классы". DSPFiltersComplete.zip
  4. Добрый день всем. Сразу: железо реализовано на дохлом 32х разрядном арм. Поэтому ищу алгоритмы с целочисленной арифметикой. Спектр сигнала мне уже известен (в программе уже реализован анализатор спектра). Моя проблема стара как мир. Возбуждение в звуковом тракте. Микрофон-Динамик. Что хочется попробовать: перестраиваемый полосно-заграждающий фильтр. Частоту возбуждения - знаю. Полосу подавления - тоже. Степень подавления - тоже могу высчитать. Проблемы: 1) Что-то не нахожу реализаций полосно-заграждающих фильтров. Неужели надо лепить ФНЧ+ФВЧ? 2) Что-то не нахожу реализаций с целочисленной арифметикой. Неужели таковых нет? 3) Вообще мало реализаций перестраиваемых полосно-заградительных фильтров. Где искать? Добавил: Данные 16 бит, 16кгц дискретизация.
  5. Вернулись к вопросу. Оказалась проблема не совсем там, где искали. Фильтры и все остальное работают точно так, как должны. Вылезла проблема перегрева платы при включенной ИК подсветке. Грелся датчик вместе с платой. Давал медленно ползущие ввех значения. Я считал, что ошибка в матемалике фильтра. Спасибо всем участовавшим и отдельное andyp
  6. Та вроде - да. И это тоже, похоже, верно. Математические эксперименты мною пока прекращены. Обнаружились проблемы на плате. Установлены два двух ваттных ИК светодида. Жарят так, что забивают мне датчик. Это при том, что приняты все (как мне казалось) меры для предотвращения этого эффекта. Фильтры, механические пергородки и т.д. К теме вернусь чуток позже.
  7. У меня результаты сильно отличаются от Ваших. Почему - буду разбираться дальше. Правда, ошибки у меня уже в пределах, для меня допустимых. Продолжу завтра. Спасибо.
  8. Я, безусловно, не специалист в DSP. И в постах и в терминах наверняка есть ошибки. Однако, название "Скользящее Среднее" было взято из: wiki_exponential_moving_average Мне казалось (да и сейчас кажется), что название соответствует действительности. В общем и на том спасибо. Разбирательство с выкладками andyp привело меня на DSPLIB Где я, похоже, нашел ответ на мои вопросы. Проверяю в матлабе. Спасибо ему за это.
  9. Вы знаете... Я несколько раз прочитал свои посты. Не могу найти кто и откуда взял, что меня интересуют БИХ фильтры, или какие-то там замены. Гляньте, пожалуйста и Вы. Все, что меня действительно интересует это "скользящее среднее". У меня все более или менее получается, кроме достаточно точного вычисления коэффициентов. Мне хочется, что бы пользователь задал задержку в диапазоне, скажем, от 5 до 3600 секунд. И что бы после этого фильтр на идеальных данных (в Excel или Matlab) давал ошибку в, скажем, 5%. Пока что в диапазоне 270...420 секунд у меня ошибка почти 30%. В других интервалах все хорошо. Да. Действительно получаем. Уже добрался до этого. Ваши посты продвигают меня по дебрям DSP. Совершенно новая для меня тема. Я получаю данные от датчика раз в секунду. Диапазон значений - от 0 до 32767. Мне надо достаточно надежно отличить состояния "день", "ночь", "искусственное освещение". Уровни для каждого состояния будут определены чуток позже. Когда появится возможность установить оборудование в реальный корпус. Задача настолько тривиальна, что мне по простоте душевной, казалось, что ответ я получу в течении 10 минут.
  10. При более детальном изучении оказалось, что: 1) существуют два подхода к вопросу: output = input + FILTER_CONST * (output – input); output = input + FILTER_CONST * (input - output); При этом и тот и другой реализуют разные вещи. (input - output) - фильтр (output – input) - какой-то там интегратор. В связи с чем: Ваше утверждение поставлено под сомнение. Изучаю предмет дальше. Действительно - пока что полученные результаты ну никак не "плавающее среднее".
  11. Сразу - извиняюсь за долгое молчание. Был в отъезде. Спасибо всем за быстрые ответы. Теперь по делу: В первом посте досадная опечатка: Следует читать "output = input + FILTER_CONST * (input - output)" И это не "мой фильтр". В смысле, что я его не выдумывал. Это первое попавшееся мне решение задачи "усреднение за время". Мне всего-то надо усреднять данные от датчика света за некие интервалы времени. Да. Именно это и было реализовано (после устранения ошибки). Вот. Именно эту формулу и не мог найти. Спасибо. Тоже интересно. Насколько я понимаю, то это практически то же самое, что и у "thermit". Надо бы разобраться как в этом случае считается коэффициент alpha. Сижу с матлабом. Экспериментирую. Еще раз - спасибо всем. Мне кажется, что будут еще вопросы.
  12. Добрый день всем. Реализую простейший фильтр "скользящее среднее". output = input + FILTER_CONST * (output – input); Требуется адаптивно выбирать FILTER_CONST в процессе работы. Не могу найти способ вычисления оной. Мне, собственно, задают допустимое время накопления и порог. Надо как-то вычислить FILTER_CONST. Спасибо.
  13. Добрый день всем. Возникла пара вопросов по RFC3261. В частности: Глава "12.1.2 UAC Behavior" Определяет, что The route set MUST be set to the list of URIs in the Record-Route header field from the response, taken in reverse order and preserving all URI parameters. Вопрос: Что тут имеется ввиду? При том, что глава описывает ситуацию, когда UAC инициирует диалог. Т.е. копировать Record-Route физически неоткуда. Или тут рассматривается пакет, который уже дошел до UAS стороны? Почему тогда упоминается обратный порядок? Спасибо. Сергей.
  14. А оптически запитать не случайно не удастся?
  15. Спасибо за ответ. Но это, похоже, немного не то. Эти алгоритмы корректируют одиночные ошибки и детектируют двойные. Код Хэмминга вещь давно известная и везде уже реализованная. В больших флешках (MLC которые) произовдители советуют использовать более сложные алгоритмы. BCH чаще всего. Исправляют 2 или даже 4 бита (в зависимости от реализации).
  16. Добрый день всем. Возникла необходимость использовать "большие" нанд флешки (2 и 4 КБ страницы). Старенький DSP не поддерживает аппаратной корекции. Поэтому ищется программная реализация. Сам такое не напишу. Поэтому ищется готовая реализация. В принципе, в и-нете есть не мало ссылок. Вот, пара-тройка, на мой взгляд, интересных: http://lxr.free-electrons.com/source/lib/bch.c http://www.codeforge.com/article/136423 Не знаю насколько оптимальны эти реализации. Не хочется взять медленную. Впорос, собственно, кто какие реализации использует. Спасибо.
  17. Проблемы с поиском файлов? На имени проекта правой клавишей. Выбираете "Properties". Далее, идете в раздел "Resource" (тот, что в самом верху). Смотрите строку "Location". Должен быть полный путь к проекту. Не оно?
  18. Добрый день всем. Возникло тут желание запустить на нашем ARM926EJ-S Java программы. Пока что смотрим на "Open Mika". Никто не подскажет хороша/плоха?
  19. И Flash тоже перепишут. Посылается TCP пакет (или фрагмент более высокого протокола), который вызывает переполнение стека, в следствии чего запускется фрагмент кода из уже убитого стека. Разработка такого мероприятия "с нуля" - достаточно муторное мероприятие. Но в этой степи работают уже много лет и есть серьезные наработки. По "стилистике" ответов определяют тип используемого стека. Конкретные опции - экспериментально. В целом, задача не "для маленьких", но это лишь вопрос желания. P.S. От дальнейших подробностей - воздержусь : )
  20. Тоже столкнулся с этой проблемой. Но более успешно. www.logicpd.com является изготовителем этого eXperimenter's Kit. у них же на сайте после короткой регистрации можно вытянуть почти все документы. Архив - в приложении. TMDSEXPL138_B_HW_Design_Files.zip
  21. Добрый день всем. Ситуация такова: У меня есть стороняя библиотека. Она нормально линкуется с моей программой. Теперь мне нужно заставить линкер расположить одну функцию из этой библиотеки в другой секции. Как это сделать? т.е. к примеру, в библиотеке 15 ф-ций. мне надо, что бы функия foo_5 была расположена не там, где все остальные.
  22. Хочу сказать, что для вытеснения задачи должны быть причины. Если причин нет, то и вытеснения не будет. Виндовс даст время всем процессам в системе. Другие ОС - совсем не факт. Да. Так и есть. Почти. Виндовос не является RTOS по той причине, что часть событий регистрируется флагами, а не счетчиками. Поэтому узнать сколько именно событий прошло - не получиться. Причина таких решений в том, что никто не знает сколько задач будет запущено пользователем. Если, скажем, запущено 20 задач и каждая просит по 10% времени, то сделать что-либо - сложно. По этой причине приоритеты виртуализированы. Система проритетов Windows - гибка и адаптивна. Алгоритм учитывает приоритеты задач, профиль производительности, тип ОС (сервер/рабочая станция), активно ли приложение и еще много чего. Алгоритм меняется от версии к версии Win и установленного SP. По названным причинам нет возможности установить прямую связь между приоритетом задач(и) и процессорным временем. Да.
  23. Вы как-то так ставите задачу, что ответа на нее не найти. Что вам, собственно, надо сделать? Вам надо, что бы sheduler насильно заставил уснуть готовую и активную задачу? Нет. Win такого не сделает. Готова - работай. Нужен квант времени - используй таймеры. Гарантировать то, что Ваша программа получит управление строго по истечении времени Win не сможет. Равно как и не сможет гарантировать непрерывность работы в течении какого-то времени. Ну, если не полезете в драйвера, конечно. Там сможете многое. Но с вашей постановкой задачи виндовс перестанет быть самим собой. Скажем так: CLI в виндовс - моветон. Из этого вытекает все. Ну... почти все. P.S. Добавил: А вообще ответ на ваш вопрос либо - "однозначно ДА" в том смысле, что Win позволяет работать и задачам с высоким приоритетом и низким одновременно. - "однозначно НЕТ" в том смысле, что никто не выключит готовую и активную задачу если есть свободное время.
  24. Добрый день всем. FreeRTOS (7.1.0) Что-то не пойму как вообще работает FreeRTOS... Делаем следующее: Запускаем таск и делаем в нем vTaskDelay Получаем цепочку вызовов: vTaskDelay -> prvAddCurrentTaskToDelayedList -> vListInsert vTaskDelay: vListRemove( ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); prvAddCurrentTaskToDelayedList( xTimeToWake ); prvAddCurrentTaskToDelayedList: vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) ); vListInsert: pxNewListItem->pxNext = pxIterator->pxNext; pxNewListItem->pxNext->pxPrevious = ( volatile xListItem * ) pxNewListItem; pxNewListItem->pxPrevious = pxIterator; pxIterator->pxNext = ( volatile xListItem * ) pxNewListItem; pxNewListItem->pvContainer = ( void * ) pxList; vListInsert не изменяет поле Owner у элемента Далее приходит нужный тик от таймера и срабатывает макро prvCheckDelayedTasks if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) // Список не пуст pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); // Поле Owner не заполнено xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xGenericListItem ) ); // Гуляем где-то... Получаем: Поле Owner у нас не заполнено. Приводим случайные данные к указателю и ходим по случайным адресам. Я что-то упустил?