Сгенерируйте КИХ-код фиксированной точки Используя блок 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. Установите параметры блоков в модели к этим КИХ-Значениям параметров Примера кода Фиксированной точки.

  3. Из образцового меню выберите Simulation> Model Configuration Parameters и установите следующие параметры.

    ПараметрЗначение
    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)
    

    Объект 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.