В этом примере показаны некоторые рекомендации по отладке кода с фиксированной точкой, если требуется не только нестандартное преобразование.
Создайте локальную рабочую папку, например: c:\kalman_filter.
В локальной рабочей папке создайте следующие файлы.
В коллекции приложений откройте приложение Fixed-Point Converter.
На странице «Выбор» перейдите к kalman_filter.m и нажмите кнопку «Открыть».
Нажмите кнопку Далее. На странице Определение типов ввода (Define Input Types) перейдите к kalman_filter_tb файл. Щелкните Автоопределить типы ввода (Autodefine Input Types).
Тестовый файл запускает и отображает входной шумный сигнал, отфильтрованный сигнал, идеальный отфильтрованный сигнал и разность между отфильтрованным и идеальным отфильтрованным сигналом.

Нажмите кнопку Далее. На странице Преобразовать в фиксированную точку (Convert to Fixed Point) щелкните Анализ (Analyze), чтобы собрать информацию о диапазоне и предложения по типу данных с использованием настроек по умолчанию.
Щелкните Преобразовать (Convert), чтобы применить предлагаемые типы данных.
Щелкните стрелку Тест (Test) и установите флажок Вход и вывод журнала (Log inputs and outputs for comparison plots). Щелкните Тест. Преобразователь фиксированных точек запускает тестовый файл kalman_filter_tb.m для тестирования сгенерированного кода с фиксированной точкой. Выполняется моделирование с плавающей и фиксированной точками с вычислением ошибок для входных и выходных переменных.
Созданные графики показывают, что текущая реализация с фиксированной точкой не дает хороших результатов.

Ошибка выходной переменной y является чрезвычайно высоким и составляет более 282 процентов.

Запишите все входные и выходные переменные функции, которые, как вы подозреваете, являются причиной численных проблем, в выходные аргументы функции верхнего уровня.
Щелкнуть kalman_filter на панели «Исходный код» для возврата к коду с плавающей запятой.
При выборе опции Log inputs and outputs for comparison plots во время фазы тестирования входные и выходные переменные функции верхнего уровня, kalman_filter автоматически регистрируются для печати.
kalman_filter функция вызывает matrix_solve , которая содержит вызовы нескольких других функций. Чтобы выяснить, возникают ли числовые проблемы в matrix_solve функция, выберите kalman_filter > matrix_solve на панели «Исходный код».
В столбце Данные журнала выберите входные и выходные переменные функции, которые требуется записать в журнал. В этом примере выберите все три: a, b, и x.

Щелкните Тест (Test).
Созданный график показывает большую ошибку для выходной переменной matrix_solve функция.

На странице «Преобразовать в фиксированную точку» нажмите кнопку «Параметры».
В разделе fimath задайте для метода Округления значение Nearest. Установите для действия переполнения значение Saturate.
Нажмите кнопку «Преобразовать», чтобы применить новые настройки.
Щелкните стрелку рядом с полем Тест (Test) и убедитесь, что выбраны входы и выходы журнала для графиков сравнения. Включить ведение журнала для любых входных или выходных переменных функции. Щелкните Тест (Test).
Проверьте график для выходной переменной функции верхнего уровня, y.

Новое fimath параметры улучшают выходные данные, но некоторые ошибки все еще остаются.
Корректировка длины слова по умолчанию повышает точность создаваемой конструкции с фиксированной точкой.
Щелкните Настройки (Settings) и измените длину слова по умолчанию на 32. Нажмите кнопку «Преобразовать», чтобы применить новые настройки.
Щелкните Тест. Ошибка выходной переменной y накапливается.

Закройте окно Конвертер фиксированной точки (Fixed-Point Converter) и выполните печать.
kalman_stm функция вычисляет матрицу перехода состояния, которая является константой. Преобразование этой функции в фиксированную точку не требуется. Чтобы избежать ненужного квантования посредством вычисления, замените эту функцию константой двойной точности. Заменяя функцию константой, матрица перехода состояния подвергается квантованию только один раз.
Щелкните значок kalman_filter на панели «Исходный код». Изменить kalman_filter функция. Замените вызов kalman_stm с эквивалентной двойной константой.
A = [0.992114701314478, -0.125333233564304; 0.125333233564304, 0.992114701314478];
Щелкните Анализ (Analyze), чтобы обновить предложения.
Щелкните Преобразовать (Convert), чтобы применить новые предложения.
Щелкните Тест. Ошибка на графике вывода функций y теперь порядка 10-6, что приемлемо для данной конструкции.

