Алгоритм MATLAB DSP с фиксированной точкой
-
27-10-2019 - |
Вопрос
У меня есть вопрос о кодировании алгоритма для DSP Texas Instruments TMS320C64xx в MATLAB:
У меня есть работающая небрежная реализация моего фильтра в MATLAB. Моя цель - использовать MATLAB Embedded Coder для преобразования этого алгоритма в C, который я затем могу импортировать в Code Composer Studio и загрузить в DSP.
Чтобы сделать это, я знаю, что есть определенные вещи, которые мне нужно сделать с моим кодом MATLAB. Например, мне нужно заранее выделить место для матриц, чтобы он знал, какого размера их делать (если я не хочу возиться с данными переменного размера). Я более или менее понимаю всю эту трансформацию кода MATLAB в код C'ish, чтобы кодер MATLAB мог преобразовать его. Однако я понятия не имею, как убедиться, что мои типы данных (например, коэффициенты моего фильтра) имеют фиксированную точку, а не плавающую, чтобы MATLAB Embedded Coder преобразовал мой код в C, который включает только типы данных с фиксированной точкой.
Итак, я предполагаю, что мои общие вопросы:
1) Если C64xx указан как 32-битный DSP с фиксированной точкой, это означает, что компилятор для него выдаст ошибку, если я попытаюсь использовать тип данных с плавающей запятой?
2) Есть ли способ гарантировать, что MATLAB Embedded Coder не создает типы данных с плавающей запятой?
3) Нужно ли мне использовать MATLAB Fixed Point Toolbox?
Спасибо всем, дайте мне знать, если есть дополнительная информация, необходимая для ответа на мой вопрос.
Решение
-
Вы можете использовать типы данных с плавающей запятой, но, как указано в предыдущем ответе, DSP будет эмулировать числа с плавающей запятой, и выполнение будет намного медленнее. Этот тип выполнения подходит для определенных числовых операций, где а) вам нужна точность поплавков б) и / или преобразование в фиксированную точку обычно является проблемой (например, квадратный корень) или не всегда возможно, c) и / или эти операции не так часто происходят в вашей программе, чтобы потреблять большую часть циклов процессора.
-
Да. Есть флажок в диалоговом окне настройки конфигурации MATLAB Coder под панелью интерфейса, который говорит: «Поддерживать только чисто целые числа». Проверка этого гарантирует, что вы не получите никаких типов данных с плавающей запятой в сгенерированном коде. Однако сначала необходимо убедиться, что в вашем коде используются только целочисленные типы данных / типы данных с фиксированной точкой. Этот параметр просто гарантирует, что не генерируются числа с плавающей запятой - он не генерирует автоматически версию кода с фиксированной точкой или только для целых чисел из вашего кода MATLAB с плавающей запятой.
-
Чтобы действительно создать C-код с фиксированной запятой, вам сначала нужно преобразовать код MATLAB с плавающей запятой в код с фиксированной запятой. Вам понадобится набор инструментов с фиксированной точкой, который позволит вам указать переменные как объект FI и определить правила операций с фиксированной точкой с помощью параметра FIMATH. Как только вы определите 16/32 битные типы данных с фиксированной точкой для всех ваших переменных и операций, вы можете моделировать их, анализировать результаты и выполнять итерации по ним, чтобы настроить свои параметры, чтобы минимизировать ошибки переполнения и округления. Затем вы можете сгенерировать действительно целочисленный код C, который будет вести себя так же (или очень близко) к вашему поведению MATLAB с фиксированной точкой. Любые различия, которые вы можете увидеть между кодом MATLAB с фиксированной точкой и кодом C с фиксированной точкой, в первую очередь будут связаны с теми, которые были введены вашим целевым компилятором.
Следующая ссылка на записанный веб-семинар по этой теме должна дать хорошее представление об этом процессе использования Fixed-Point Toolbox: http://www.mathworks.com/wbnr38838
HTH.
Другие советы
Я могу ответить только на ваш первый вопрос:
C64xx - это 32-битный DSP с фиксированной точкой, но компилятор не будет жаловаться, если вы используете плавающую точку.Полученный код будет работать нормально, но будет (намного) медленнее, потому что операции с плавающей запятой будут эмулироваться.
ЦСП C64xx также может работать с 16-битной фиксированной точкой и смешанной 32x16-битной фиксированной точкой.Чем меньше типы данных вы используете, тем быстрее будет работать результирующий код.