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

rloc

Модератор
  • Постов

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

  • Победитель дней

    12

Сообщения, опубликованные rloc


  1. Это понятно, т.е. для моего случая 18+18+log2(64)=42 (Nданные+Nкоэфф+log2(Ntaps)). Меня эта цифра - вполне. Но вот дальше мне надо преобразовать аккумулятор опять в 16 бит. Как правильно это сделать ? Сдвигать придёться ?

     

    Ещё вы писали:

    "поэтому если Вы хотите сохранить этот коэффициент, нужно после фильтра поделить данные на ту же константу (операция называется scale). Проще всего, как Вы правильно заметили, это можно сделать если домножать и делить на 2^N."

    Т.е., как я понял, в конце придёться сдвинуть акк на N (в моём случае 15)., т.к. домножил коэффициенты на 2^15, ну и отсчёты тоже какбы домножены на 2^15 ?

    Если необходим переменный scale, то нужно сдвигать или мультиплексировать (как кому удобнее). Если scale фиксированный, то проще взять с аккумулятора нужные разряды, а какие именно сейчас попробую объяснить.

    Допустим Вы домножали свои коэффициенты на 2^N, и после такого домножения получилось, что коэффициенты вписались в 16-разрядную сетку. Предположим, что входные данные - 18 бит, выходные - 20 бит (я специально взял разное количество разрядов). Тогда после умножителя необходимо брать 18+16 разрядов и подавать на аккумулятор разрядностью 18+16+log2(64)=18+16+6=40 (нужную разрядность получаем дополнением). С выхода этого аккумулятора необходимо снимать разряды с 16+(N-16)-(20-18) по 16+(N-16)+18-1.

    Если быть более точным, то дополнительная разрядность аккумулятора должна быть не log2(64), а N-16 (не стоит забывать, что я предполагал коэффициент усиления фильтра, полученный в Матлабе или какой-либо другой программе, равным 1).

    Напоследок напоминаю, что данные необходимо округлять, а не отсекать.

  2. У меня так: АЦП - 16 бит, знаковый, т.е. амплитуда - +-2^15 допустим +-0.5В. Значит и коэффициенты домнажаю на 2^15. Умножители у меня 18x18 SPARTAN3, т.е. результат умножения - 36 бит, по-этому всем данным и коэфф. нужно сделать RESIZE (Vhdl). Скольлько битным выбрать аккумулятор, чтоб переполнения не было ? Или скайлинг всёравно придёться делать ? Вопрос: после каждого умножения, чтоб переполнения аккумулятора не было ? Или достаточно после каждого суммирования ?

    И последнее - на скока скайлинг делать сдвиг вправо на 15 ? shift_right(acc,15) ?

    Ну если Вы только определяетесь с разрядностью аккумулятора, то разрядность коэффициентов желательно брать не меньше разрядности данных. В лучшем случае аккумулятор нужно брать разрядностью не менее Nданные+Nкоэфф+log2(Ntaps), Ntaps - порядок фильтра (соответственно с умножителя брать Nданные+Nкоэфф разрядов). После каждого суммирования ничего округлять или отсекать не надо. Если хотите немного сократить разрядность аккумулятора, то можно с умножителя брать немного меньше разрядов, например в самом худшем случае Nвыход+log2(Ntaps) разрядов.

  3. Спасибо за подсказку, всеравно горит серым цветом. В общем откопал решение проблеммы у них на сайте - оказывается эти корки доступны только для Virtex 2. На сайте они рекомендуют скомпить для Virtex 2, потом поставить нужный камень. Странно, зачем так мудрить...

    Очень давно делали эти ядра и с тех пор ничего не меняли. Так что на чем проверяли, на то и осталась совместимость, для всего остального - на свой страх и риск.

  4. Имею на входе АЦП 16-битные отсчёты, которае нужно пропустить через FIR. Как подобрать величину коэфф., чтоб фильтр не улетал в насыщение? Например, в маслабе получаю типа: 0.01, 0.3, 0.018 и т.д. Так как их согласовать с моими входными отсчётами. Не на 2^15 домножать ?

    Как правило все FIR'ры в FPGA работают с целочисленной арифметикой, так что домножать Вам все равно придется. Для получения максимального динамического диапазона, нужно умножить на такую константу, чтобы максимальный по модулю коэффициент точно вписался в разрядную сетку. При расчете в Матлабе, общий коэффициент усиления фильтра получается равным 1, поэтому если Вы хотите сохранить этот коэффициент, нужно после фильтра поделить данные на ту же константу (операция называется scale). Проще всего, как Вы правильно заметили, это можно сделать если домножать и делить на 2^N.

  5. Доброго времени суток!

    Поставил себе ISE9.2i. Пытаюсь сгенерить корки DDC и CIC, но в среде не могу их найти. Может кто подскажет как их запустить? В папке где корки лежат они есть + описания на них, да и на сайте сказано что они в 9.2 входят.

    В CORE Generator выберете сверху в меню Show->All Versions incl. Obsolete

    Далее:

    Digital Signal Processing->Filters или Modulation

  6. Вроде логично, спасибо!

     

    Еще один вопрос по GC4016. В даташите они пишут, что при 16разрядных входных словах они один канал используют для ввода разрядов от других трех каналов, т.е полезных канала всего три. А входная внутренняя шина говорят 19бит. Откуда такие сложности? Получается, что я не смогк подключить четыре 16битных АЦП? Придется жертовать разрядами, т.е. от 16ти брать 14?

    Просто выводов не хватило для четвертого 16-битного канала. Переходите на GC5016, там вроде таких проблем нет.

  7. Вы случайно не в курсе, зачем при настройке CIC секции в GC4016 управлением усиления занимается сразу несколько параметров - SHIFT, SCALE, BIG_SCALE? Зачем аж три параметра?, почему недостаточно одного?

    Не могу точно утверждать, попробую объяснить как я это понимаю. Обратимся к структуре GC4016 (привожу только левую половинку):

    post-1462-1192528452_thumb.jpg

    SHIFT - этот параметр для целочисленных входных данных нужен в очень редких случаях, он остался от блока, который из данных с плавающей точкой делал целочисленные данные (12 бит мантисса + 3 бит экспонента -> 20 бит целое число). Его назначение - когда при очень большом коэффициенте децимации наступает переполнение разрядной сетки, с помощью SHIFT можно немного уменьшить входную 20 битную разрядность, слегка пожертвовав динамическим диапазоном, для остального большинства случаев TI рекомендует брать MUX20B=1 и SHIFT=4. Этот параметр работает до того как данные подаются на CIC-фильтр.

    SCALE+6*BIG_SCALE - эти два параметра в основном определяют масштаб. На мой взгляд TI допустила небольшую ошибку - они сделали масштабирование до фильтра, в результате им приходиться выполнять эту операцию с тактовой частотой. Если посчитать суммарный диапазон изменения масштаба, то он будет равен 5+6*7=47 бит. Сделать такой огромный сдвиг с помощью одного мультиплексора им оказалось очень сложно, поэтому они решили разбить его на два последовательных.

  8. Если ставить 2 FIR последовательно где нужно ставить дециматор или его делать прямо внутри FIR'ов? И как их нужно правильно рассчитывать? Кстати ширина полосы - 200Гц - довольно узкая.

    Дециматор конечно внутри самого FIR'a находится, сам принцип его таков, что порядок помимо тактовой частоты зависит еще от отношения входной и выходной частоты. Иначе порядок определялся бы отношением тактовой и входной/выходной частот.

    Вот для полосы 200Гц смысл в CIC есть и самый прямой. Суммарный порядок получается очень большой (может быть несколько тысяч) и по объему выгоднее поставить один CIC, чем несколько каскадно соединенных FIR'ов. Надо точно подсчитать какой коэффициент децимации для него выбрать и сколько стадий взять (по опыту должно немного получиться). К какой литературе обратиться сейчас к сожалению не могу сказать, не помню.

  9. Нужен алгоритм быстрой свертки(желательно подробный). Если кто то опишет или даст линк, я буду только благодарен :)

    Свертка во-временнОй области соответствует умножению спектров базиса Фурье в частотной. Спектры быстро вычисляюЦЦо через FFT. Вот Вам и метод.

    Позвольте поинтересоваться, а какой длительности сигнал нужно сворачивать? Может со сжатием в частотной области поспешили? Точно знаю, что фирма Intel в своих библиотеках MKL перед сверткой определяет длительность и в зависимости от этого уже сворачивает. Исходные данные даны не полностью, а задачку уже решаете.

  10. Дискретизация в 50Мгц выбрана для несущего сигнала 1Мгц.

    Более высокая частота дискретизации в данном случае будет выгодна, только тогда, когда собственные шумы квантования АЦП в полосе Найквиста будут больше чем шумы предварительного усилителя в полосе ФАПЧ (200Гц). Тогда за счет сужения полосы мы повысим динамику за счет уменьшения шумов квантования АЦП (получится практически аналог Сигма-Дельта АЦП).

    Говоря про векторный анализатор цепей, я намекал на то, чтобы от системы ФАПЧ с ее очень сложным расчетом устойчивости, перейти на схему, когда DDS постоянно свипирует в некотором диапазоне частот, а после АЦП векторно детектируется (делится на квадратуры) и анализируется. Причем диапазон свипирования выбирается в зависимости от того, что мы делаем: либо осуществляем поиск, либо следим за резонансом.

  11. Сам недавно делал QPSK демодулятор на основе DDC, и пришел к выводу что при низких коэффициентах децимации плохо держится символьная синхронизация (почему стало понятно потом :) ), возможно из за этого он специально ограничен снизу. Я использовал микросхемы Intersil HSP50110 и HSP50210. Там никаких ограничений нет, но в документации не рекомендуют использовать децимацию ниже 10. Не следует считать это абсолютной истиной, я в цифровой обработке недавно и могу ошибаться. Возможно есть еще причины.

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

    В GC4016 ситуация немного лучше - CIC фильтр с 5 стадиями, в нем могли бы сделать чуть меньше минимальный коэффициент децимации. У них ограничения в первую очередь из-за внутренней структуры - на двух последних ступенях используются 2 FIR фильтра с фиксированным коэффициентом децимации 2 (как известно, при таком коэффициенте очень сильно упрощается FIR фильтр и уменьшается размер, для GC4016 это особенно актуально для его 4 DDC).

  12. Резонанс каждого объекта имеет разброс в широком диапазоне частот от 30КГц до 1Мгц.

    ...

    Ширина полосы изменения резонансной частоты не более 50-100Гц.

    В общем выбрал следующую схему: АЦП работает на частоте 50Мгц

    Есть вопросы:

    1) 30КГц - 1Мгц - это абсолютные частоты или отстройка от некоторой несущей?

    2) Если это абсолютные частоты, то зачем частоту дискретизации брать 50МГц?

    Я смотрю, Вы в другой ветке уже вовсю пытаетесь решить непростую задачу - сделать DDC на FPGA. Хочется попытаться понять, к чему такие сложности. Там в DDC Вы пытались сделать полосу 2МГц, но зачем, когда сами пишите, что диапазон изменения резонанса - 50-100Гц, т.е. для ФАПЧ Вам нужна полоса ~200Гц. Ваша задача очень напоминает измерительный прибор под названием Vector Network Analyzer, поищите в интернете по этим ключевым словам и найдете очень много полезной информации. Советую начать искать с www.agilent.com - они очень любят писать всякие фундаментальные статьи.

  13. Если фильтр нужен симметричный, то никакого CIC для такого порядка не надо, для Virtex-4 или -5 все решается "в лоб" - 2 блока памяти и 3 DSP48 + немного логики.

    У меня спартан 3, поколение Virtex для меня дороговато. так что особо ресурсами похвастаться немогу.

    А насчет того, нужна ли мне симметриная ИХ, скорее все равно, если только тут нет каких то скрытых камней.

    Ставьте два FIR'а последовательно, и то меньше будут чем этот CIC. CIC выгодно использовать, когда коэффициент децимации нужен большой и полоса узкая (не Ваш случай). Коэффициент децимации для CIC придется брать наверное 10 и количество стадий >5, но скорей всего вообще использовать нельзя (слишком большое внеполосное подавление и полоса широкая). Посмотрите по даташиту, сколько ресурсов на это уйдет.

    По поводу симметрии - в большинстве случаев используются симметричные фильтры и подводных камней не вижу.

  14. В первую очередь хочу принести извенения, два последних файлика, что я прикреплял

    encode_8b10b_xst.zip

    decode_8b10b_xst.zip

    - это всего лишь Behavioral (Simulation) модели. В RTL варианте они также построены на блочной памяти.

     

    Я так понял на первый взгляд что приемопередатчик сделан на базе RocketIO? Просто мне для ASI интерфейса нужен только приемник. Там непрерывный транспортный поток MPEG2. Поэтому хотелось бы без использования RocketIO. Мне кажется я намучаюсь с его настройкой. Или я не прав?

    Есть просто xapp514, там показано как они делают ASI. Так вот там два варианта: один из них на RocketIO. Так вот мне кажется что этот вариант посложнее, хотя может быть лучше.

    На RocketIO конечно проще, да и скорости могут быть мультигигабитными. Но если делать на Spartan'е, то вариант только один - на внутренней логике. Разницы в качестве работы между двумя вариантами - никакой. Из даташита на 1Gb Ethernet PCS (физический уровень) написано:

    Famaly With TBI Using RocketIO

    Virtex-5 Supported Supported

    Virtex-4 Supported Supported

    Virtex-II Pro Supported Supported

    Virtex-II Supported Not supported

    Spartan-3 Supported Not supported

    Spartan-3E Supported Not supported

    Spartan-3A Supported Not supported

    Т.е. для семейств Virtex-II Pro, Virtex-4, Virtex-5 можно использовать оба варианта, для остальных - только один (TBI - Ten-Bit-Interface) со внешним сериалайзером-десериалайзером.

  15. Благодарю. Декодер 8B/10B я сгенерировал в CoreGenerator. А остальное гляну.

    В том ядре, что я давал, он лучше, сделан на блочной памяти: маленький и быстрый. Да и потом корегенератор Вам исходников не дает, ограничивая в совместимости и гибкости использования. Сравните с тем, что Вы взяли:

    encode_8b10b_xst.zip

    decode_8b10b_xst.zip

    Еще один глупый вопрос. Что со скачаным файлом делать. Просто удалить .rar? А что это получится за файл?

    Останется файл с расширением .7z (архиватор 7zip, к сожалению такое расширение не прикрепляется)

  16. Назрела необходимость приобретения в контору современного, удобного в использовании, ВЧ осциллографа с полосой пропускания 300-500 МГц, небольшим временем нарастания и неравномерностью ПХ + с устойчивой синхронизацией во всей полосе частот, и всяческими вкусными удобностями (вывод частоты, амплитуды в цифре; маркеры).

     

    Бюджет – 1500-1900 у.е

     

    Цифра, аналог, микс – что лучше?

    Кто с чем работает?

     

    Если что-то мерить, то цифра конечно лучше. Но за такие деньги - это невозможно, даже среди китайских/корейских вариантов. Нечто более скромное уже обсуждали здесь.

  17. В общем задача такая:

    АЦП работатет со сверхдискретизацией на 50Мгц, полоса сигнала от 30Кгц до 1Мгц, внутри FPGA нужно перемножить sin/cos c DDS на входной сигнал(частота с DDS такая же как и сигнал, только фаза разная). В Фазе заключена полезная информация. Мой не большой опыт подсказывает что сигнал нужно отфильтровать, затем проредить до 2Мгц. После перемножения с DDS снова отфильтровать, убрав двойную частоту. Может быть "пнёте" в нужном направлении как такую задачу можно решить более безболезненно?

    Синтезил в Матлабе - порядок 506, думаю для такой задачи главное линейная фаза в полосе пропускания. Ачх - как у обычного FIR, главное чтобы подавление на 2w частоте было не менее 87Дб, иначе смысла в сверхдискретизации нет. Что касается неравномерности, тут я пока оценить немогу.

     

    Если фильтр нужен симметричный, то никакого CIC для такого порядка не надо, для Virtex-4 или -5 все решается "в лоб" - 2 блока памяти и 3 DSP48 + немного логики.

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

    Посмотрите, как Xilinx делает 1Gb Ethernet, можете кодер и декодер 8b/10b взять оттуда, или все остальное. Выудил из последнего IP1 для ISE v9.2i (расширение .rar потом удалить).

     

  19. Это если один из символов в байте ошибочный. А если мы примем на один бит больше или наоборот один пропустим? А это вполне вероятно при разных частотах. Ну если на один больше это ладно - можно выкинуть и добить следующим, а если пропустим ? Куда его добивать? Или можно отследить место где пропущен?

    Похоже Вы еще не до конца разобрались. Поток, который идет с декодирующей схемы (см. Figure 6 из xapp224) нужно подавать на 10-битный сдвиговый регистр. Причем в подавляющем большинстве случаев в этот регистр нужно будет задвигать по 1 биту за такт, и иногда либо пропускать, либо задвигать сразу 2 бита за такт (надеюсь, как это делать, объяснять не надо). Как только накапливается 10 бит, подаете на вход схемы декодера 8B/10B, и получаете на выходе 8 бит. Для того, чтобы все это корректно работало, на странице 7 в разделе "Lock Requirements" подробно расписано, как частота появления ошибочного бита связана с разностью частот приемника и передатчика. Плюс прилагается еще исходный код, чтобы можно было это проверить на практике. Люблю Xilinx, всегда очень грамотно и понятно расписывают свои приложения.

  20. 1) Спектроанализатор - Agilent E4440A

    2) Векторный анализатор цепей - Agilent E5071B

    3) Осциллографы - Agilent DSO6052, Lecroy WaveRunner 6051A

    4) Измеритель иммитанса - E7-20 (конденсаторы хорошо измеряет, чего не скажешь об индуктивностях - сильно врет, иногда отрицательные значения показывает)

    5) Источники питания - GW GPC-3030D

    6) Еще источники питания - Mastech HY3005D-3 (Г... редкостное, в момент включения питания бывают большие скачки напряжения, сколько плат спалил :crying: )

    7) Тестеры APPA, Protec

     

    Все приборы, за исключением некоторых, свои функции прекрасно выполняют, претензий нет.

  21. Уважаемые знатоки! Я новичёк в реализации ЦОС на FPGA. В общем нужно сделать на FPGA ФНЧ с полосой пропускания 0,01 задерживания 0,02 с ослаблением >87Дб.

    Но при расчете получается огромный порядок. Ума не приложу, как такое можно реализовать, по стандартной схеме? Может есть какие то более рациональные подходы?

    Не подскажете, какой порядок получается для FIR'а? Дополнительно, какая форма АЧХ нужна и неравномерность?

  22. Жаль конечно, значит придется делать как в xapp224. В принципе там все ясно, но есть одно но...

    Частота тактового генератора приемника и информационного потока будут в любом случае отличаться и современем это приведет к ошибке при выделении информации. Так вот хотелось бы как то время от времени синхронизироваться с информационным потоком.

    А на что Вам код 8B/10B? Как раз для того, чтобы корректировать ошибки.

    Цитата из xapp224:

    If the received data is coded in some method such as 8b/10b, this will not be a problem, because an adequate number of transitions will exist.
  23. Входной поток со скоростью 270Мбит/с. Кодировка 8В/10В.

    Если я подам на вход DCM тактовый сигнал с частотой 270 МГц, а на вход CLKFB данные, и на выходе триггер, тактируемый CLK180, то по идее данные должны восстанавливаться и одновременно тактовый сигнал будет подстраиваться под частоту потока данных. Смоделировал в ModelSim вроде работает, но будет ли это работать в железе? И еще вопрос - как определить начало прихода данных?

    В ModelSim заложена очень упрощенная модель DCM'а. В реальности DCM - это полноценная петля ФАПЧ (точнее две ФАПЧ), имеющая как минимум фазовый детектор, интегрирующую цепочку и ГУН. Принцип работы ФАПЧ - это подстройка частоты ГУНа к частоте входного сигнала (в DCM). Так к чему будет подстраиваться частота DCM, если нет обратной связи? Возможны два варианта: либо частота DCM настроится на крайние частоты, либо DCM определит сбой и вообще отключит ГУН. Подавать на вход CLKIN поток 8B/10B также не имеет смысла т.к. в общем случае он псевдослучайный без выраженной спектральной составляющей на частоте 270M.

  24. Также желательны (но не обязательны) регулируемые усилители перед АЦП.

    Разрядность АЦП не ниже 8ми бит. лучше - больше

    FPGA этак на несколько млн. вентилей.

    Что-то в интернете немного такого находится, да и то всё не в России, и цены никто не публикует, надо отдельно запрашивать... Запросил... пока без ответа.

    Посмотрите здесь:

    http://setdsp.ru/products/instrumental/cpci/adc9km/

    http://setdsp.ru/products/instrumental/cpci/adc18k/

    Российская фирма и достаточно давно этими вещами занимается, правда сами ПЛИС не такие современные, но возможно для Ваших задач хватит.

  25. РЕШЕНО : RPM в xilinx ISE 7.1i

    .....

    Сложно все получается, плюс зависимость от версии. Попробовал сам повторить - у меня в голове все извилины переплелись. Лучше следовать документированным и описанным возможностям. :wacko:

×
×
  • Создать...