Этот пример показывает некоторые лучшые практики для отладки вашей фиксированной точки, когда вам нужны больше, чем из преобразования поля.
Создайте локальную рабочую папку, например, c:\kalman_filter
.
В вашей локальной рабочей папке создайте следующие файлы.
Из галереи приложений откройте приложение Fixed-Point Converter.
На странице Select просмотрите к файлу kalman_filter.m
и нажмите Open.
Нажмите Next. На странице Define Input Types просмотрите к файлу kalman_filter_tb
. Нажмите Autodefine Input Types.
Тестовый файл запускает и строит входной сигнал с шумом, отфильтрованный сигнал, идеал отфильтрованный сигнал и различие между отфильтрованным и идеал отфильтрованный сигнал.
Нажмите Next. На странице Convert to Fixed Point нажмите Analyze, чтобы собрать информацию области значений и предложения по типу данных с помощью настроек по умолчанию.
Нажмите Convert, чтобы применить предложенные типы данных.
Кликните по стрелке Test и установите флажок Log inputs and outputs for comparison plots. Нажмите Test. Fixed-Point Converter запускает тестовый файл kalman_filter_tb.m
, чтобы протестировать сгенерированную фиксированную точку. Симуляции и фиксированной точки с плавающей точкой запущены с ошибками, вычисленными для переменных ввода и вывода.
Сгенерированные графики показывают, что текущая реализация фиксированной точки не приводит к хорошим результатам.
Ошибка для выходной переменной y
чрезвычайно высока в более чем 282 процентах.
Регистрируйте любой входной параметр функции и выходные переменные, которые вы подозреваете, причина числовых проблем к выходным аргументам функции верхнего уровня.
Нажмите kalman_filter
в панели Source Code, чтобы возвратиться к коду с плавающей точкой.
Когда вы выбираете опцию Log inputs and outputs for comparison plots во время фазы Test, переменные ввода и вывода функции верхнего уровня, kalman_filter
автоматически регистрируется для графического вывода.
Вызовы функции kalman_filter
функция matrix_solve
, которая содержит вызовы нескольких других функций. Чтобы заняться расследованиями, происходят ли числовые проблемы в функции matrix_solve
, выберите kalman_filter
> matrix_solve
в панели Source Code.
В столбце Log Data выберите входной параметр функции и выходные переменные, которые вы хотите регистрировать. В этом примере выберите все три, a
, b
и x
.
Нажмите Test.
Сгенерированный график показывает большую ошибку для выходной переменной функции matrix_solve
.
На странице Convert to Fixed Point нажмите Settings.
Под fimath, набор Rounding method к Nearest
. Установите Overflow action на Saturate
.
Нажмите Convert, чтобы применить новые настройки.
Кликните по стрелке рядом с Test и гарантируйте, что Log inputs and outputs for comparison plots выбран. Позвольте регистрировать для любого входного параметра функции или выходных переменных. Нажмите Test.
Исследуйте график на функциональную выходную переменную верхнего уровня, y
.
Новые настройки fimath
улучшают вывод, но некоторая ошибка все еще остается.
Корректировка размера слова по умолчанию улучшает точность сгенерированного проекта фиксированной точки.
Нажмите Settings и измените размер слова по умолчанию на 32
. Нажмите Convert, чтобы применить новые настройки.
Нажмите Test. Ошибка для выходной переменной y
накапливается.
Закройте Fixed-Point Converter и постройте окно.
Функция kalman_stm
вычисляет матрицу Грина, которая является константой. Вы не должны преобразовывать эту функцию в фиксированную точку. Чтобы избежать ненужного квантования посредством вычисления, замените эту функцию на константу с двойной точностью. Заменяя функцию на константу, матрица Грина подвергается квантованию только однажды.
Кликните по функции kalman_filter
в панели Source Code. Отредактируйте функцию kalman_filter
. Замените вызов функции kalman_stm
с эквивалентной двойной константой.
A = [0.992114701314478, -0.125333233564304; 0.125333233564304, 0.992114701314478];
Нажмите Analyze, чтобы обновить предложения.
Нажмите Convert, чтобы применить новые предложения.
Нажмите Test. Ошибка на графике для функций, вывод y
находится теперь на порядке 10-6, который приемлем для этого проекта.