MATLAB - Ukryte funkcje - lsim

Ten post inicjuje nowy cykl „Ukryte funkcje”  - czyli wpisy na temat pomocnych ale mało znanych funkcji MATLABa. Zaczynamy od lsim czyli badania odpowiedzi czasowych obiektów dynamicznych.

Czasami szukamy funkcji w MATLABie, która ma realizować specyficzne zadanie obliczeniowe ale nie możemy jej znaleźć. Zaczynamy więc sami pisać potrzebny nam program, poświęcając na to cenny czas. Często okazuje się jednak, że w przepastnej bibliotece MATLABa znajduje się potrzebna nam funkcja ale z jakiś powodów trudno ją odszukać lub nie jest tak popularna aby trafiła do podręczników programowania.

W cyklu „Ukryte funkcje” będę opisywał takie przypadki – funkcji pomocnych ale z jakiś powodów mało znanych. Na pierwszy ogień idzie lsim – funkcja służąca do obliczania odpowiedzi obiektu lub systemu dynamicznego na dowolne wymuszenie. Inspiracją do jej wyboru był fakt, że studenci, z którymi się spotykam często nie znają tej funkcji choć używają narzędzi pokrewnych jak impulse – do badania odpowiedzi impulsowej obiektu czy step – do wyznaczenia odpowiedzi na skok jednostkowy.

lsim – pozwala na więcej. Mianowicie dla zdefiniowanego obiektu dynamicznego (za pomocą transmitancji lub zmiennych stanu) pozwala uzyskać odpowiedz czasową na dowolne wymuszenie. Może to być sygnał syntetyczny wygenerowany przez nas w MATLABie albo sygnał zarejestrowany w rzeczywistości za pomocą karty pomiarowej. I to jest podstawowa zaleta funkcji lsim – możemy badać obiekty dynamiczne, nie tylko na wymuszenia standardowe ale dowolne, w tym te rzeczywiste.

Funkcja działa dla obiektów liniowych ciągłych i dyskretnych. Składnie ma prostą i możecie ją odszukać w dokumentacji MATLABa. Tu podam tylko jej podstawowe wywołanie, którego użyje w przykładzie obliczeniowym:

y = lsim(sys,u,t)

gdzie:

sys – definicja obiektu dynamicznego np. w  postaci transmitancji lub zmiennych stanu

u – sygnał wejściowy,

t – wektor czasu,

y – odpowiedz obiektu sys, dla chwil czasu z wektora t.

Jeżeli nie odbierzemy od funkcji odpowiedzi obiektu y, czyli wywołamy ją w taki sposób ‘lsim(sys,u,t)’, to funkcja narysuje te odpowiedź automatycznie na rysunku.

Warto dodać, że obiekt może być o jednym lub wielu wejściach i wyjściach.

PRZYKŁAD:

Rozpatrzmy obiekt dynamiczny, inercyjny I rzędu. Jak wiadomo obiekt taki opisany jest transmitancją w postaci:

A jego parametry to wzmocnienie k i stała czasowa T. Porównajmy odpowiedzi dwóch obiektów o różnych stałych czasowych na wymuszenie prostokątne:

close all; clear all; clc

%%  parametry symulowanego sygnału wymuszającego 
fpr=1000; dt=1/fpr;     % częstotliwość i okres próbkowania
to=0.2;                 % czas obserwacji sygnału
N=to/dt;                % liczba próbek
t=(0:N-1)'*dt;          % wektor czasu

% Obiekt inercyjny pierwszego rzędu dla dwóch stałych czasowych T1 i T2
disp('-----------------------------------------------------------------------------------');
disp('transmitancja ciągła obiektu nr 1:')
k1=1; T1=0.001;
sys1=tf(k1,[T1 1])

disp('transmitancja ciągła obiektu nr 2:')
k2=1; T2=0.005;
sys2=tf(k2,[T2 1])

% SYMULACJA OBIEKTU DYNAMICZNEGO

% wymuszenie u
f=15;
u = square(2*pi*f*t);
% u = sawtooth(2*pi*f*t);

y1=lsim(sys1,u,t);
y2=lsim(sys2,u,t);

figure;plot(t,u,t,y1,t,y2,'LineWidth', 2);
xlabel('czas [s]'); ylabel('odpowiedź obiektu [-]');
legend('wymuszenie', 'odpowiedź 1', 'odpowiedź 2'); grid on; 



Otrzymujemy:

Widzimy klasyczne odpowiedzi wykładnicze obiektów inercyjnych. Widać wyraźnie, że obiekt nr 1 ma mniejszą stałą czasową niż obiekt nr 2, gdyż „szybciej” osiąga stan ustalony.

Jeżeli teraz chcemy zbadać odpowiedz tych obiektów na dowolne inne wymuszenie, np. piłokształtne, wystarczy zamienić zmienną u na: u = sawtooth(2*pi*f*t);

Za u możemy podstawić dowolny wygenerowany albo zarejestrowany w rzeczywistości sygnał. Dzięki temu lsim staje się narzędziem uniwersalnym, pozwalającym nie tylko badać odpowiedzi obiektów na wymuszenia standardowe ale również rzeczywiste. Jest to pomocne przy weryfikacji modeli, kiedy porównujemy ich odpowiedź z odpowiedzią rzeczywistego obiektu.

(Visited 48 times, 1 visits today)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *