Вопрос

У меня есть вопрос о кодировании алгоритма для 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?

Спасибо всем, дайте мне знать, если есть дополнительная информация, необходимая для ответа на мой вопрос.

Это было полезно?

Решение

  1. Вы можете использовать типы данных с плавающей запятой, но, как указано в предыдущем ответе, DSP будет эмулировать числа с плавающей запятой, и выполнение будет намного медленнее. Этот тип выполнения подходит для определенных числовых операций, где а) вам нужна точность поплавков б) и / или преобразование в фиксированную точку обычно является проблемой (например, квадратный корень) или не всегда возможно, c) и / или эти операции не так часто происходят в вашей программе, чтобы потреблять большую часть циклов процессора.

  2. Да. Есть флажок в диалоговом окне настройки конфигурации MATLAB Coder под панелью интерфейса, который говорит: «Поддерживать только чисто целые числа». Проверка этого гарантирует, что вы не получите никаких типов данных с плавающей запятой в сгенерированном коде. Однако сначала необходимо убедиться, что в вашем коде используются только целочисленные типы данных / типы данных с фиксированной точкой. Этот параметр просто гарантирует, что не генерируются числа с плавающей запятой - он не генерирует автоматически версию кода с фиксированной точкой или только для целых чисел из вашего кода MATLAB с плавающей запятой.

  3. Чтобы действительно создать 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-битной фиксированной точкой.Чем меньше типы данных вы используете, тем быстрее будет работать результирующий код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top