Перейти к содержанию
    

komah

Участник
  • Постов

    45
  • Зарегистрирован

  • Посещение

Репутация

4 Обычный

Информация о komah

  • Звание
    Участник
    Участник

Информация

  • Город
    Array

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. В LTE и Wimax используется SFBC - space–frequency block code. На первую антенну символы идут без изменений. На вторую - с перестановкой. K. Fazel and S. Kaiser, Multi-Carrier and Spread Spectrum Systems Second Edition
  2. А какой нужен диапазон, чтобы не было разрывов? И что переполнилось в первом разрыве на первом рисунке?
  3. На первом графике могут быть разрывы, обусловленные тремя причинами: 1. Некорректным преобразованием 7-bit signed в 8-bit signed 2. Пропуском отсчетов при считывании из буфера 3. Периодичностью арктангенса. Они явно видны. Если смущают циферки на вертикальной оси - не надо на них смотреть. Первые две причины победил ТС. Третью победил unwrap.
  4. Убирает разрывы на графике полной фазы, возникающие из-за того, что арктангенс возвращает значения в диапазоне от -Pi до Pi. Разность мгновенных фаз между соседними отсчетами не должна превышать Pi, если она больше - добавляется или вычитается 2Pi. В данном случае (детектор ЧМ) целиком восстанавливать полную фазу не нужно, достаточно скорректировать разность фаз.
  5. Отвечу за ТС 😉 Да, прокатит. Там ЧМ с непрерывной фазой.
  6. Если стартовый бит - низкий уровень (0), то проблем никаких. Преамбула дает 1 на выходе RxD, подключенное устройство ждет стартового бита, пока его нет - никакие биты не считает. 11 бит - это, очевидно, без преамбулы. 5 и более преамбул вида FF - это ведь больше 11?
  7. Если фильтр реализован правильно, то новых спектральных составляющих он добавлять не должен. Думаю, дело не в нем. Код на Си, можно просто просто проверить на ПК, с модельным сигналом. Самый главный вопрос - соотношение между частотой сигнала и частотой дискретизации. Ну и посмотреть, нет ли ограничения при оцифровке - амплитуда слишком большая, опорное напряжение неправильное...
  8. Это модуляция или все-таки сумма двух сигналов, один из которых с очень низкой частотой? Если частота сигнала Fs на входе АЦП превышает Fd/2, цифровой фильтр уже не поможет. Если сигнал узкополосный (чистый синус), то его можно и с меньшей, чем Fs*2 частотой оцифровывать (вторая зона Найквиста и т.д.). Но если частота сигнала близка к Fd, то разностная частота попадет в первую зону и соответственно в спектр. КИХ фильтр это ФНЧ? Вот он эту частоту и приподнял.
  9. Там уже и деления никакого нет. Информация об амплитуде отсутствует, делить на 1 не имеет смысла. Фазовый сдвиг за счет разности времени прохождения сигнала на частоте манипуляции явно меньше погрешности взятия отсчетов в получившейся схеме. Можно сразу битовые потоки суммировать. Главное, в нечетном количестве.
  10. Так-то не должны быть больше. Главное, чтобы динамического диапазона хватало. А это про мягкие решения для многоуровневой PAM. Весь диапазон выходных напряжений синхронизатора нужно разделить на области, соответствующие принятым символам. И нормировать значение относительно размера этих областей. Но если символ соответствует двум и более битам, а декодеру нужно мягкое решение для каждого бита, придется подумать.
  11. Это про нормировку: Мягкие решения для (G)FSK2 - это амплитуда на выходе синхронизатора. Если нужны целочисленные - умножьте на максимальное значение и округлите.
  12. 1. Амплитуду входного сигнала для синхронизатора к 1 подтяните. Я писал, как правильно нормировать. 2. Попробуйте оценить, сколько в среднем отсчетов на бит приходится. Может, там не целое число. Просто поделите число полученных отсчетов на число бит в пакете. 3. В настройках синхронизатора loop bandwidth я бы для начала в 0,0001 поставил.
  13. Сомнительная информация. GNU Radio генерит скрипт на питоне на основе блок-схемы. Но сами библиотеки в основном на с++. Код открыт и естественно его можно использовать. Но это не самый простой вариант, особенно для переноса на слабое железо. Зачастую выгоднее просто разобраться с алгоритмом (посмотрев его в том же GNU Radio) и реализовать уже на основе своих базовых элементов. Насчет фильтров - в Матлабе есть инструмент для их расчета. Можно им пользоваться, если характеристика фильтра предполагается неизменной. Просто скопировать оттуда коэффициенты в код на Си. Не знаю, какого качества там HDL, думаю примерно как Cи. То есть, посмотреть и забыть. Хотя, понемногу система совершенствуется, в языке уже вполне себе типизация данных появилась.
  14. Выше petrov уже в основном ответил, добавлю от себя Я разделил схему на два интерполятора. Задача первого - из имеющихся, например, 12,5 отсчета на символ, получить целое число, например, 4. Без привязки к моменту тактирования. Второй интерполятор уже должен вычислить значение между отсчетами в оптимальный момент. Мне так удобнее, но в общем это не лучший вариант и я даже знаю, почему. До первого интерполятора. Если у него на входе 1,2 отсчета на символ, делать из них 10 не имеет смысла. С мгновенной частотой. Еще точнее, с сигналом PAM с выхода частотного дискриминатора. Там еще несколько статей в продолжение - конкретные варианты TED рассматриваются. С двумя - это алгоритм на основе максимума правдоподобия. Теоретически, наверное, оптимальный. Для определенных условий. В статье нарисована глазковая диаграмма. Наша задача - взять отсчет в точке максимального раскрытия этого глаза. И это не зависит от вида модуляции. Не применяя схем по стабилизации тактовой, мы к концу пакета (а может и раньше) уползем на границу между символами. Если при оптимальной синхронизации и почти без шумов в вашем сумматоре накапливается значение около 12, то сместившись на 6 отсчетов мы рискуем получить 0. Как насчет помех? Кстати, декодируя на глаз, тактовую тоже приходится восстанавливать. И у вас это делается - по переходам через 0. out = (1.0-alpha)*out + alpha*current_sample; alpha обычно 0,0001..0,001 Ну, коэффициент децимаиции 8,3 : 1. Я хотел обратить внимание, что синхронизатор может выдавать отсчеты асинхронно, главное, чтобы количество было правильным. Визуальные перепады, как и пик импульса, не всегда легко найти алгоритмически. К глазам нейронка более мощная подключена. Лучше какой-нибудь готовой библиотекой пользоваться. Например, liquid-dsp.
  15. Вот хорошее начало: https://wirelesspi.com/phase-locked-loop-pll-for-symbol-timing-recovery/ Без восстановления тактовой все остальное не имеет смысла. А в учебниках про это пишут мало и неправильно. А можно записать сигнал передатчика свистком (RTL-SDR) и демодулировать полностью. И сравнивать не только программные реализации, но и условно железную (в трансивере).
×
×
  • Создать...