Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Оцифровка 40 MSPS 2 канала, затем - алгоритм Герцеля
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
kt368
Здравствуйте!
С ПЛИС только начинаю работать, до этого чуть-чуть пробовал "писать" на VHDL.
Есть задача: за 1 мксек оцифровать с частотой семплирования 40МГц два аналоговых сигнала (т.е. 40 точек на сигнал), за следующие несколько микросекунд (до десяти) над полученными массивами провести преобразование Герцеля для определения амплитуды и фазы 1-ой гармоники, затем сравнить амплитуду и фазу отношения первой гармоники первого сигнала к первой гармонике второго сигнала с заранее заданными константами и принять несложное решение. Параллельно в ПЛИС будет крутиться подобие ядра DDS, собственно частота его выходного сигнала и будет определяться результатом сравнения (предыдущее предложение). Реально ли такое сделать (и насколько сложно)? ПЛИС, наверное, будет определяться в зависимости от того сколько ЛУТов для этого всего потребуется, но пока думаю над XC6SLX9-3TQG144C.
Заранее спасибо.
litv
реально, несложно(from my point of view), а вместо герцеля прямо fft.
eugen_pcad_ru
Может быть я чего то не понял, но алгоритм Герцеля вроде бы не дает информации о фазе. Я не прав?
Не проще ли реализовать фильтр Гильберта для обоих сигналов и вычислить разницу фаз? А для оценки амплитуд FFT? Информация о сигналах есть? Это синусоиды?
kt368
Так Герцеля вроде-бы быстрее должен быть при малом количестве частотных компонент на выходе. И ещё насколько будет сложно подключить к этой ПЛИС память, чтобы в неё можно было сохранить 10 МБ данных, которые потом неспешно будут передаваться в ПК? Например, память IS42S16400J-7TL? Вообще, для таких целей (учитывая мои слабые познания в ПЛИС) наверно имеет смысл использовать SDRAM? А АЦП подобрал примерно такой: AD9629BCPZ-40, драйвер АЦП - ADA4938-1. ЦАП (для DDS) - AD9760ARUZ50. Они оба с параллельной шиной. Тактовую хочу брать с отдельной микросхемы-генератора с низким джиттером, а на ПЛИС, ЦАП и АЦП подавать через Fanout Buffer NB3L553DG. Будет это все в связке работать?
Судя по википедии алгоритм Герцеля дает информацию и о фазе. Сигналы....ну синусоиды, с шумком, вернее пачки синусоид с колоколоподобной огибающей (для уменьшения ширины спектра, приближения спектра к одной "палочке"). Известны частоты сигналов. Про фильтр Гилберта пошёл читать, было в универе что-то про преобразование Гильберта, надо вспоминать...
ivan219
С помощью вот этого http://www.dsplib.ru/content/goertzel/goertzel.html алготитма Герцеля можно и фазу и амплитуду узнать.

Вся проблема Герцеля в том что он сам является генератором и если на его основе что то делать то надо в серьёзе подойти к точности вычислений. Внутри алгоритма. В противном случает частота входного сигнала и частота измеренного сигнала могут не совпадать.
На его же основе можно сделать и DDS я этот вариант на Циклоне 3 продумывал так там с 45 бит. шиной на умножение скорость была в районе 60 МГц шаг в алгоритме 1 кГц точность по частоте 0.01 Гц.
Мне нужно было 80 МГц по этому я эту идею бросил и решил попробовать классический ДПФ и DDS из библиоткеи.
Для вас думаю в пол не подойдёт.
kt368
Цитата(ivan219 @ Oct 8 2012, 10:15) *
...На его же основе можно сделать и DDS...
На основе алгоритма Герцеля?
Timmy
В случае FPGA удобнее просто скалярно умножить входную последовательность на комплексный вектор из тех же 40 точек. Так можно получить нормальную точность на стандартном 18 битовом перемножителе, а с рекурсивным Герцелем придётся извращаться с умножениями. Кроме того, можно ещё непрямоугольное окно наложить, если надо. SDRAM лучше взять DDR, с 8 битной шиной данных, так как Spartan 6 имеет встроенный MCB, который поддерживает DDR SDRAM, а вот SDR - не поддерживает.
_pv
Цитата(kt368 @ Oct 8 2012, 13:20) *
На основе алгоритма Герцеля?

ну алгоритм Герцеля это просто обычный интеграл Фурье для заданной частоты, только прямое вычисление синуса заменено на цифровой осциллятор
TRILLER
Цитата(litv @ Oct 8 2012, 10:21) *
реально, несложно(from my point of view), а вместо герцеля прямо fft.

Полностью согласен. И на счёт FFT тоже. Герцеля пидётся ручками делать, а это ненужные сложности. FFT же стандартный, и его скорости хватит с головой - зачем усложнять?
kt368
Цитата(Timmy @ Oct 8 2012, 11:38) *
В случае FPGA удобнее просто скалярно умножить входную последовательность на комплексный вектор из тех же 40 точек. Так можно получить нормальную точность на стандартном 18 битовом перемножителе, а с рекурсивным Герцелем придётся извращаться с умножениями. Кроме того, можно ещё непрямоугольное окно наложить, если надо. SDRAM лучше взять DDR, с 8 битной шиной данных, так как Spartan 6 имеет встроенный MCB, который поддерживает DDR SDRAM, а вот SDR - не поддерживает.

А про умножение "скалярно умножить входную последовательность на комплексный вектор" это что имеется в виду? Это используется в FFT? Не понял...
Спасибо за совет, возьму память W9412G6JH-5I.

Цитата(TRILLER @ Oct 8 2012, 11:52) *
Полностью согласен. И на счёт FFT тоже. Герцеля пидётся ручками длеать, а это ненужные сложности. FFT же стандартный, и его скорости хватит с головой - зачем усложнять?

В общем по ходу разберусь, наверно всё-таки не буду трогать Герцеля.

З.Ы. Чувствую, будет очень много вопросов (и касательно проектирования этого устройства, и касательно конфигурирования ПЛИС), буду их наверное где-то здесь спрашивать.
kt368
Да, и ещё: Если обмен АЦП, ЦАП и ПЛИС будут тактироваться от внешнего генератора через Fanout Buffer, можно ли в ПЛИС задействовать что-то типа PLL, чтобы внутренние рассчёты производились на скорости повыше, чем Fclk АЦП/ЦАП, а обмен данными с АЦП/ЦАП был на Fclk АЦП/ЦАП?
Timmy
Цитата(kt368 @ Oct 8 2012, 13:31) *
А про умножение "скалярно умножить входную последовательность на комплексный вектор" это что имеется в виду? Это используется в FFT? Не понял...
Спасибо за совет, возьму память W9412G6JH-5I.

Если скалярно умножить кусок входного сигнала на кусок комплексной синусоиды нужной частоты, то получится как раз один бин DFT, с амплитудой и фазой, Герцель делает тоже самое меньшим числом умножений, однако требователен к точности.
Вы моделировали свой алгоритм в каком-нибудь Матлабе? А то возможны неприятные сюрпризы.

Если не нужна пропускная способность шины памяти в 800мегабайт/сек. , то лучше взять восьмибитную, развести будет проще, да и свободные пины на FPGA могут внезапно закончиться, это только кажется, что их много.
Использовать PLL в FPGA для умножения внутренней частоты - это святое.
kt368
Блин, у Spartan-6 Memory Controller Block присутствует только у микросхем в БГА исполнении...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.