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

Оцифровка 40 MSPS 2 канала, затем - алгоритм Герцеля

Здравствуйте!

С ПЛИС только начинаю работать, до этого чуть-чуть пробовал "писать" на VHDL.

Есть задача: за 1 мксек оцифровать с частотой семплирования 40МГц два аналоговых сигнала (т.е. 40 точек на сигнал), за следующие несколько микросекунд (до десяти) над полученными массивами провести преобразование Герцеля для определения амплитуды и фазы 1-ой гармоники, затем сравнить амплитуду и фазу отношения первой гармоники первого сигнала к первой гармонике второго сигнала с заранее заданными константами и принять несложное решение. Параллельно в ПЛИС будет крутиться подобие ядра DDS, собственно частота его выходного сигнала и будет определяться результатом сравнения (предыдущее предложение). Реально ли такое сделать (и насколько сложно)? ПЛИС, наверное, будет определяться в зависимости от того сколько ЛУТов для этого всего потребуется, но пока думаю над XC6SLX9-3TQG144C.

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть я чего то не понял, но алгоритм Герцеля вроде бы не дает информации о фазе. Я не прав?

Не проще ли реализовать фильтр Гильберта для обоих сигналов и вычислить разницу фаз? А для оценки амплитуд FFT? Информация о сигналах есть? Это синусоиды?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так Герцеля вроде-бы быстрее должен быть при малом количестве частотных компонент на выходе. И ещё насколько будет сложно подключить к этой ПЛИС память, чтобы в неё можно было сохранить 10 МБ данных, которые потом неспешно будут передаваться в ПК? Например, память IS42S16400J-7TL? Вообще, для таких целей (учитывая мои слабые познания в ПЛИС) наверно имеет смысл использовать SDRAM? А АЦП подобрал примерно такой: AD9629BCPZ-40, драйвер АЦП - ADA4938-1. ЦАП (для DDS) - AD9760ARUZ50. Они оба с параллельной шиной. Тактовую хочу брать с отдельной микросхемы-генератора с низким джиттером, а на ПЛИС, ЦАП и АЦП подавать через Fanout Buffer NB3L553DG. Будет это все в связке работать?

Судя по википедии алгоритм Герцеля дает информацию и о фазе. Сигналы....ну синусоиды, с шумком, вернее пачки синусоид с колоколоподобной огибающей (для уменьшения ширины спектра, приближения спектра к одной "палочке"). Известны частоты сигналов. Про фильтр Гилберта пошёл читать, было в универе что-то про преобразование Гильберта, надо вспоминать...

Изменено пользователем kt368

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С помощью вот этого http://www.dsplib.ru/content/goertzel/goertzel.html алготитма Герцеля можно и фазу и амплитуду узнать.

 

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

На его же основе можно сделать и DDS я этот вариант на Циклоне 3 продумывал так там с 45 бит. шиной на умножение скорость была в районе 60 МГц шаг в алгоритме 1 кГц точность по частоте 0.01 Гц.

Мне нужно было 80 МГц по этому я эту идею бросил и решил попробовать классический ДПФ и DDS из библиоткеи.

Для вас думаю в пол не подойдёт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В случае FPGA удобнее просто скалярно умножить входную последовательность на комплексный вектор из тех же 40 точек. Так можно получить нормальную точность на стандартном 18 битовом перемножителе, а с рекурсивным Герцелем придётся извращаться с умножениями. Кроме того, можно ещё непрямоугольное окно наложить, если надо. SDRAM лучше взять DDR, с 8 битной шиной данных, так как Spartan 6 имеет встроенный MCB, который поддерживает DDR SDRAM, а вот SDR - не поддерживает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На основе алгоритма Герцеля?

ну алгоритм Герцеля это просто обычный интеграл Фурье для заданной частоты, только прямое вычисление синуса заменено на цифровой осциллятор

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

реально, несложно(from my point of view), а вместо герцеля прямо fft.

Полностью согласен. И на счёт FFT тоже. Герцеля пидётся ручками делать, а это ненужные сложности. FFT же стандартный, и его скорости хватит с головой - зачем усложнять?

Изменено пользователем TRILLER

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В случае FPGA удобнее просто скалярно умножить входную последовательность на комплексный вектор из тех же 40 точек. Так можно получить нормальную точность на стандартном 18 битовом перемножителе, а с рекурсивным Герцелем придётся извращаться с умножениями. Кроме того, можно ещё непрямоугольное окно наложить, если надо. SDRAM лучше взять DDR, с 8 битной шиной данных, так как Spartan 6 имеет встроенный MCB, который поддерживает DDR SDRAM, а вот SDR - не поддерживает.

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

Спасибо за совет, возьму память W9412G6JH-5I.

 

Полностью согласен. И на счёт FFT тоже. Герцеля пидётся ручками длеать, а это ненужные сложности. FFT же стандартный, и его скорости хватит с головой - зачем усложнять?

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

 

З.Ы. Чувствую, будет очень много вопросов (и касательно проектирования этого устройства, и касательно конфигурирования ПЛИС), буду их наверное где-то здесь спрашивать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, и ещё: Если обмен АЦП, ЦАП и ПЛИС будут тактироваться от внешнего генератора через Fanout Buffer, можно ли в ПЛИС задействовать что-то типа PLL, чтобы внутренние рассчёты производились на скорости повыше, чем Fclk АЦП/ЦАП, а обмен данными с АЦП/ЦАП был на Fclk АЦП/ЦАП?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо за совет, возьму память W9412G6JH-5I.

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

Вы моделировали свой алгоритм в каком-нибудь Матлабе? А то возможны неприятные сюрпризы.

 

Если не нужна пропускная способность шины памяти в 800мегабайт/сек. , то лучше взять восьмибитную, развести будет проще, да и свободные пины на FPGA могут внезапно закончиться, это только кажется, что их много.

Использовать PLL в FPGA для умножения внутренней частоты - это святое.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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