Следующий пример показывает, как создать фиксированную точку, 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);
Добавьте блоки в свою модель, чтобы создать следующую систему.
Установите параметры блоков в модели к этим КИХ-Значениям параметров Примера кода Фиксированной точки.
Из образцового меню выберите Simulation> Model Configuration Parameters и установите следующие параметры.
Параметр | Значение |
---|---|
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)
Объект 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 */