Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поддержание постоянной скорости вывода данных при переменной скорости ввода
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
drum1987
Доброго времени суток.

При реализации демодулятора столкнулся с проблемой того, что размер выходного буфера изменяется(в зависимости от разности тактовых частот приемника и передатчика) и не равен размеру входного. Сейчас сделал так: большой буфер в который циклически пишется столько отсчетов сколько приходит с демодулятора, а считывается всегда фиксированное число(равное размеру буфера вывода на устройство индикации). Проблема в том, что при тактовой частоте передатчика большей чем у приемника записывается всегда больше чем считывается и запись "догоняет" чтение на второй круг и начинается шлейф ошибок...

Ткните пожалуйста на то как люди делают в мире rolleyes.gif
Andron_
это из разряда загадок "впихнуть невпихуемое"?
drum1987
Цитата(Andron_ @ Mar 16 2010, 17:10) *
это из разряда загадок "впихнуть невпихуемое"?

Цель не как вы говорите "впихнуть невпихуемое", а минимизировать блочные ошибки...ясен пень что избежать их не получится(конечно если нет безконечного буфера laughing.gif )

Хочется узнать как это реализовывали люди, которые с такой проблемой сталкивались.
des00
Цитата(drum1987 @ Mar 16 2010, 04:03) *
Проблема в том, что при тактовой частоте передатчика большей чем у приемника записывается всегда больше чем считывается и запись "догоняет" чтение на второй круг и начинается шлейф ошибок...

вам нужен цифровой или аналоговый гаситель джиттера %)
fontp
Цитата(drum1987 @ Mar 16 2010, 13:03) *
Проблема в том, что при тактовой частоте передатчика большей чем у приемника записывается всегда больше чем считывается и запись "догоняет" чтение на второй круг и начинается шлейф ошибок...


Считывайте всегда на немного повышеной скорости (на максимальной для ввода). Тогда данных будет всегда только немного не хватать, вставите там что-нибудь rolleyes.gif
В противном случае нужно строить "джиттер-буффер" и подстраивать частоту
RCray
а по какому принципу здесь строится джиттер буфер? чем он отличается от приведённой здесь буферизации?
fontp
Цитата(RCray @ Apr 12 2010, 17:21) *
а по какому принципу здесь строится джиттер буфер? чем он отличается от приведённой здесь буферизации?


здесь это где? и что здесь приведено?

Джиттер буфер строится с подстройкой частоты - в аналоговом случае нужно подстраивать частоту АЦП так, чтобы добиться постоянного заполнения буфера (например наполовину) , а в цифровом варианте нужно делать ресамплинг. В любом случае нужно выравнивать частоты приемника и передатчика. Система автоподстройки.

Просто вставлять интерполированые значения - это ещё не есть джиттер буфер. Но часто так и делают и это как-то работает. Если не контролировать расстройку частоты, то и интерполяция возможна только кривая - повтором по ближайшему соседу.
des00
Цитата(fontp @ Apr 12 2010, 09:03) *
Джиттер буфер строится с подстройкой частоты - в аналоговом случае нужно подстраивать частоту АЦП так, чтобы добиться постоянного заполнения буфера (например наполовину) , а в цифровом варианте нужно делать ресамплинг. В любом случае нужно выравнивать частоты приемника и передатчика. Система автоподстройки.

хмм, что то мне подсказывает что трогать тактовую АЦП для гасителя джиттера уже принятого сигнала совершенно не обязательно, ведь восстановление тактовой уже произошло(данные цифровые).

2 RCray
как делается в цифре посмотрите на интеловские микросхемы для синхронных каналов, в аналоге проще. Буфер удерживаемый в середине, сторона записи на грязном клоке, сторона чтения на чистом. Ошибка указателей идет в петлю подстройки ГУНа чистого клока. Для стандартных синхронных каналов петля делается узкой (10 - 20Гц). Достоинства таких приемников широкая петля захвата тактовой (в цифре) + малый джиттер выходных данных %)

Но все эти методы по сути переводят джиттер в вандер. Тут главное в маски по джиттеру уложиться %)
DMax
Цитата(drum1987 @ Mar 16 2010, 13:18) *
Доброго времени суток.

При реализации демодулятора столкнулся с проблемой того, что размер выходного буфера изменяется(в зависимости от разности тактовых частот приемника и передатчика) и не равен размеру входного. Сейчас сделал так: большой буфер в который циклически пишется столько отсчетов сколько приходит с демодулятора, а считывается всегда фиксированное число(равное размеру буфера вывода на устройство индикации). Проблема в том, что при тактовой частоте передатчика большей чем у приемника записывается всегда больше чем считывается и запись "догоняет" чтение на второй круг и начинается шлейф ошибок...

Ткните пожалуйста на то как люди делают в мире rolleyes.gif


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

В принцыпе так я и сделал. Спасибо за ответ.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.