Jump to content

    

Zalman_

Участник
  • Content Count

    32
  • Joined

  • Last visited

Everything posted by Zalman_


  1. Доброго времени суток Добрался до того, что вы скинули В архиве два файла atan2.vhd Trigonometric_Function1.vhd 1) Открыв оба файла в описании atan2.vhd написано, что "atan2 не корректен по предварительной подготовке входных данных" и лучше брать Trigonometric_Function1.vhd. Немного поковырявшись понял, что видимо генерируемый код из Simulink в файле atan2.vhd криво данные подтягивает, поэтому Вы делали свои файлы с входными данным *.dat и писали тестбенч, который все это оптимально загружает. Верна ли моя догадка? P.S. В самом низу писал про enport. Связано ли "atan2 не корректен по предварительной подготовке входных данных" с портом enport? Исходя из этого и просмотра кода, файл atan2.vhd является посредником перед основным модулем Trigonometric_Function1.vhd, который просто подготавливает данные для отправки в Trigonometric_Function1.vhd. Правильно ли я понимаю, что atan2.vhd не является необходимым и им можно пренебречь, тем самым использовать в качестве основного ядра atan2 файл Trigonometric_Function1.vhd ? 2) Запустил параллельно модель и решил посмотреть, что сделает Simulink в плане генерации кода Он сгенерил такие же два файла, то есть понял откуда ноги растут Попытался смоделировать Ваш код ModelSim сначала ругался, однако, для корректной компиляции нужно было скомпилировать два файла тестбенча, а файлы atan2.vhd и Trigonometric_Function1.vhd поместить в папку, которую создает ModelSim, то есть work. Поместил, компиляция прошла успешно, однако, при попытке симуляции вылезла ошибка следующего вида "Error: (vsim-3173) Entity '*ATAN2/work.atan2' has no architecture." Как ее можно исправить? В VHDL не силен, лишь могу прочитать и то довольно примерно. Почему не смоделировать код на Verilog и пользоваться? - Потому что как понял, в Вашем коде задержка составляет 3 такта, вместо 14 тактов, которые есть в коде, который создает Simulink. 3) И есть немного вопросов по модели и коду одновременно. Порт enport. Какую функцию он выполняет? В модели он выполняет функцию тактирующего сигнала для задержек, а вот что делает в коде? Исходя из кода он является разрешающим и судя по коду на порт clk и enport должен приходить один и тот же тактовый сигнал, так как если enport будет тактироваться иначе, то передача данных в Trigonometric_Function1.vhd будет некорректной Правильно ли понимаю данный момент? Заранее спасибо!
  2. Пока что просто глазом пробежался Даже не запускал В ближайшее время отпишусь, как запущу Спасибо за помощь и предоставленные исходники кода и модели
  3. Спасибо, буду иметь ввиду
  4. Спасибо, обдумаю этот момент
  5. Видел эту статью Насколько понял из статьи она генерирует синус и косинус, то есть это классический CORDIC в качестве DDS синтезатора, а вот функцию atan2 не вычисляет
  6. Спасибо за рекомендацию, попробую еще какие-нибудь варианты теста корки Сегодня весь день этим занимался Результат был следующим В тестбенче корки уже генерируются рандомные значения, что упрощает работу с ним и вот расскажу как это было Примем, что на вход подаются два значение x = 0.11, а у = -0.38, тогда atan2 = -1.29 (все в радианах) В случае Verilog и SystemVerilog есть функция $atan2, которая позволяет посчитать значения и она выдает такой же результат, то есть -1.29 Ядро же выдает значения фазы, которые довольно сильно (на мой взгляд отстают от эталонного), вместо -1.29 выдает результат в районе -1.77 и т.д., то есть значения пляшут +- 0.5 Не знаю, возможно это нормально, но мне кажется, это большой погрешностью, но может быть ошибаюсь Буду дальше копаться с ним, однако, все равно вопрос остался открытым
  7. Добрый вечер! Есть задача в реализации atan2 в ПЛИС Ранние темы на форуме видел (пробовал варианты кода, которые были прикреплены) Также пробовал варианты с OpenCores Они работают, но неизвестно правильно или нет (некоторым вариантам реализации уже больше 5 лет, а с автором нет возможности связаться, так как он не заходил больше 2 лет) В связи с этим вопрос Есть ли какие-то реализации atan2 на Verilog на примете, которые можете кинуть и с автором которого можно проконсулироваться по работе корки?
  8. Про SRRC понял, спасибо Да, я заметил, что во всех моделях есть тот самый переход на 2 и 1 sps, однако не понимал, что и где копать То есть по факту тактирование детектора Гарднера и тактирование интерполятора должно быть в одном clock domain, то есть в 2sps. Понятно, что на выходе интерполятора будет 2sps, а вот откуда и зачем нам нужен 1sps? Хорошо, спасибо, буду искать
  9. Добрый вечер! Копаюсь с Вашей моделью Мне непонятны следующие моменты (я новичок в этой тематике и многих вещей еще не знаю) 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 точки находятся. Я не знаю, что скрывается за этой проблемой, так как не делая свою модель, а используя Вашу как эталон, получаю отрицательный результат даже казалось бы в настолько правильно сделанной модели. Можете объяснить где я ошибаюсь и что не до конца понимаю в этом всем?
  10. Вопрос, а можете сказать как тема называется или же ссылку дать? Буду очень признателен (над неработающей STS сижу уже не первый день)
  11. Выскажу небольшое предположение Возможно вся система работает некорректно по причине того, что используемый детектор Гарднера работает на скорости 2 выборки на символ, а SRRC на модуляторе и демодуляторе выдают 10 выборок на символ Может ли быть в этом проблема или нет, как думаете?
  12. Хорошо, я делал это все на версии 20a Для какой версии сохранять?
  13. Опишу проблему Как понятно из заголовка пытаюсь сделать символьную синхронизацию для 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 фильтра Фарроу наблюдается картина как на скриншоте ниже
  14. Добавив CIC и FIR после гетеродинирования проблема оставалась (то есть сигнал на входе будет по форме такой же, только с меньшей частотой дискретизации и если поставить компенсирующий, то ВЧ составляющая уйдет) В процессе я понял, что изначально фильтр в модуляторе на нужной мне частоте подавлял эту частоту на 120 дб)) (мой косяк и невнимательность) Исправлю и посмотрю что будет Да, как раз систему ФАПЧ я накидал, однако мне не нравилось то, что выходило из SRRC на демодуляторе, поэтому ее отложил на потом, потому что разобраться с фильтром более важная задача Не разбираюсь, а пытаюсь сделать то, что было описано в теории Не получилось так как должно - написал сюда Вот
  15. Добрый день, столкнулся с такой проблемой. Делаю демодулятор QPSK на FPGA Есть QPSK модулятор и соответственно QPSK демодулятор. В модуляторе используется SRRC, что автоматически добавляет такой же SRRC на сторону приемника. В процессе модуляции все происходит корректно и передается на приемник. Замечу, что так как проект сделан на ПЛИС (на данный момент только в коде, то как таковой задержки в чем-либо между модулятором и демодулятором нет). Также отмечу, что SRRC, NCO и частоты идентичны друг другу. По идее, на приемной стороне с выхода SRRC на синфазной и на квадратурной составляющей я должен видеть примерно ту же "картину", что и на выходе SRRC, который стоит в модуляторе. Однако при идентичности параметров и фильтров на приемной стороне SRRC выдает специфичный сигнал, который вроде бы и похож, но тем не менее не соответствует сигналу, получаемому из SRRC в модуляторе. Скрин приложил Скрин из программы ModelSim На скрине входы и выходы SRRC на I и Q в модуляторе и демодуляторе.