Алгоритм MATLAB DSP с фиксированной точкой - PullRequest
4 голосов
/ 13 июня 2011

У меня есть вопрос о кодировании алгоритма для процессора Texas Instruments TMS320C64xx в MATLAB:

У меня рабочая небрежная реализация моего фильтра в MATLAB. Моя цель - использовать встроенный кодер MATLAB для преобразования этого алгоритма в C, который затем я могу импортировать в Code Composer Studio и загрузить в DSP.

Чтобы сделать это, я знаю, что есть определенные вещи, которые мне нужно сделать с моим кодом MATLAB. Например, мне нужно предварительно выделить место для матриц, чтобы он знал, какой размер их создавать (если я не хочу возиться с данными переменного размера). Весь этот массаж кода MATLAB в код C'ish, чтобы кодер MATLAB мог преобразовать его, я более или менее понимаю. Однако я понятия не имею, как убедиться, что мои типы данных (например, коэффициенты моего фильтра) являются фиксированной точкой, а не плавающей точкой, так что встроенный кодер MATLAB преобразует мой код в C, который включает только типы данных с фиксированной точкой. 1005 *

Итак, я думаю, что мои общие вопросы:

1) Если C64xx указан как 32-разрядный DSP с фиксированной точкой, то это означает, что компилятор выдаст ошибку, если я попытаюсь использовать тип данных с плавающей точкой?

2) Есть ли способ убедиться, что MATLAB Embedded Coder не создает типы данных с плавающей запятой?

3) Нужно ли использовать MATLAB Fixed Point Toolbox?

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

Ответы [ 2 ]

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

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

  3. Чтобы действительно создатьC-код с фиксированной запятой, вам сначала нужно преобразовать код MATLAB с плавающей запятой в код с фиксированной запятой.Вам понадобится набор инструментов с фиксированной точкой, который позволит вам указывать свои переменные как объект FI и определять правила операций с фиксированной точкой, используя настройку FIMATH.Определив 16/32-битные типы данных с фиксированной запятой для всех ваших переменных и операций, вы можете смоделировать их, проанализировать результаты и выполнить итерацию по ним, чтобы настроить параметры, чтобы минимизировать переполнения и ошибки округления.Затем вы можете сгенерировать действительно целочисленный C-код, который будет вести себя так же (или очень близко) к вашему поведению MATLAB с фиксированной запятой.Любые различия, которые вы можете увидеть между вашим кодом MATLAB с фиксированной точкой и кодом C с фиксированной точкой, будут в основном связаны с теми, которые были внесены вашим целевым компилятором.

Следующая ссылка на записанный вебинар по этой теме должна послужить хорошим введением в этот процесс использования набора инструментов с фиксированной точкой: http://www.mathworks.com/wbnr38838

HTH.

3 голосов
/ 13 июня 2011

Я могу ответить только на ваш первый вопрос:

C64xx - это 32-битный DSP с фиксированной запятой, но компилятор не будет жаловаться, если вы используете с плавающей запятой. Результирующий код будет работать нормально, но будет (намного) медленнее, потому что операции с плавающей запятой будут эмулироваться.

C64xx DSP также может работать с 16-битной фиксированной точкой и смешанной 32x16-битной фиксированной точкой. Чем меньше используемых типов данных, тем быстрее будет работать полученный код.

...