Этот пример показывает, как реализовать высокопроизводительный (Gigasamples в секунду, GSPS) канализатор для оборудования с использованием полифазы фильтров.
Высокоскоростная обработка сигналов является требованием для таких приложений, как радар, широкополосная беспроводная связь и обратная связь.
Современные АЦП способны дискретизировать сигналы со скоростью дискретизации до нескольких Гигасамплес в секунду. Но тактовые частоты для самой быстрой FPGA не дотягивают до этой частоты дискретизации. FPGA обычно работают на сотнях МГц. Подход к выполнению обработки GSPS на FPGA состоит в том, чтобы перейти от скалярной обработки к векторной обработке и обработать несколько выборок одновременно с гораздо более низкой тактовой частотой. Многие современные FPGA поддерживают JESD204B стандартный интерфейс, который принимает скалярный вход с тактовой частотой ГГц и производит вектор выборок с более низкой тактовой частотой.
В этом примере мы покажем, как спроектировать приложение обработки сигналов для пропускной способности GSPS в Simulink. Входные данные векторизированы через интерфейс JESD204B и доступны с более низкой тактовой частотой в FPGA. Модель является полифазной группой фильтров, которая состоит из фильтра и БПФ, который обрабатывает 16 выборок за раз. Метод полифазы фильтров используется для минимизации неточности БПФ из-за утечек и потерь гребня. Смотрите Спектральный Анализ Высокого Разрешения (DSP System Toolbox) для получения дополнительной информации о банке полифазных фильтров.
В первой части примера реализована полифаза фильтров с 4-контактным фильтром.
Во второй части примера используется блок Channelizer HDL Optimized, настроенный для 12-контактного фильтра. Блок Channelizer HDL Optimized использует метод полифазы фильтров.
modelname = 'PolyphaseFilterBankHDLExample_4tap';
open_system(modelname);
The InitFcn
коллбэк (свойства модели > коллбэки > InitFcn) настраивает модель. Эта модель использует БПФ с 512 точками с четырьмя фильтрами отвода для каждой полосы. Используйте dsp.Channelizer
(DSP System Toolbox) Системные object™ для генерации коэффициентов. Полифазный метод объекта Channelizer генерирует матрицу 512 на 4. Каждая строка представляет коэффициенты для каждой полосы. Коэффициенты приводятся в фиксированную точку с тем же размером слова, что и входной сигнал.
FFTLength = 512; h = dsp.Channelizer; h.NumTapsPerBand = 4; h.NumFrequencyBands = FFTLength; h.StopbandAttenuation = 60; coef =fi(polyphase(h),1,15,14,'RoundingMethod','Convergent');
Алгоритм требует 512 фильтров (по одному фильтру для каждой полосы). Для векторного входа из 16 выборок мы можем повторно использовать 16 фильтров, 32 раза.
InVect = 16; ReuseFactor = FFTLength/InVect;
Чтобы синтезировать фильтр к более высокой тактовой частоте, мы вводим умножитель и банк коэффициентов. Эти значения поясняются в разделе «Оптимизированные аппаратные факторы».
Multiplication_PipeLine = 2; CoefBank_PipeLine = 1;
Входные данные состоят из двух синусоид, 200 кГц и 250 кГц.
Чтобы визуализировать результат спектра, откройте средства просмотра спектра и запустите модель.
open_system('PolyphaseFilterBankHDLExample_4tap/FFT Spectrum Viewer/Power Spectrum viewer (FFT)'); open_system('PolyphaseFilterBankHDLExample_4tap/PFB Spectrum Viewer/Power Spectrum viewer (PFB)'); sim(modelname);
Полифаза фильтров Power Spectrum Viewer показывает улучшение спектра степени и минимизацию утечек частоты и масштабирования по сравнению с использованием только БПФ. Сравнивая два спектра и увеличивая частоту между 100 кГц и 300 кГц, можно заметить, что банк полифазных фильтров имеет меньше peaks на -40 дБ, чем классический БПФ.
Тип данных: Размер слова данных влияет как на точность результата, так и на ресурсы, используемые в оборудовании. Для этого примера мы проектируем фильтр с полной точностью. С типом входных данных fixdt(1,15,13)
, выход следующий fixdt(1,18,17)
. Абсолютные значения коэффициентов фильтра все меньше 1, поэтому данные не растут после каждого умножения, и нам нужно добавить один бит для каждого сложения. Чтобы сохранить точность в БПФ, нам нужно вырастить по одному биту для каждого этапа. Это делает умножение коэффициента twiddle больше на каждом этапе. Для многих FPGA желательно сохранить размер умножения меньше, чем 18x18. Поскольку БПФ с 512 точками имеет 9 каскадов, вход БПФ не может быть больше 11 биты. Исследуя коэффициенты фильтра, мы наблюдаем, что первые 8 двоичных цифр максимального коэффициента равны нулю, и поэтому мы можем привести коэффициенты к fixdt(1,7,14)
вместо fixdt(1,15,14)
. Также мы наблюдаем, что максимальное значение вывода блока Datype внутри банка полифазных фильтров имеет 7 ведущих нулей после двоичной точки, и поэтому мы приводим выход фильтра к fixdt(1,11,17)
вместо этого. Это сохраняет размер множителя внутри БПФ меньше, чем 18 на 18, и экономит аппаратные ресурсы.
Проект для скорости:
Блок Госконтроля: блок Госконтроля используется в Синхронном способе, чтобы произвести оборудование, которое дружественный код для блока задержки с позволяет порту.
Минимизация включения синхроимпульса: Модель настроена на генерацию HDL-кода с включенной опцией Минимизация включения синхроимпульса (В параметрах конфигурации выберите > Генерация HDL-кода > Глобальные настройки > Порты > Минимизация включения синхроимпульса). Эта опция поддерживается, когда модель является одной скоростью. Активация синхроимпульса является глобальным сигналом, который не рекомендуется для высокоскоростных проектов.
Использование блока DSP в FPGA: В порядок для отображения множителей в блок DSP в FPGA, множители должны быть конвейерными. В этом примере мы конвейерируем множители (2 задержки до и 2 задержки после) путем установки Multiplication_PipeLine = 2; Эти регистры конвейера не должны иметь сброса. Установите тип сброса «нет» для каждого конвейера (щелкните правой кнопкой по блоку Delay и выберите HDL-код > Свойства HDL-блока > Тип сброса = Нет).
Использование ПЗУ в FPGA: Блок Коэффициента внутри Банка Коэффициентов является комбинаторным блоком. В порядок для преобразования этого блока в ПЗУ добавьте регистр после блока. Длина задержки задается CoefBank_PipeLine
. Установите тип сброса для этих задержек на нет (щелкните правой кнопкой по блоку Delay и выберите HDL-код > HDL Block Свойств > Reset Type = None).
Для генерации HDL-кода для этой модели HDL Coder™ необходимо иметь лицензию примера. Используйте эту команду для генерации HDL-кода. systemname = 'Polyphase Filter Bank HDLE xample _ 4tap/Poly Phase Filter Bank'; makehdl (systemname);
Используйте эту команду, чтобы сгенерировать испытательный стенд, которая сравнивает результаты HDL-симуляции с поведением симуляции Simulink. makehdltb (systemname);
Синтезировали проект для Xilinx Virtex 7 (xc7vx550t-ffg1158, класс скорости 3) с использованием ISE. Проект достигает тактовой частоты 499,525 МГц (до места и маршрута). При 16 выборках на тактовый сигнал это преобразовывается в пропускную способность 8 GSPS. Обратите внимание, что эта подсистема имеет большое количество портов ввода-вывода, и она не подходит как автономный проект, предназначенная для FPGA.
Чтобы улучшить частотную характеристику, используйте фильтр с большим количеством отводов. Следующая модель использует блок Channelizer HDL Optimized, сконфигурированный с 12-контактным фильтром, чтобы улучшить спектр. Использование встроенного блока Channelizer HDL Optimized облегчает изменение расчётных параметров.
modelname = 'PolyphaseFilterBankHDLExample_HDLChannelizer';
open_system(modelname);
Модель использует переменные рабочей области, чтобы сконфигурировать БПФ и фильтр. В этом случае модель использует БПФ с 512 точками и фильтр с 12 отводами для каждой полосы. Количество коэффициентов для канализатора составляет 512 частот, полосами умноженное на 12 отводов на полосу частоты. The tf(h)
метод генерирует все коэффициенты.
InVect = 16; FFTLength = 512; h = dsp.Channelizer; h.NumTapsPerBand = 12; h.NumFrequencyBands = FFTLength; h.StopbandAttenuation = 60; coef12Tap = tf(h);
Входные данные состоят из двух синусоид, 200 кГц и 206,5 кГц. Частоты ближе друг к другу, чем в первом примере, чтобы проиллюстрировать различие между канализатором и 4-отводным фильтром в разрешении спектра.
Чтобы визуализировать результат спектра, откройте средства просмотра спектра и запустите модель.
open_system('PolyphaseFilterBankHDLExample_HDLChannelizer/PFB_4tap Spectrum Viewer/Power Spectrum viewer (PFB_4tap)'); open_system('PolyphaseFilterBankHDLExample_HDLChannelizer/Channelizer Spectrum Viewer/Power Spectrum viewer (Channelizer_12tap)'); sim(modelname);
Power Spectrum Viewer для модели Channelizer_12tap показывает улучшение спектра степени полифазы фильтров с 12-отводным фильтром по сравнению с 4-отводным фильтром в предыдущей модели. Сравните результаты спектра для блоков каналообразующего и 4-контактного полифазного фильтров. Масштабирование между 100 кГц и 300 кГц, чтобы заметить, что каналообразующий элемент обнаруживает только два пика, в то время как 4-контактный полифазный фильтр обнаруживает более 2 peaks. Два пика являются ожидаемым результатом, поскольку входной сигнал имеет только две частотные составляющие.