В этом примере показано, как реализовать дискретный фильтр FIR с несколькими входными потоками данных для аппаратных средств.
Во многих приложениях DSP множество потоков данных фильтруется одним и тем же фильтром. Простым решением является создание отдельного фильтра для каждого канала. Можно создать более зонально эффективную структуру путем совместного использования одной реализации фильтра в нескольких каналах. Полученное аппаратное обеспечение требует более высокой тактовой частоты по сравнению с тактовой частотой, используемой для одноканального фильтра.
modelname = 'dspmultichannelhdl';
open_system(modelname);

Модель содержит двухканальный фильтр FIR. Вектор входных данных включает в себя два потока синусоидального сигнала с разными частотами. Входные потоки данных обрабатываются фильтром нижних частот, коэффициенты которого задаются свойствами модели. InitFcn Функция обратного вызова.
Выберите полностью параллельную архитектуру для блока дискретного фильтра FIR и включите совместное использование ресурсов в нескольких каналах.
systemname = [modelname '/Multichannel FIR Filter']; blockname = [systemname '/Discrete FIR Filter']; set_param(blockname,'FilterStructure','Direct form symmetric'); hdlset_param(blockname,'Architecture','Fully Parallel'); hdlset_param(blockname,'ChannelSharing','On');
Эти параметры можно также задать в меню Свойства блока HDL (HDL Block Properties), доступ к которому можно получить, щелкнув блок правой кнопкой мыши и выбрав Код HDL (HDL Code) > Свойства блока HDL (HDL Block Properties).
Запустите пример модели и откройте область для сравнения двух потоков данных.
sim(modelname);
open_system([modelname '/Scope']);

Для создания кода HDL для этой модели необходимо иметь лицензию HDL Coder™. Эта команда используется для генерации кода HDL для подсистемы многоканального фильтра FIR. Включить отчет об использовании ресурсов.
makehdl(systemname,'resource','on');
Эта команда используется для создания тестового стенда, который сравнивает результаты моделирования ЛПВП с результатами модели Simulink.
makehdltb(systemname);
Чтобы сравнить использование ресурсов с общим доступом и без него, можно отключить общий доступ к ресурсам по каналам и повторно создать код HDL, а затем сравнить отчеты об использовании ресурсов.
hdlset_param(blockname,'ChannelSharing','Off'); makehdl(systemname,'resource','on');
