Следующие ограничения применяются к размерам наборов данных точки останова и табличных данных, сопоставленных с блоками интерполяционной таблицы:
Ограничения памяти вашей системы ограничивают полный размер интерполяционной таблицы.
Интерполяционные таблицы должны использовать сопоставимые размерности так, чтобы полный размер табличных данных отразил размер каждого набора данных точки останова.
Чтобы проиллюстрировать второе ограничение, рассмотрите следующие векторы значений ввода и вывода, которые создают отношение в графике.
Vector of input values: [-3 -2 -1 0 1 2 3] Vector of output values: [-3 -1 0 -1 0 1 3]
В этом примере данные ввода и вывода одного размера (1 7), делая данные последовательно определяемыми размеры для 1D интерполяционной таблицы.
Следующие значения ввода и вывода задают 2D интерполяционную таблицу, которую графически показывают.
Row index input values: [1 2 3] Column index input values: [1 2 3 4] Table data: [11 12 13 14; 21 22 23 24; 31 32 33 34]
В этом примере размеры векторов, представляющих индексы строки и столбца, 1 3 и 1 на 4, соответственно. Следовательно, выходная таблица должна иметь размер, 3 на 4 для сопоставимых размерностей.
Первая стадия операции поиска по таблице включает имеющие отношение входные параметры к наборам данных точки останова. Алгоритм поиска требует, чтобы ввел наборы точки останова строго монотонно увеличиться, то есть, каждый последовательный элемент больше, чем его предыдущий элемент. Например, вектор
A = [0 0.5 1 1.9 2.1 3]
допустимый набор данных точки останова, когда каждый элемент больше, чем его предшественники.
Несмотря на то, что набор данных точки останова является строго монотонным в формате double
, это не может быть так после преобразования в тип данных фиксированной точки.
Можно представлять равномерно распределенные точки останова в наборе данных при помощи одного из этих методов.
Формулировка | Пример | Когда использовать эту формулировку |
---|---|---|
Первое значение: spacing:last_value] | [10:10:200] | Интерполяционная таблица не использует double или single . |
first_value + spacing * [0:(last_value-first_value)/spacing] | 1 + (0.02 * [0:450]) | Интерполяционная таблица использует double или single . |
Поскольку типы данных с плавающей точкой не могут точно представлять некоторые числа, вторая формулировка работает лучше на double
и single
. Например, используйте 1 + (0.02 * [0:450])
вместо [1:0.02:10]
. Для списка блоков интерполяционной таблицы, которые поддерживают равномерно распределенные точки останова, см. Сводные данные Блочных Функций Интерполяционной таблицы.
Среди других преимуществ равномерно распределенные точки останова могут сделать сгенерированный код без делений и уменьшить использование памяти. Для получения дополнительной информации см.:
fixpt_evenspace_cleanup
в документации Simulink®
Эффекты разрядки на скорости, ошибке и использовании памяти (Fixed-Point Designer)
Идентифицируйте сомнительные операции фиксированной точки (Embedded Coder)
Не используйте функцию MATLAB® linspace
, чтобы задать равномерно распределенные точки останова. Симулинк использует более трудный допуск, чтобы проверить, имеет ли набор точки останова даже интервал. При использовании linspace
, чтобы задать точки останова для вашей интерполяционной таблицы, Симулинк полагает, что точки останова неравномерно распределены.