2017-01-14 7 views
0

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

for i=1:201 
    u(i) = 1; 
    x1(i+1) = (-(b/J)*x1(i) + (K/J)*x2(i)); 
    x2(i+1) = (-(K/L)*x1(i) - (R/L)*x2(i) + (1/L)*u(i)); 
    y(i) = x1(i); 
end 

и это пространство состояний уравнения:

A = [-b/J K/J 
    -K/L -R/L]; 
B = [0 
    1/L]; 
C = [1 0]; 
D = 0; 

Если я сделать:

t = 0:1:200; 
plot(t, y) 

он не работает, и я хочу, чтобы иметь такие же результаты, как и этапная функция ниже:

sys = ss(A,B,C,D); 
step(sys) 

Вы можете найти мое уравнение состояния пространства here.

ответ

1

Причина несоответствия в том, что sys является моделью непрерывного времени, тогда как вычисление y рассматривает его как систему с дискретным временем.

Ниже приведен способ оценки ступенчатую характеристику непрерывного времени системы в области дискретного времени:

% Given from the problem statement 
A = [-b/J K/J 
    -K/L -R/L]; 
B = [0 
    1/L]; 
C = [1 0]; 
D = 0; 

% this is your continuous-time model 
sys = ss(A,B,C,D); 

% define the sample rate of the equivalent discrete-time model 
Ts = 1/10; 
% this needs to be something smaller than the time-constants in your model, 
% so that you have enough resolution to represent the continuous-time 
% signal. 

% convert the system to the equivalent discrete-time model 
sysd = c2d(sys,Ts); 

% define how long a step response you'd like to compute 
T = 7; 
% this should be long enough to cover the length of the step response 


t = 0:Ts:T; % time-grid for the plot 
nSmp = length(t); % total number of samples to be computed 

% initializations 
y = NaN(1, nSmp); % output vector 
u = ones(1, nSmp); % unit step input 
X = [0; 0]; % state vector, initialized to 0 

% compute the samples of the step-response 
% (i prefer to use vectorized form to keep the code concise) 
for i=1:nSmp 
    y(i) = sysd.C * X + sysd.D * u(i); 
    X = sysd.A * X + sysd.B * u(i); 
end 

% plot continous-time step response 
figure; 
step(sys); 

% plot simulated discrete-time step response 
figure; 
plot(t, y, 'r') 
xlabel('Time (s)'); 
ylabel('Amplitude'); 
title('Simulated Step Response'); 
+0

Большое спасибо, что это здорово. Затем мне нужно добавить ПИД-регулятор. Можете ли вы рассказать мне, как получить ошибку, ошибку intagretion и ошибку производной ?? Мне нужны эти 3 значения для генерации параметров ПИД с помощью генетического алгоритма – Masaj

+0

@Masaj: Я боюсь, что я не смогу правильно ответить на это. Вам будет лучше опубликовать это как новый вопрос, чтобы кто-то еще мог. – aksadv

+0

Я уже спрашиваю новый. Еще раз спасибо за помощь – Masaj