|
|
  |
Поддержание постоянной скорости вывода данных при переменной скорости ввода, как реализовать? |
|
|
|
Mar 16 2010, 10:24
|

Местный
  
Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323

|
Цитата(Andron_ @ Mar 16 2010, 17:10)  это из разряда загадок "впихнуть невпихуемое"? Цель не как вы говорите "впихнуть невпихуемое", а минимизировать блочные ошибки...ясен пень что избежать их не получится(конечно если нет безконечного буфера  ) Хочется узнать как это реализовывали люди, которые с такой проблемой сталкивались.
|
|
|
|
|
Apr 13 2010, 01:36
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(fontp @ Apr 12 2010, 09:03)  Джиттер буфер строится с подстройкой частоты - в аналоговом случае нужно подстраивать частоту АЦП так, чтобы добиться постоянного заполнения буфера (например наполовину) , а в цифровом варианте нужно делать ресамплинг. В любом случае нужно выравнивать частоты приемника и передатчика. Система автоподстройки. хмм, что то мне подсказывает что трогать тактовую АЦП для гасителя джиттера уже принятого сигнала совершенно не обязательно, ведь восстановление тактовой уже произошло(данные цифровые). 2 RCray как делается в цифре посмотрите на интеловские микросхемы для синхронных каналов, в аналоге проще. Буфер удерживаемый в середине, сторона записи на грязном клоке, сторона чтения на чистом. Ошибка указателей идет в петлю подстройки ГУНа чистого клока. Для стандартных синхронных каналов петля делается узкой (10 - 20Гц). Достоинства таких приемников широкая петля захвата тактовой (в цифре) + малый джиттер выходных данных %) Но все эти методы по сути переводят джиттер в вандер. Тут главное в маски по джиттеру уложиться %)
--------------------
|
|
|
|
|
Apr 19 2010, 09:34
|
Частый гость
 
Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234

|
Цитата(drum1987 @ Mar 16 2010, 13:18)  Доброго времени суток. При реализации демодулятора столкнулся с проблемой того, что размер выходного буфера изменяется(в зависимости от разности тактовых частот приемника и передатчика) и не равен размеру входного. Сейчас сделал так: большой буфер в который циклически пишется столько отсчетов сколько приходит с демодулятора, а считывается всегда фиксированное число(равное размеру буфера вывода на устройство индикации). Проблема в том, что при тактовой частоте передатчика большей чем у приемника записывается всегда больше чем считывается и запись "догоняет" чтение на второй круг и начинается шлейф ошибок... Ткните пожалуйста на то как люди делают в мире  Делайте событийно-ориентированную систему: выходной буфер - объект, генерирующий событие "полон на половину", а то, что вычитывает из выходного буфера, ожидает это событие. Конкретная реализация уже зависит от того, какое окружение у вашей программы - здесь могу быть как глобальные флаги в качестве событий, если у вас нет операционки, а могут быть разные нити и какие-то синхронизационные примитивы (кондвары и мутексы, например), если у вас есть операционка. Правда, скорость вывода будет не постоянной, а по мере накопления. Постоянную скорость вывода здесь не сделать по определению.
|
|
|
|
|
May 4 2010, 08:54
|

Местный
  
Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323

|
Цитата(DMax @ Apr 19 2010, 16:34)  Делайте событийно-ориентированную систему: выходной буфер - объект, генерирующий событие "полон на половину", а то, что вычитывает из выходного буфера, ожидает это событие. Конкретная реализация уже зависит от того, какое окружение у вашей программы - здесь могу быть как глобальные флаги в качестве событий, если у вас нет операционки, а могут быть разные нити и какие-то синхронизационные примитивы (кондвары и мутексы, например), если у вас есть операционка. Правда, скорость вывода будет не постоянной, а по мере накопления. Постоянную скорость вывода здесь не сделать по определению. В принцыпе так я и сделал. Спасибо за ответ.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|