Следующий пример показов, как создать фильтр с фиксированной точкой, lowpass конечной импульсной характеристики прямой формой в Simulink®. Чтобы создать конечная импульсная характеристика, вы используете программное обеспечение Fixed-Point Designer™ и блок MATLAB Function. В этом примере вы выполняете следующие задачи в показанной последовательности:
Поместите MATLAB Function блок в новую модель. Вы можете найти блок в библиотеке Simulink User-Defined Functions.
Сохраните модель как cgen_fi.
Дважды кликните 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);
Добавьте блоки к модели, чтобы создать следующую систему.

Установите параметры блоков в модели на эти конечные импульсные характеристики Fixed-Point Кода Example Parameter Values.
На вкладке Modeling нажмите Model Settings. Установите следующие параметры конфигурации.
| Параметр | Значение |
|---|---|
| Stop time | 0 |
| Type | Fixed-step |
| Solver | discrete (no continuous states) |
Нажмите кнопку Apply, чтобы сохранить изменения.
Откройте браузер Model Explorer для модели.
Щелкните узел cgen_fi > MATLAB Function на панели Model Hierarchy. Диалоговое окно для блока MATLAB Function появится на панели Dialog Model Explorer.
Выберите 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 заданные вами свойства.
Запустите симуляцию, выбрав модель и набрав Ctrl+T. Во время выполнения симуляции информация выводится в командную строку MATLAB. Можно посмотреть на графики сигнала с шумом и отфильтрованного сигнала.
Затем создайте встраиваемый код С для вашей модели, выбрав модель и набрав Ctrl+B. Пока код строится, информация выводится в командную строку MATLAB. Папка с именем coder_fi_grt_rtw создается в текущей рабочей папке.
Переход к coder_fi_grt_rtw > cgen_fi.c. В этом файле вы можете увидеть код, сгенерированный из вашей модели. Найдите в коде следующий комментарий:
/* codegen_fi doc model example */