Как передать данные из simulink в matlab
Перейти к содержимому

Как передать данные из simulink в matlab

  • автор:

Документация

Осуществляйте обмен данными с Simulink и рабочим пространством MATLAB

Stateflow ® графики взаимодействуют через интерфейс с другими блоками в Simulink ® модель:

  • Обмен данными посредством связей ввода и вывода.
  • Импорт значений исходных данных из MATLAB ® базовое рабочее пространство.
  • Сохранение итоговых значений данных к базовому рабочему пространству MATLAB.

Графики также могут получить доступ к параметрам Simulink и хранилищам данных. Для получения дополнительной информации смотрите Параметры Доли с Simulink и рабочим пространством MATLAB и Памятью Хранилища Доступа к данным из Графика.

Совместно используйте входные и выходные данные с Simulink

Потоки данных от Simulink в диаграмму Stateflow через входные порты. Потоки данных от диаграммы Stateflow в Simulink через выходные порты.

Задавать данные о вводе или выводе в графике:

  1. Добавьте, что объект данных к графику, как описано в Добавляют Данные Stateflow.
  2. Установите свойство Scope для объекта данных.
  • Чтобы задать входные данные, установите Scope на Input Data . Входной порт появляется на левой стороне блока графика.
  • Чтобы задать выходные данные, установите Scope на Output Data . Выходной порт появляется на правой стороне блока графика.

По умолчанию значения Port появляются в порядке, в котором вы добавляете объекты данных. Можно изменить эти присвоения путем изменения Свойства портов данных. Когда вы изменяете свойство Port для объекта данных ввода или вывода, значения Порта для остающихся объектов данных ввода или вывода автоматически перенумеровывают.

Примечание

Вы не можете установить тип или размер входных данных Stateflow принимать основанные на системе координат данные из Simulink.

Инициализируйте данные из базового рабочего пространства MATLAB

Можно импортировать начальное значение символа данных путем определения его в базовом рабочем пространстве MATLAB и в иерархии Stateflow.

  1. Задайте и инициализируйте переменную в базовом рабочем пространстве MATLAB.
  2. В иерархии Stateflow задайте объект данных с тем же именем как переменная MATLAB.
  3. Выберите свойство Allow initial value to resolve to a parameter для объекта данных.

Когда симуляция запускается, разрешение данных происходит. Во время этого процесса объект данных Stateflow получает свое начальное значение от связанной переменной MATLAB.

Одномерные массивы Stateflow совместимы с векторами одного размера строки и столбца MATLAB. Например, вектор Stateflow из размера 5 совместимо с вектором-строкой MATLAB из размера [1,5] или вектор-столбец размера [5,1] . Каждый элемент массива Stateflow инициализирует к тому же значению как соответствующий элемент массива в базовом рабочем пространстве MATLAB.

Время инициализации зависит от родительского элемента данных и осциллографа объекта данных Stateflow.

Родительский элемент данных

Как получить передаточную функцию из модели Simulink в Matlab

Я хотел бы построить передаточную функцию из файла Simulnik model.mdl, где я использовал блоки From Workspace (simin) и To Workspace (simou) для запуска моделирования из Matlab.

А теперь возникает проблема. Я просто не могу найти способ запустить эту модель Simulink в Matlab.

sim('model'); h=simout/simin; [H,omega]=freqz(h); %plot 

Я получаю эту ошибку;

Error evaluating parameter 'VariableName' in 'model/From Workspace' Caused by: Error using sigma (line 8) Undefined function or variable 'simin'. 

Что я делаю не так?

user3103079 15 Дек 2013 в 01:00

4 ответа

Лучший ответ

Вы действительно знаете передаточную функцию? Правильно ли реализовано в Simulink? Тогда ошибка предполагает, что вы не присвоили правильное имя переменной вашему блоку из рабочей области, вы просто сохранили значение по умолчанию VariableName . Для частотной характеристики вам необходимо определить передаточную функцию вне Simulink с помощью tf , а затем использовать bodeplot , чтобы построить ее. (Посмотрите в конце этих ответов)

Но мне кажется, что у вас есть некоторые входные данные и некоторые выходные данные , и вы хотите оценить передаточную функцию и, наконец, получить частоту ответ этой передаточной функции. В Simulink нет необходимости делать это. Как только вы нашли свою передаточную функцию, вы можете реализовать ее в Simulink с помощью блока Transfer function , подать симуляцию с помощью блока From Workspace и отобразить результаты с помощью Scope . Но сначала вам понадобится передаточная функция.

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

% prepare data for tftest, 100 is a random chosen sampling time tfdata = iddata(data(:,1),data(:,2),100); 

Тогда вы можете использовать tfest для оценки передаточной функции с выбранным числом полюсов:

N = 5; % Number of poles sys = tfest(tfdata,N); 

Частотная характеристика, которую вы получаете, например, с bodeplot :

bodeplot(sys) 

Функция FREQZ , которую вы намеревались использовать, предназначена только для цифровых фильтров, а не для функций передачи.

Наконец, вы можете протестировать свою модель с помощью Simulink:

enter image description here

Где числитель блока Transfer Fcn равен sys.num , а знаменатель sys.den (для моего примера).

Если график, отображаемый в Scope (имейте в виду, что вы должны отключить «Ограничить количество точек данных до последних 5000» в настройках области), аналогичен вашему outputdata , оценка была успешной.

Я выполнил тестовый прогон для вашей модели: (решатель с фиксированным шагом, без непрерывных состояний, время шага 0,0001).

enter image description here

Затем следующий код:

tfdata = iddata(inputdata,outputdata,0.0001); N = 5; sys = tfest(tfdata,N); bodeplot(sys) 
sys = From input "u1" to output "y1": -2068 s^4 + 2.89e06 s^3 + 7.017e10 s^2 + 5.205e13 s - 8.931e15 ------------------------------------------------------- s^5 + 1.034e04 s^4 + 4.552e07 s^3 + 1.114e11 s^2 + 8.337e13 s + 8.931e15 

enter image description here

Или преобразовать его в дискретный:

sysd = c2d(sys,0.0001) sysd = From input "u1" to output "y1": -0.0995 z^-1 + 0.4644 z^-2 - 0.7491 z^-3 + 0.5061 z^-4 - 0.1219 z^-5 ------------------------------------------------------- 1 - 4.042 z^-1 + 6.554 z^-2 - 5.332 z^-3 + 2.176 z^-4 - 0.3556 z^-5 

Я больше ничем не могу вам помочь, да и в любом случае это домашнее задание, верно? Так что остальное зависит от вас. И, честно говоря, рассчитайте вручную! Будет намного точнее!

Robert Seifert 15 Дек 2013 в 23:03

Спасибо за развернутый ответ, но я думаю, что мы неправильно поняли. Моя модель Simulink содержит набор задержек, сумм и коэффициентов 1/z. Итак, у меня есть цифровой фильтр, и мне нужно построить передаточную функцию этого фильтра. Таким образом, проблема заключается в том, как запустить Simulink model.mdl из Matlab, а затем построить передаточную функцию (что легко). Спасибо

user3103079
15 Дек 2013 в 12:10

Но как определяется этот цифровой фильтр? Почему нельзя просто использовать свойства этого фильтра и построить передаточную функцию с FREQZ ? Для чего вам Симин/Симаут? Или вам нужна передаточная функция всей вашей модели? Тогда вам нужно сделать то, что я написал в своем ответе, с tfest . Было бы полезно, если бы вы дополнили свои вопросы несколькими скриншотами вашей модели. Вместо ошибок, которые очень очевидны и легко исправимы.

Robert Seifert
15 Дек 2013 в 13:24

Мне дали только схему Simulink. Я также добавляю скриншот моей модели в свой первый пост. Да, я хотел бы передаточную функцию всей моей модели. Должен ли я все еще использовать tfest?

user3103079
15 Дек 2013 в 14:32

Я бы посчитал вручную. А затем проверьте его с результатом tfest . Я не знаю, могут ли у вас возникнуть проблемы, потому что это модель дискретной модели. tfest вернет непрерывную во времени передаточную функцию, но вы можете преобразовать ее позже. Я отредактирую свой ответ через несколько минут.

Как передать данные из simulink в matlab

This section explains how to send data from a Simulink ® model to the MATLAB ® workspace so you can analyze the results of simulations in greater detail.

You can use a To Workspace (Simulink) block to send data to the MATLAB workspace as a vector. For example, you can send the error rate data from the Hamming code model, described in the section Reducing the Error Rate Using a Hamming Code. To insert a To Workspace (Simulink) block into the model, follow these steps:

    To add a To Workspace (Simulink) block, begin typing the name ‘to workspace’ in the model window and select the To Workspace block. Connect it as shown.

Tip

Select the To Workspace block from the DSP System Toolbox™ / Sinks sublibrary. For more information, see To Workspace Block Configuration for Communications System Simulations.

Configure the To Workspace Block

To configure the To Workspace (Simulink) block, follow these steps:

  1. Double-click the block to display its dialog box.
  2. Type hammcode_BER in the Variable name field.
  3. Type 1 in the Limit data points to last field. This limits the output vector to the values at the final time step of the simulation.
  4. Ensure the Save format is set to Array .
  5. Click OK.

When you run a simulation, the model sends the output of the Error Rate Calculation block to the workspace as a vector of size 3, called hamming_BER . The entries of this vector are the same as those shown by the Error Rate Display block.

View Error Rate Data in Workspace

After running a simulation, you can view the output of the To Workspace (Simulink) block by typing the following commands at the MATLAB prompt:

format short e hammcode_BER

The vector output is the following:

hammcode_BER = 5.4066e-003 1.0000e+002 1.8496e+004

The command format short e displays the entries of the vector in exponential form. The entries are as follows:

  • The first entry is the error rate.
  • The second entry is the total number of errors.
  • The third entry is the total number of comparisons made.

Send Signal and Error Data to Workspace

To analyze the error-correction performance of the Hamming code, send the transmitted signal, the received signal, and the error vectors, created by the Binary Symmetric Channel block, to the workspace. An example of this is shown in the following figure.

  1. Assemble blocks to build this model.
  2. Double-click the Binary Symmetric Channel block to open its dialog box, and select Output error vector. This creates an output port for the error data.
  3. Move blocks to make room so that you can insert Hamming Encoder and Hamming Decoder blocks. To find them, start typing Hamming in the model window. Select them from the options presented. These Hamming Encoder and Hamming Decoder blocks are in the Communications Toolbox™/Error Detection and Correction /Block sublibrary.
  4. Add three To Workspace (Simulink) blocks into the model window and connect them as shown in the preceding figure.

Tip Select the To Workspace block from the DSP System Toolbox / Sinks sublibrary. For more information, see To Workspace Block Configuration for Communications System Simulations.

  • Set the Variable name parameter to Tx . The block sends the transmitted signal to the workspace as an array called Tx .
  • To save each frame as a separate column in the Tx array, set the Save 2-D signals as parameter to 3-D array (concatenate along third dimension) .
  • Click OK.
  • Set the Variable name parameter to errors .
  • To save each frame as a separate column in the errors array, set the Save 2-D signals as parameter to 3-D array (concatenate along third dimension) .
  • Click OK.
  • Set the Variable name parameter to Rx .
  • To save each frame as a separate column in the Rx array, set the Save 2-D signals as parameter to 3-D array (concatenate along third dimension) .
  • Click OK.

View Signal and Error Data in Workspace

After running a simulation, you can display individual frames of data. For example, to display the tenth frame of Tx , at the MATLAB prompt type

Tx(. 10)

This returns a column vector of length 4, corresponding to the length of a message word. Signals are typically quite large. So, typing the signal name by itself and displaying the entire transmitted signal is not of interest.

To display the corresponding frame of errors, type

errors(. 10)

This returns a column vector of length 7, corresponding to the length of a codeword.

To display frames 1 through 5 of the transmitted signal, type

Tx(. 1:5)

Analyze Signal and Error Data

You can use MATLAB to analyze the data from a simulation. For example, to identify the differences between the transmitted and received signals, type

diffs = Tx ~= Rx;

The vector diffs is the XOR of the vectors Tx and Rx . A 1 in diffs indicates that Tx and Rx differ at that position.

You can determine the indices of frames corresponding to message words that are incorrectly decoded with the following MATLAB command:

error_indices = find(diffs);

The vector error_indices records the indices where Tx and Rx differ. To view the first incorrectly decoded word, type

Tx(. error_indices(1))

To view the corresponding frame of errors, type

errors(. error_indices(1))

Analyze this data to determine the error patterns that lead to incorrect decoding.

MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

  • Switzerland (English)
  • Switzerland (Deutsch)
  • Switzerland (Français)

You can also select a web site from the following list:

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

Americas

  • América Latina (Español)
  • Canada (English)
  • United States (English)

Europe

  • Belgium (English)
  • Denmark (English)
  • Deutschland (Deutsch)
  • España (Español)
  • Finland (English)
  • France (Français)
  • Ireland (English)
  • Italia (Italiano)
  • Luxembourg (English)
  • Netherlands (English)
  • Norway (English)
  • Österreich (Deutsch)
  • Portugal (English)
  • Sweden (English)
  • Switzerland
    • Deutsch
    • English
    • Français

    Как получить передаточную функцию от модели Simulink в Matlab

    Я хотел бы построить функцию передачи из файла Simulnik model.mdl, где я использовал блоки из Workspace (simin) и To Workspace (simou), чтобы начать симуляцию из Matlab. И теперь возникает проблема. Я просто не могу найти способ запустить эту модель Simulink в Matlab. Вот мой код;

    sim('model');

    h=simout/simin;

    [H,omega]=freqz(h);
    %plot

    Я получаю эти ошибки;

    Error evaluating parameter 'VariableName' in 'model/From
    Workspace'

    Caused by:
    Error using sigma (line 8)
    Undefined function or variable 'simin'.

    enter image description here

    Что я делаю не так? Это моя модель: Огромное спасибо.

    спросил(а) 2013-12-15T00:00:00+04:00 9 лет, 11 месяцев назад
    добавить комментарий
    пожаловаться

    Вы действительно знаете функцию передачи? Правильно ли реализовано в Simulink? Тогда ошибка говорит о том, что вы не присвоили правильное имя переменной своему блоку рабочей области, вы просто сохранили значение VariableName по умолчанию. Для частотного отклика вам необходимо определить вашу передаточную функцию за пределами Simulink с tf , а затем использовать bodeplot для ее построения. (Посмотрите на конец этого ответа) Но мне кажется, что у вас есть некоторые входные данные и некоторые выходные данные, и вы хотите оценить передаточную функцию и, наконец, получить частотную характеристику этой передаточной функции. Симулинку не нужно делать это. После того, как вы нашли свою функцию передачи, вы можете реализовать ее в Simulink с помощью Transfer function блока Transfer function , подайте симуляцию с помощью блока » From Workspace и отобразите результаты с помощью Scope . Но сначала вам нужна функция передачи. Предполагая, что у вас есть переменные inputdata и outputdata вам сначала нужно создать набор данных передаточной функции:

    % prepare data for tftest, 100 is a random chosen sampling time
    tfdata = iddata(data(:,1),data(:,2),100);

    то вы можете использовать tfest для оценки передаточной функции с выбранным числом полюсов:

    N = 5; % Number of poles
    sys = tfest(tfdata,N);

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

    bodeplot(sys)

    Функция FREQZ вы намереваетесь использовать, предназначена только для цифровых фильтров, а не для функций передачи. Наконец, вы можете протестировать свою модель с помощью Simulink: enter image description hereгде числитель блока Transfer Fcn sys.num является sys.num и знаменателем sys.den (для моего примера). Если график, отображаемый в Scope (помните, что вы должны отключить «Limit Data points to last 5000» в настройках области), похоже на ваши outputdata оценка была успешной. Я сделал testrun для вашей модели: (фиксированный решатель шагов, отсутствие непрерывных состояний, 0.0001 steptime). enter image description hereЗатем следующий код:

    tfdata = iddata(inputdata,outputdata,0.0001);
    N = 5;
    sys = tfest(tfdata,N);
    bodeplot(sys)

    возвращения:

    sys =

    From input "u1" to output "y1":

    -2068 s^4 + 2.89e06 s^3 + 7.017e10 s^2 + 5.205e13 s - 8.931e15

    -------------------------------------------------------

    s^5 + 1.034e04 s^4 + 4.552e07 s^3 + 1.114e11 s^2 + 8.337e13 s + 8.931e15

    enter image description here

    а также: или преобразовать его в дискретный:

    sysd = c2d(sys,0.0001)

    sysd =

    From input "u1" to output "y1":

    -0.0995 z^-1 + 0.4644 z^-2 - 0.7491 z^-3 + 0.5061 z^-4 - 0.1219 z^-5

    -------------------------------------------------------

    1 - 4.042 z^-1 + 6.554 z^-2 - 5.332 z^-3 + 2.176 z^-4 - 0.3556 z^-5

    Я больше не могу помочь тебе, и это домашнее задание, так или иначе? Так что остальное зависит от вас. И, честно говоря, подсчитайте это вручную! Это будет гораздо точнее!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *