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

Krys

Свой
  • Постов

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

  • Посещение

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


  1. Учитывая, что сигнал чисто вещественный, то спектр в отрицательной области будет комплексно-сопряжённым, следовательно при использовании полноценного БПФ для комплексных входных сигналов половина отсчётов будет избыточна. Избыточны и ресурсы на её расчёт. Для расчёта спектра чисто вещественных сигналов используются особые модификации БПФ. Если не путаю DCT (дискретное косинус-преобразование). Короче гуглить надо, но смысл есть. Поискал у себя - чего-то с ходу не нашёл. Кажется припоминаю, что об этом всём должно быть во многих основополагающих книжках того же Лайноса, Рабинера с Голдом, Оппенгейма и т.п. Теория то давно придумана и задокументирована в букварях, велосипед изобретать не надо. Просто почитать самые канонические буквари. Добавлю. При реализации на ПЛИС иногда удобнее пользоваться формулой с тремя умножениями и 5 сложениями, т.к. DSP-блоков меньше съедается. Сама формула есть в датащите на дсп-блок от спартана6.
  2. Но возникнет ошибочка (еле заметная правда). Сдвиг даёт изменение на 2^N, а максимальный множитель может быть только 2^N - 1. Т.е. ошибка будет на один шаг квантования. В системах с обратными связями (типа адаптивные) это приведёт к расходимости алгоритма.
  3. Чистая, ультимэйт, но взломанная. Не сборка новомодная. Главное на ней раньше работало. Потом некоторое время не симулил, затем запустил - и на тебе. Больше не удалось уговорить.
  4. Здравствуйте. Столкнулся с нестыковками и нелогичностями отображения некоторых примитивов: потерялся инвертор, который видно на Planahead Schematic, но не видно на Planahead Device View. Имеется такой кусок кода: // pipeline register inside of adder block (* use_dsp48 = "yes" *) reg signed [sUM_DATA_BW-1 : 0] din_i_pp_int, din_q_pp_int; reg din_valid_pp; // register to time align with internal data pipeline above // result of adder (* use_dsp48 = "yes" *) reg signed [sUM_DATA_BW-1 : 0] sum_i_acc, sum_q_acc; always @(posedge clk) begin din_i_pp_int <= {{DBF_BW_INCR{din_i[DIN_BW-1]}}, din_i}; din_q_pp_int <= {{DBF_BW_INCR{din_q[DIN_BW-1]}}, din_q}; din_valid_pp <= din_axis_tvalid; end // accumulator with reset always @(posedge clk) begin if(!din_valid_pp) begin sum_i_acc <= 0; sum_q_acc <= 0; end else begin sum_i_acc <= sum_i_acc + din_i_pp_int; sum_q_acc <= sum_q_acc + din_q_pp_int; end end Мне стало интересно, догадается ли среда сделать красиво сброс выходного регистра DSP-блока. Я посмотрел после PAR результат в Planahead, отобразив схему цепи RSTP (куда в случае красивой реализации среда должна была подать мой сброс): Да, среда догадалась, это хорошо. Но затем мне стало интересно, что это мы видим за инвертор и чисто физически на чём он реализован. Т.е. я предполагал, что инвертор может быть реализован либо на LUT, либо как отдельный инвертирующий выход триггера-источника сигнала. Но ни то, ни другое я на данной схеме выше не увидел, а увидел просто инвертор в чистом виде. Я захотел его увидеть на Device View, что это за зверь, что это за аппаратный примитив. И не увидел: На этом рисунке белым выделена та же цепь din_valid_pp_inv с выхода инвертора. Т.е. видно, что источника сигнала не видно, т.е. не видно, где же этот инвертор. Я пробовал на схеме выделять и сам инвертор, на Device View делал приблизить выделенное - ничего не происходило. Тогда я подключил тяжёлую артиллерию (FPGA Editor). Посмотрел список цепей, цепь din_valid_pp_inv там вообще отсутствует, есть только цепь до инвертора: din_valid_pp. Решил отобразить её на экране: Видно, что эта цепь заходит сразу в оба DSP напрямую. А где же инвертор? Коллега подсказал открыть внутренности DSP-блока. И что же мы видим? Этот инвертор там внутри и красуется: Вот и получается нестыковочка: Planahead показывает, что существует цепь din_valid_pp_inv, она снаружи DSP-блока, существует отдельный инвертор, снаружи DSP-блока. А по факту и то, и то - это уже внутри DSP-блока. При том в документации на DSP-блок нет никаких упоминаний про этот инвертор (пройдитесь поиском по RSTP). Кто может объяснить: есть ли в таком расхождении какая-то умышленная логика, мол, так правильнее? Или это банальное раздолбайство Xilinx?
  5. Пока мои старания остановились на том, что я поставил чистый 9.3 из последней версии, включающей SP1, но SP1 не ставил. Крякнул прилагаемым к этому дистрибутиву кряком (их там 2), в котором надо подменить кучу файлов: avhdl.exe ccviewer.exe project.dll rmcl.dll rmcldiag.dll scripter.dll tbpviewer.exe tcviewer.exe VSIMSA.dll При этом ничего не крашится, даже на стартовом лого пишет, что это 9.3SP1. Но SP1 я не ставил. В О программе тоже пишет, что это 9.3SP1.
  6. Вот это я имел в виду. Если конкретно по картинке из первого поста, то допустим полосовой сигнал занимает половину всей возможной полосы, т.е. четверть частоты дискретизации. Так вот хорошо нелинейный интерполятор даст интермодуляционные компоненты, залезшие прямо в эту полосу полосового сигнала. А линейный интерполятор даст компоненты, лежащие в других зонах Найквиста (зоны до интерполяции), но не в полосе полосового сигнала. Тут я либо что-то недопонял, либо несогласен )) Согласно моего абзаца выше нелинейные искажения могут дать интермодуляции прямо в полосе полосового сигнала.
  7. Да завал - это линейные искажения, я их даже за искажения не считаю )) Я имел в виду под портить наличие интермодуляционных компонентов прямо в полосе сигнала. Т.е. берём для чистоты эксперимента чистую синусоиду, а лучше несколько рядом, пропускаем их через хорошо нелинейный интерполятор, получаем кучу лишних палок прямо внутри полосы сигнала (не говоря уж о палках за полосой). При этом при линейной интерполяции лишних палок нет внутри полосы сигнала, только за полосой. Большое спасибо, что разъясняете.
  8. Да уже 10 раз переустановил, результат один. Забыл сказать: винда 7 ултимате 64 бита (крякнутая). Сейчас ещё попробовал предыдущую версию поставить, без SP1. Первый запуск делается нормально. Но после окончания мастеров по созданию чистого проекта с нуля - опять крашится. И так постоянно. Понятно, что дело в моей винде в чём-то. Но в чём?... Не хочется всю винду с нуля переустанавливать только из-за этого альдека...
  9. Спасибо, надо будет попробовать на досуге, сейчас времени маловато. Это же мой личный интерес, не курсовая и не основное задание по работе )) К стати: при линейной интерполяции в полосе полезного сигнала вообще нет нелинейных искажений, правильно? Т.е. линейная интерполяция ничего в полосе не портит, только за полосой. А вот трапеция видимо наделает компонентов внутри полосы, их оттуда потом ничем не уберёшь, разве что заранее внести соответствующие предыскажения в генерируемый сигнал по типу DPD, это возможно. Да это просто удобное отображение. Можете их заменить просто обычным плотом, ничего не поменяется.
  10. Aldec Active HDL крашится при запуске после показа стартового лого. Версия 9.3SP1, качано с закромов, крякано прилагаемым лекарством. Т.е. сразу после установки не могу запустить. Никто не сталкивался? Что можно покопать?
  11. Это то я понимал с самого начала, поэтому отмёл эту идею сразу, даже без попыток отмоделировать. Это ув. ViKo предлагал добавлять шум ко входу и выходу. Спасибо, вот это мысль в нужном направлении. То, что сигнал будет искажён - нестрашно, он и так даже от линейной интерполяции нехило искажается )) Это тоже понятно. Мне просто понравился общий подход: чтобы палка не мешала, её надо размазать. Общая мощность ошибки увеличится, но её плотность будет мала, SFDR будет лучше.
  12. Вы что, преподаватель? )) Уже в 2х темах спрашиваете ))) - вы что, больной??? - нет... а вы что, доктор? (с)
  13. Всем спасибо за подсказки. ЗЫ: это не курсовая и не дипломная, стар я для них уже ))) так... желание изобрести велосипед с минимумом ресурсов и с приемлемыми характеристиками.
  14. Спасибо, лазил там с самого начала, но ничего не нашёл. Проблема усложняется ещё и тем, что у меня разные графики выведены как plot(MX, MY), где MX, MY - это матрицы, в которых отдельные кривые расположены по столбцам.
  15. Дайте пожалуйста ссылки на описанный Вами простой способ параболической интерполяции с простыми коэффициентами. И что-нибудь про оптимизированные half-band фильтры, которые на распределённой арифметике можно сделать. Заранее спасибо.
  16. Понял, спасибо. Значит по задержке разницы быть не должно.
  17. Ну по идее должно быть лучше, так что буду иметь в виду и такой способ. Не проблема, в прикреплении. А то действительно щас особо некогда всё подряд пробовать, извиняюсь. Если у Вас есть интерес, желание и время, то спасибо за участие.lin_interp_test.rar
  18. Ну раз уж фильтр ставить, то зачем же ещё шумов добавлять ))) Тогда уж не нужны ни шумы, ни линейная интерполяция
  19. Полоса либо половина возможной, либо четверть, но не меньше. Спасибо, убедили. Пожалуй, способ сгодится. ------------ Ещё думал какой-нибудь вариант, на основе того, который выше предлагал Maverick, когда ищем изменение знака производной, считаем эти места макушками синусоид, подменяем их табличными значениями. А между макушками делаем как и раньше линейную интерполяцию. Это какая-то каша из топора получается. Фильтр нельзя из-за отсутствия ресурса. Но если добавить шум, а потом пропустить через фильтр - то так можно ))) Ресурс то на фильтр не возьмётся.
  20. Ну я где-то выше уже расписывал. Типа на линейную интерполяцию не требуется умножитель вообще, только аккумулятор (сумматор) с постоянным инкрементом. А на несколько каскадов CIC требуются много сумматоров. Затем будет требоваться корректирующий КИХ-фильтр на умножителях. да зачем?... и так же понятно, что просто горизонтальная шумовая полка поднимется у всего спектра. Через какой фильтр? Дак это ж на графике написано, что относительная ))
  21. ну это не так просто. Я надеялся, что есть какие-то команды прям в окне типа bring to front / send to back. Т.е. гуишные, для простого смертного юзера, без шаманства с указателями.
  22. Вот один в один моя тема, но ответа толком не было: http://matlab.exponenta.ru/forum/viewtopic...343&p=73629 Хотелось бы найти элементы управления (галочки, пункты меню), с помощью которых кликаниями мыши можно поменять порядок кривых прямо в окошке уже построенного графика.
  23. С единичными - это же скользящее среднее?
×
×
  • Создать...