Product

Умножьте и разделите скаляры и нескаляры или умножьте и инвертируйте матрицы

  • Библиотека:
  • Simulink/Обычно используемые блоки

    Simulink/Математические операции

    HDL-кодер/обычно используемые блоки

    Операции HDL-кодера/HDL с плавающей точкой

    HDL-кодер/математические операции

  • Product block

Описание

Блок Product выводит результат умножения двух входов: двух скаляров, скаляра и нескаляра или двух нескаляров, которые имеют одинаковые размерности. Значения параметров по умолчанию, которые определяют это поведение:

  • Умножение: Element-wise(.*)

  • Количество входов: 2

Эта таблица показывает выход блока Product, например, входы с использованием значений параметров блоков по умолчанию.

Входы и поведениеПример

Скаляр X Скаляра

Вывод продукта двух входов.

Скаляр X Нескаляр

Вывод нескаляра, имеющего те же размерности, что и входной нескаляр. Каждый элемент выхода нескаляра является продуктом входа скаляра и соответствующим элементом входа нескаляра.

Нескаляр X Нескаляр

Вывод нескаляра, имеющего те же размерности, что и входы. Каждый элемент выхода является продуктом соответствующих элементов входов.

Блоки Divide и Product of Elements являются вариантами блока Product.

  • Для получения информации о блоке Divide см. Divide.

  • Для получения информации о блоке Product of Elements см. Product of Elements.

Блок Product (или блок Divide или Product of Elements, если он настроен соответствующим образом) может:

  • Численно умножьте и разделите любое количество скалярных, векторных или матричных входов

  • Выполните матричное умножение и деление на любом количестве матричных входов

Блок Product выполняет скалярное или матричное умножение, в зависимости от значения параметра Умножение. Блок принимает один или несколько входов, в зависимости от параметра Number of inputs. Параметр Number of inputs также задает операцию, которая должна выполняться на каждом входе.

Блок Product может вводить любую комбинацию скаляров, векторов и матриц, для которых выполняемая операция имеет математически определенный результат. Блок выполняет указанные операции над входами, затем выводит результат.

Блок Product имеет два режима: Element-wise mode, который обрабатывает нескалярные входы элемента за элементом и Matrix mode, который обрабатывает нескалярные входы как матрицы.

Поэлементный режим

Когда вы устанавливаете Умножение на Element-wise(.*)блок Product находится в Элементном режиме, в котором он работает с отдельными числовыми элементами любых нескалярных входов. MATLAB® эквивалентно .* оператор. В поэлементном режиме Product блок может выполнять множество операций умножения, деления и арифметической инверсии.

Значение параметра Number of inputs управляет как тем, сколько входов существует, так и тем, умножается или делится каждый, чтобы сформировать выход. Когда блок Product находится в поэлементном режиме и имеет только один вход, он функционально эквивалентен блоку Product of Elements. Когда блок имеет несколько входы, любые нескалярные входы должны иметь одинаковые размерности, и блок выводит нескалярные значения с этими размерностями. Чтобы вычислить выход, блок сначала расширяет любой скалярный вход до нескалярного, который имеет те же размерности, что нескаляр входы.

Эта таблица показывает выход блока Product для примера входов, используя указанные значения для параметра Number of входов.

Значения параметровПримеры

Количество входов: 2

Количество входов: */

Количество входов: /**/

Количество входов: **

Количество входов: */*

Матричный режим

Когда значение параметра Умножения Matrix(*)блок Product находится в режиме Matrix, в котором он обрабатывает нескалярные входы как матрицы. Эквивалентным MATLAB является * оператор. В режиме Matrix Product блок может инвертировать одну квадратную матрицу, или умножить и разделить любое количество матриц, которые имеют размерности, для которых математически задан результат.

Значение параметра Number of inputs управляет и тем, сколько входов существует, и тем, умножена ли или разделена каждая входная матрица, чтобы сформировать выход. Синтаксис числа входов такой же, как и в поэлементном режиме. Происходит различие между режимами в типе умножения и деления.

Ожидаемые различия между симуляцией и генерацией кода

Для поэлементных операций на сложных входах с плавающей точкой, результаты симуляции и генерации кода могут отличаться в случаях почти переполнения. Хотя complex numbers выбран и non-finite numbers не выбран на панели Code Generation > Interface диалогового окна Параметров конфигурации, генератор кода не излучает специальный код случая для промежуточных переполнений. Этот метод повышает эффективность встроенных операций для общего случая, который не включает экстремальные значения. Если входы могут включать экстремальные значения, вы должны управлять этими случаями явно.

Сгенерированный код может не привести к тому же шаблону NaN и inf значения как симуляция, когда эти значения математически бессмысленны. Для примера, если симуляция выхода содержит NaN, выход из сгенерированного кода также содержит NaN, но не обязательно там же.

Порты

Вход

расширить все

Первый вход для умножения или деления, предоставленный в виде скаляра, вектора, матрицы или N-D массива.

Типы данных: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

N-й вход для умножения или деления, предоставленный в виде скаляра, вектора, матрицы или N-D массива.

Типы данных: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

Входной сигнал, который будет умножен на другие входы.

Зависимости

Чтобы включить один или несколько портов X, задайте один или несколько * символы для параметра Number of inputs.

Типы данных: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

Входной сигнал для операций деления или инверсии.

Зависимости

Чтобы включить один или несколько портов ÷, задайте один или несколько / символы для параметра Number of inputs.

Типы данных: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

Выход

расширить все

Выход вычисляется умножением, делением или инвертированием входов.

Типы данных: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

Параметры

расширить все

Главный

Управляйте двумя свойствами блока:

  • Количество входа портов в блоке

  • Умножается ли каждый вход или делится на выход

Когда вы задаете:

  • 1 или * или /

    Блок имеет один входной порт. В поэлементном режиме блок обрабатывает вход, как описано для блока Product of Elements. В матричном режиме, если значение параметров 1 или *блок выводит вход значение. Если значение /, вход должен быть квадратной матрицей (включая скаляр как вырожденный случай), и блок выводит обратную матрицу. Для получения дополнительной информации смотрите Element-Wise Mode и Matrix Mode.

  • Целое число значения > 1

    Блок имеет количество входов, заданных целым значением. Входы умножаются вместе в поэлементном режиме или матричном режиме, как задано параметром Умножение. Для получения дополнительной информации смотрите Element-Wise Mode и Matrix Mode.

  • Строка без кавычек из двух или более * и / персонажи

    Блок имеет количество входов, заданных длиной вектора символов. Каждый вход, который соответствует * символ умножается на выход. Каждый вход, который соответствует / символ разделяется на выход. Операции происходят в поэлементном режиме или матричном режиме, как задается параметром Умножение. Для получения дополнительной информации смотрите Element-Wise Mode и Matrix Mode.

Программное использование

Параметры блоков: Inputs
Тип: Вектор символов
Значения: '2' | '**' | '*/' | '*/*' | ...
По умолчанию: '2'

Задайте, выполняет ли блок Element-wise(.*) или Matrix(*) умножение.

Программное использование

Параметры блоков: Multiplication
Тип: Вектор символов
Значения: 'Element-wise(.*)' | 'Matrix(*)'
По умолчанию: 'Element-wise(.*)'

Задайте размерность для умножения как All dimensions, или Specified dimension. Когда вы выбираете Specified dimension, можно задать Dimension следующим 1 или 2.

Зависимости

Чтобы включить этот параметр, установите Number of inputs равным * и Multiplication к Element-wise (.*).

Программное использование

Параметры блоков: CollapseMode
Тип: Вектор символов
Значения: 'All dimensions' | 'Specified dimension'
По умолчанию: 'All dimensions'

Задайте величину для умножения как целое число, меньше или равное количеству размерностей входного сигнала.

Зависимости

Чтобы включить этот параметр, установите:

  • Number of inputs с *

  • Multiplication с Element-wise (.*)

  • Multiply over с Specified dimension

Программное использование

Параметры блоков: CollapseDim
Тип: Вектор символов
Значения: '1' | '2' | ...
По умолчанию: '1'

Задайте шаг расчета как значение, отличное от -1. Для получения дополнительной информации см. Раздел «Задание шага расчета».

Зависимости

Этот параметр не отображается, если он явно не установлен на значение, отличное от -1. Для получения дополнительной информации смотрите Блоки, для которых шаг расчета не рекомендован.

Программное использование

Параметры блоков: SampleTime
Тип: Вектор символов
Значения: скаляр или вектор
По умолчанию: '-1'

Атрибуты сигнала

Укажите, все ли входные сигналы должны иметь совпадающий тип данных. Если вы активируете этот параметр, то ошибка возникает во время симуляции, если типы входного сигнала другие.

Программное использование

Параметры блоков: InputSameDT
Тип: Вектор символов
Значения: 'off' | 'on'
По умолчанию: 'off'

Более низкое значение выходной области значений, который Simulink® проверки.

Simulink использует минимум для выполнения:

Примечание

Output minimum не насыщает или не зажимает фактический выходной сигнал. Вместо этого используйте блок Saturation.

Программное использование

Параметры блоков: OutMin
Тип: Вектор символов
Значения: '[ ]'| скаляр
По умолчанию: '[ ]'

Верхнее значение выходной области значений, который Simulink проверяет.

Simulink использует максимальное значение для выполнения:

Примечание

Output maximum не насыщает или не зажимает фактический выходной сигнал. Вместо этого используйте блок Saturation.

Программное использование

Параметры блоков: OutMax
Тип: Вектор символов
Значения: '[ ]'| скаляр
По умолчанию: '[ ]'

Выберите тип данных для выхода. Тип может быть унаследован, задан непосредственно или выражен как объект типа данных, такой как Simulink.NumericType. Для получения дополнительной информации см. «Типы данных сигналов управления».

Когда вы выбираете унаследованную опцию, блок ведет себя следующим образом:

  • Inherit: Inherit via internal rule - Simulink выбирает тип данных, чтобы сбалансировать числовую точность, эффективность и размер сгенерированного кода, принимая во внимание свойства встроенного целевого оборудования. Если вы измените настройки целевого процессора, тип данных, выбранный внутренним правилом, может измениться. Для примера, если блок умножает вход типа int8 усилением int16 и ASIC/FPGA задается как тип целевого оборудования, тип выходных данных sfix24. Если Unspecified (assume 32-bit Generic)другими словами, типовой 32-разрядный микропроцессор, задается как целевой компьютер, тип выходных данных int32. Если ни одна из размеров слова, обеспечиваемых целевым микропроцессором, не может включать выходную область значений, программное обеспечение Simulink отображает ошибку в Diagnostic Viewer.

  • Inherit: Keep MSB- Simulink выбирает тип данных, который поддерживает полную область значений операции, затем уменьшает точность выхода до размера, соответствующего оборудованию целевого процессора.

    Совет

    Для более эффективного сгенерированного кода отмените выбор параметра Saturate on integer overflow.

    Это правило никогда не создает переполнения.

  • Inherit: Match scaling- Simulink выбирает тип данных, масштабирование которого соответствует масштабированию входных типов. Если полная область значений типа не помещается на оборудовании целевого процессора, область значений уменьшается, получая тип, подходящий для оборудования целевого процессора. Это правило может привести к переполнению. Это правило не поддерживает умножение между комплексными сигналами

    The Inherit: Keep MSB и Inherit: Match scaling правила не поддерживают умножение между комплексными сигналами или сигналами с ненулевым смещением. Правила поддерживают только умножение и деление ('**', '*/', '/*') между двумя входами, матричным умножением двух входов и свёрнутым продуктом двух элементов массива вектора.

    Не всегда программное обеспечение может оптимизировать эффективность кода и числовую точность одновременно. Если внутреннее правило не соответствует вашим конкретным потребностям в числовой точности или эффективности, используйте одну из следующих опций:

    • Явным образом задайте тип выходных данных.

    • Используйте простой выбор Inherit: Same as input.

    • Явным образом задайте тип данных по умолчанию, такой как fixdt(1,32,16) а затем используйте Fixed-Point Tool, чтобы предложить типы данных для вашей модели. Для получения дополнительной информации см. fxptdlg (Fixed-Point Designer).

    • Чтобы задать свое собственное правило наследования, используйте Inherit: Inherit via back propagation а затем используйте блок Data Type Propagation. Примеры использования этого блока доступны в библиотеке Signal Attributes Data Type Propagation Examples блоке.

  • Inherit: Inherit via back propagation - Используйте тип данных ведущего блока.

  • Inherit: Same as first input - Используйте тип данных первого входного сигнала.

Зависимости

Когда вход является типом данных с плавающей точкой, меньшим, чем одинарная точность, Inherit: Inherit via internal rule тип выходных данных зависит от параметра Inherit с плавающей точкой выходного типа, меньшего, чем параметр конфигурации с одной точностью. Типы данных меньше одной точности, когда количество бит, необходимых для кодирования типа данных, меньше 32 битов, необходимых для кодирования типа данных с одной точностью. Для примера, half и int16 меньше, чем одинарная точность.

Программное использование

Параметры блоков: OutDataTypeStr
Тип: Вектор символов
Значения: 'Inherit: Inherit via internal rule | 'Inherit: Keep MSB'| 'Inherit: Match scaling'| 'Inherit: Same as first input' | 'Inherit: Inherit via back propagation' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'uint64'| 'int64'| 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>'
По умолчанию: 'Inherit: Inherit via internal rule'

Выберите этот параметр, чтобы предотвратить переопределение инструментами с фиксированной точкой типа данных Output, заданного на блоке. Для получения дополнительной информации смотрите Использование настройки типа выходных данных блокировки (Fixed-Point Designer).

Программное использование

Параметры блоков: LockScale
Тип: Вектор символов
Значения: 'off' | 'on'
По умолчанию: 'off'

Выберите режим округления для операций с фиксированной точкой. Можно выбрать:

Ceiling

Округлает положительные и отрицательные числа к положительной бесконечности. Эквивалентно MATLAB ceil функция.

Convergent

Округлить число до ближайшего представимого значения. Если происходит связывание, округляет до ближайшего четного целого числа. Эквивалентно Fixed-Point Designer™ convergent функция.

Floor

Округлает положительные и отрицательные числа к отрицательной бесконечности. Эквивалентно MATLAB floor функция.

Nearest

Округлить число до ближайшего представимого значения. Если происходит галстук, округляет к положительной бесконечности. Эквивалентен Fixed-Point Designer nearest функция.

Round

Округлить число до ближайшего представимого значения. Если происходит связывание, округляет положительные числа к положительной бесконечности и округляет отрицательные числа к отрицательной бесконечности. Эквивалентен Fixed-Point Designer round функция.

Simplest

Выбирает между округлением к полу и округлением к нулю, чтобы сгенерировать код округления, который максимально эффективен.

Zero

Число округлений к нулю. Эквивалентно MATLAB fix функция.

Для получения дополнительной информации см. раздел Округление (Fixed-Point Designer).

Параметры блоков всегда округлятся до ближайшего представимого значения. Чтобы контролировать округление параметров блоков, введите выражение с помощью функции округления MATLAB в поле маски.

Программное использование

Параметры блоков: RndMeth
Тип: Вектор символов
Значения: 'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'
По умолчанию: 'Floor'

Укажите, будут ли переполнения насыщаться или переноситься.

ДействиеОбъяснениеВлияние на переливыПример

Установите этот флажок (on).

Ваша модель имеет возможное переполнение, и вы хотите явную защиту от насыщения в сгенерированном коде.

Переполнения достигает минимального или максимального значения, которое может представлять тип данных.

Максимальное значение, которое int8 (со знаком, 8-битное целое число) может представлять 127. Любая операция блока, результат которой больше этого максимального значения, вызывает переполнение 8-битного целого числа. При установленном флажке выход блока достигает 127. Точно так же выход блока достигает минимального выходного значения -128.

Не устанавливайте этот флажок (off).

Вы хотите оптимизировать эффективность вашего сгенерированного кода.

Вы хотите избежать переопределения того, как блок обрабатывает сигналы вне области допустимого. Для получения дополнительной информации смотрите Поиск и устранение ошибок диапазона сигнала.

Переполнения переходят к соответствующему значению, которое представимо типом данных.

Максимальное значение, которое int8 (со знаком, 8-битное целое число) может представлять 127. Любая операция блока, результат которой больше этого максимального значения, вызывает переполнение 8-битного целого числа. Если флажок снят, программное обеспечение интерпретирует значение, вызывающее переполнение, следующим int8, что может привести к непреднамеренному результату. Для примера блочный результат 130 (двоичный 1000 0010) выражается как int8, есть -126.

Когда вы устанавливаете этот флажок, насыщение применяется к каждой внутренней операции на блоке, а не только к выходу или результату. Обычно процесс генерации кода может обнаружить, когда переполнение невозможно. В этом случае генератор кода не производит код насыщения.

Программное использование

Параметры блоков: SaturateOnIntegerOverflow
Тип: Вектор символов
Значения: 'off' | 'on'
По умолчанию: 'off'

Характеристики блоков

Типы данных

Boolean | double | fixed point | half | integer | single

Прямое сквозное соединение

yes

Многомерные сигналы

yes

Сигналы переменного размера

yes

Обнаружение пересечения нулем

no

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ Simulink ®

.

Генерация кода ПЛК
Сгенерируйте структурированный текстовый код с помощью Coder™ Simulink ® PLC

.

Преобразование с фиксированной точкой
Разрабатывайте и моделируйте системы с фиксированной точкой с помощью Fixed-Point Designer™.

Представлено до R2006a