Следующий пример показов, как создать фильтр с фиксированной точкой, 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 */