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

Zalman_

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

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

  • Посещение

Весь контент Zalman_


  1. Видел эту статью Насколько понял из статьи она генерирует синус и косинус, то есть это классический CORDIC в качестве DDS синтезатора, а вот функцию atan2 не вычисляет
  2. Спасибо за рекомендацию, попробую еще какие-нибудь варианты теста корки Сегодня весь день этим занимался Результат был следующим В тестбенче корки уже генерируются рандомные значения, что упрощает работу с ним и вот расскажу как это было Примем, что на вход подаются два значение x = 0.11, а у = -0.38, тогда atan2 = -1.29 (все в радианах) В случае Verilog и SystemVerilog есть функция $atan2, которая позволяет посчитать значения и она выдает такой же результат, то есть -1.29 Ядро же выдает значения фазы, которые довольно сильно (на мой взгляд отстают от эталонного), вместо -1.29 выдает результат в районе -1.77 и т.д., то есть значения пляшут +- 0.5 Не знаю, возможно это нормально, но мне кажется, это большой погрешностью, но может быть ошибаюсь Буду дальше копаться с ним, однако, все равно вопрос остался открытым
  3. Добрый вечер! Есть задача в реализации atan2 в ПЛИС Ранние темы на форуме видел (пробовал варианты кода, которые были прикреплены) Также пробовал варианты с OpenCores Они работают, но неизвестно правильно или нет (некоторым вариантам реализации уже больше 5 лет, а с автором нет возможности связаться, так как он не заходил больше 2 лет) В связи с этим вопрос Есть ли какие-то реализации atan2 на Verilog на примете, которые можете кинуть и с автором которого можно проконсулироваться по работе корки?
  4. Про SRRC понял, спасибо Да, я заметил, что во всех моделях есть тот самый переход на 2 и 1 sps, однако не понимал, что и где копать То есть по факту тактирование детектора Гарднера и тактирование интерполятора должно быть в одном clock domain, то есть в 2sps. Понятно, что на выходе интерполятора будет 2sps, а вот откуда и зачем нам нужен 1sps? Хорошо, спасибо, буду искать
  5. Добрый вечер! Копаюсь с Вашей моделью Мне непонятны следующие моменты (я новичок в этой тематике и многих вещей еще не знаю) 1) У Вас модулятор создает 8PSK, затем в канале перед АБГШ стоит downsample (в нем значение 2) и по факту из 8PSK делаете QPSK. Зачем так делать и что это дает? 2) В модуляторе SRRC имеет значение wc = 1/4, а в приемнике стоит wc = 1/2. Понятно, что тот самый блок downsample снизил значение sps в 2 раза и теперь вместо 4 sps у вас 2sps, но зачем так было сделано? Знаю, что SRRC на передающей и приемной стороне должны быть идентичны, но у Вас они различны. Можете объяснить ? 3) Рассматривая систему STS есть - Interpolator, TED, Loop Filter, Interpolation Control. Мне непонятно вот что, что конкретно нужно крутить и менять, чтобы адаптировать систему под свою задачу, то есть если я в лоб выставлю значения 4sps (на обеих SRRC) и уберу блок downsample (чтобы значение sps было неизменным в канале), а также в NCO поменяю значение константы у блока Math Function (операция mod) на 4, то ничего не работает, хотя больше в модели ничего не меняю. Сразу отвечу на вопрос по поводу Loop Filter, в нем я тоже пытался крутить параметры, а результат все равно был отрицательным. Под отрицательным результатом я понимаю следующее. В процессе работы Вашей модели я вижу 4 точки для QPSK, но через время происходит рассинхронизация и эти точки превращаются в мешанину, после чего проходит какой-то интервал времени и вновь эти 4 точки находятся. Я не знаю, что скрывается за этой проблемой, так как не делая свою модель, а используя Вашу как эталон, получаю отрицательный результат даже казалось бы в настолько правильно сделанной модели. Можете объяснить где я ошибаюсь и что не до конца понимаю в этом всем?
  6. Вопрос, а можете сказать как тема называется или же ссылку дать? Буду очень признателен (над неработающей STS сижу уже не первый день)
  7. Выскажу небольшое предположение Возможно вся система работает некорректно по причине того, что используемый детектор Гарднера работает на скорости 2 выборки на символ, а SRRC на модуляторе и демодуляторе выдают 10 выборок на символ Может ли быть в этом проблема или нет, как думаете?
  8. Хорошо, я делал это все на версии 20a Для какой версии сохранять?
  9. Опишу проблему Как понятно из заголовка пытаюсь сделать символьную синхронизацию для QPSK системы Основываясь на информации из книги "Michael Rice - Digital Communications: A Discrete-Time Approach", символьную синхронизацию делал по принципу: 1) Interpolator - Piecewise структура фильтра Фарроу 2) Timing Error Detector - Детектор Гарднера 3) Loop Filter 4) Interpolation Control - структура "Modulo-1 Counter" В чем проблема ? Проблема в том, что система символьной синхронизации одновременно работает и нет, то есть периодически повторяется следующий процесс: 1) Система находит оптимальный момент выборки (максимального раскрытия глазка) 2) Система теряет оптимальный момент выборки На осциллограмме input и output фильтра Фарроу наблюдается картина как на скриншоте ниже
  10. Добавив CIC и FIR после гетеродинирования проблема оставалась (то есть сигнал на входе будет по форме такой же, только с меньшей частотой дискретизации и если поставить компенсирующий, то ВЧ составляющая уйдет) В процессе я понял, что изначально фильтр в модуляторе на нужной мне частоте подавлял эту частоту на 120 дб)) (мой косяк и невнимательность) Исправлю и посмотрю что будет Да, как раз систему ФАПЧ я накидал, однако мне не нравилось то, что выходило из SRRC на демодуляторе, поэтому ее отложил на потом, потому что разобраться с фильтром более важная задача Не разбираюсь, а пытаюсь сделать то, что было описано в теории Не получилось так как должно - написал сюда Вот
  11. Добрый день, столкнулся с такой проблемой. Делаю демодулятор QPSK на FPGA Есть QPSK модулятор и соответственно QPSK демодулятор. В модуляторе используется SRRC, что автоматически добавляет такой же SRRC на сторону приемника. В процессе модуляции все происходит корректно и передается на приемник. Замечу, что так как проект сделан на ПЛИС (на данный момент только в коде, то как таковой задержки в чем-либо между модулятором и демодулятором нет). Также отмечу, что SRRC, NCO и частоты идентичны друг другу. По идее, на приемной стороне с выхода SRRC на синфазной и на квадратурной составляющей я должен видеть примерно ту же "картину", что и на выходе SRRC, который стоит в модуляторе. Однако при идентичности параметров и фильтров на приемной стороне SRRC выдает специфичный сигнал, который вроде бы и похож, но тем не менее не соответствует сигналу, получаемому из SRRC в модуляторе. Скрин приложил Скрин из программы ModelSim На скрине входы и выходы SRRC на I и Q в модуляторе и демодуляторе.
  12. Да, написал на входе FIR 12'heff Благодарю за помощь и совет И назрел вопрос Имеет ли смысл так сильно гнаться за ядрами фильтров, если можно сделать фильтр в том же MATLAB?
  13. Да, вы по всей видимости были правы с моей ошибкой в "битности" выходной шины Вот так выглядит ИХ при полной разрядности в 33 бита Тогда напрашивается соответствующий вопрос Где можно найти информацию о том, как не допускать таких ошибок в дальнейшем? Точнее как правильно обрезать ненужные биты. 33 бита это хорошо, однако много на мой взгляд
  14. Попробовал данный вариант. Вот ИХ, которую отображается в ядре FIR II При моделировании в ModelSim получил следующее Видно, что вершина ИХ "инвертируется" Вот с другого "ракурса" в MATLAB К вопросу о "Но если у вас на выходе ломовые шумы без сигнала на входе - то фильтр у вас уже не работает." Как видно из ModelSim при отсутствии сигнала на входе, выходной сигнал равен 0
  15. И да и нет При загрузке коэффициентов построение АЧХ, ФЧХ и ИХ действительно происходит, однако с АЧХ есть некоторый "фокус". При проектировании фильтра в MATLAB я указываю, что "FIR filter cutoff frequency in Hz (4e6 as default): 1.2e6", однако, рассматривая АЧХ фильтра в IP ядре частота среза увеличивается в 2 раза. Вашу идею с связкой NCO-FIR сейчас тестирую (пока что результат отрицательный и на выходе нет явного пика на частоте в 1 МГц, хотя судя по АЧХ она там явно должна быть). Спасибо за идею, попробую. По результатам напишу
  16. Данная связка: 1) компилируется в Quartus без проблем 2) ModelSim моделирует без проблем 3) при анализе спектра в MATLAB (ModelSim записывает в .txt файл выходные значения сигналов с выхода NCO, CIC, FIR) FIR фильтр работает не так, как должен В железо не заливал даже Это скорее "тестовый стенд" для того, чтобы попытаться понять почему у меня не работает FIR фильтр и как сделать так, чтобы он работал Этот стенд никогда не попадет в железку)
  17. Согласно документации на FIR II сигнал reset_n имеет активный ноль. То есть у меня FIR (как и CIC) находятся в состоянии сброса до тех пор, пока NCO не начнет генерировать сигнал. Насколько я понимаю, так фильтр и должен работать. Причем отмечу то, что при полной разрядности в 33 бита фильтр проявляет себя лучше (то есть спектр становится лучше). НО 33 бита это слишком большая разрядность. Отвечу сразу на вопрос. Да, я делал разные варианты "битности". То есть из предлагаемых мне 33 бит, выбирал отдельные куски (как в сторону LSB, так и в сторону MSB). То, что я написал в самом начале (LSB = 9 MSB = 10 ) оказалось субъективно наиболее оптимальным вариантом.
×
×
  • Создать...