Сгенерируйте конечную импульсную характеристику с фиксированной точкой Кода помощи Блока MATLAB function

Программируйте Блок MATLAB function

Следующий пример показов, как создать фильтр с фиксированной точкой, lowpass конечной импульсной характеристики прямой формой в Simulink®. Чтобы создать конечная импульсная характеристика, вы используете программное обеспечение Fixed-Point Designer™ и блок MATLAB Function. В этом примере вы выполняете следующие задачи в показанной последовательности:

  1. Поместите MATLAB Function блок в новую модель. Вы можете найти блок в библиотеке Simulink User-Defined Functions.

  2. Сохраните модель как cgen_fi.

  3. Дважды кликните MATLAB Function блок в модели, чтобы открыть Блок MATLAB function Редактора. Введите или скопируйте и вставьте следующий MATLAB® код, включая комментарии, в редактор:

    function [yout,zf] = dffirdemo(b, x, zi) %#codegen
    %codegen_fi doc model example
    %Initialize the output signal yout and the final conditions zf
    Ty = numerictype(1,12,8);
    yout = fi(zeros(size(x)),'numerictype',Ty);
    zf = zi;
    
    % FIR filter code
    for k=1:length(x);
      % Update the states: z = [x(k);z(1:end-1)]  
      zf(:) = [x(k);zf(1:end-1)];
      % Form the output: y(k) = b*z
      yout(k) = b*zf;
    end
    
    % Plot the outputs only in simulation.
    % This does not generate C code.
    figure;
    subplot(211);plot(x); title('Noisy Signal');grid;
    subplot(212);plot(yout); title('Filtered Signal');grid;

Подготовка входных параметров

Задайте b коэффициентов фильтра, x шума и начальные условия zi путем ввода следующего кода в командной строке MATLAB:

b=fidemo.fi_fir_coefficients;
load mtlb
x = mtlb;
n = length(x);
noise = sin(2*pi*2140*(0:n-1)'./Fs);
x = x + noise;
zi = zeros(length(b),1);

Создайте модель

  1. Добавьте блоки к модели, чтобы создать следующую систему.

  2. Установите параметры блоков в модели на эти конечные импульсные характеристики Fixed-Point Кода Example Parameter Values.

  3. На вкладке Modeling нажмите Model Settings. Установите следующие параметры конфигурации.

    ПараметрЗначение
    Stop time0
    TypeFixed-step
    Solverdiscrete (no continuous states)

    Нажмите кнопку Apply, чтобы сохранить изменения.

Определите объект fimath с помощью Model Explorer

  1. Откройте браузер Model Explorer для модели.

  2. Щелкните узел cgen_fi > MATLAB Function на панели Model Hierarchy. Диалоговое окно для блока MATLAB Function появится на панели Dialog Model Explorer.

  3. Выберите Specify other для параметра MATLAB Function block fimath в диалоговом окне MATLAB Function блока. Затем можно создать следующую fimath объект в поле редактирования:

    fimath('RoundingMethod','Floor','OverflowAction','Wrap',...
        'ProductMode','KeepLSB','ProductWordLength',32,...
        'SumMode','KeepLSB','SumWordLength',32)
    

    The fimath заданный здесь объект связан с входами с фиксированной точкой в блок MATLAB Function, а также в fi объект, который вы создаете в блоке.

    Выбирая Specify other для MATLAB Function block fimath, вы гарантируете, что ваша модель всегда использует fimath заданные вами свойства.

Запуск симуляции

  1. Запустите симуляцию, выбрав модель и набрав Ctrl+T. Во время выполнения симуляции информация выводится в командную строку MATLAB. Можно посмотреть на графики сигнала с шумом и отфильтрованного сигнала.

  2. Затем создайте встраиваемый код С для вашей модели, выбрав модель и набрав Ctrl+B. Пока код строится, информация выводится в командную строку MATLAB. Папка с именем coder_fi_grt_rtw создается в текущей рабочей папке.

  3. Переход к coder_fi_grt_rtw > cgen_fi.c. В этом файле вы можете увидеть код, сгенерированный из вашей модели. Найдите в коде следующий комментарий:

    /* codegen_fi doc model example */
    Этот поиск приводит вас к началу раздела кода, который ваш MATLAB Function блок сгенерировал.

Для просмотра документации необходимо авторизоваться на сайте