Этот пример показывает некоторые лучшие практики для отладки вашей фиксированной точки, когда вам нужны больше, чем из преобразования поля.
Создайте локальную рабочую папку, например, c:\kalman_filter
.
В вашей локальной рабочей папке создайте следующие файлы.
Из галереи Apps откройте приложение 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, который приемлем для этого проекта.