How can I get a time response from FRD model

11 ビュー (過去 30 日間)
Bentolila Yedidia
Bentolila Yedidia 2023 年 12 月 7 日
回答済み: Sam Chak 2023 年 12 月 8 日
I have a model in FRD mode, I want to a) get a time response of this model, b) implement it in Simulink (both seems to be unavailable in Matlab)

採用された回答

Sam Chak
Sam Chak 2023 年 12 月 8 日
There isn't a direct function called 'frd2ss()' for the conversion you're looking for. However, you can estimate a state-space model from available frequency response data (FRD) using the 'ssest()' function. This function will provide you with the estimated state-space model, which you can then use in Simulink for simulation. This will allow you to obtain the time response of the equivalent FRD model.
%% Dummy state-space for FRD generation
ssA = [0 1; -1 -2];
ssB = [0; 1];
ssC = [1 0];
ssD = 0*ssC*ssB;
ss_Sys = ss(ssA, ssB, ssC, ssD);
%% Obtain Frequency-Response Data model
w = logspace(-2, 2, 50);
frdSys = frd(ss_Sys, w)
frdSys = Frequency(rad/s) Response ---------------- -------- 0.0100 9.997e-01 - 2.000e-02i 0.0121 9.996e-01 - 2.413e-02i 0.0146 9.994e-01 - 2.911e-02i 0.0176 9.991e-01 - 3.513e-02i 0.0212 9.987e-01 - 4.238e-02i 0.0256 9.980e-01 - 5.112e-02i 0.0309 9.971e-01 - 6.166e-02i 0.0373 9.958e-01 - 7.435e-02i 0.0450 9.939e-01 - 8.961e-02i 0.0543 9.912e-01 - 1.079e-01i 0.0655 9.872e-01 - 1.299e-01i 0.0791 9.814e-01 - 1.562e-01i 0.0954 9.731e-01 - 1.874e-01i 0.1151 9.611e-01 - 2.243e-01i 0.1389 9.439e-01 - 2.675e-01i 0.1677 9.194e-01 - 3.173e-01i 0.2024 8.851e-01 - 3.735e-01i 0.2442 8.375e-01 - 4.350e-01i 0.2947 7.730e-01 - 4.990e-01i 0.3556 6.884e-01 - 5.605e-01i 0.4292 5.817e-01 - 6.121e-01i 0.5179 4.549e-01 - 6.440e-01i 0.6251 3.150e-01 - 6.464e-01i 0.7543 1.751e-01 - 6.128e-01i 0.9103 5.124e-02 - 5.444e-01i 1.0985 -4.246e-02 - 4.512e-01i 1.3257 -9.962e-02 - 3.487e-01i 1.5999 -1.231e-01 - 2.525e-01i 1.9307 -1.220e-01 - 1.728e-01i 2.3300 -1.072e-01 - 1.128e-01i 2.8118 -8.707e-02 - 7.090e-02i 3.3932 -6.714e-02 - 4.334e-02i 4.0949 -4.995e-02 - 2.594e-02i 4.9417 -3.624e-02 - 1.529e-02i 5.9636 -2.585e-02 - 8.921e-03i 7.1969 -1.822e-02 - 5.164e-03i 8.6851 -1.274e-02 - 2.973e-03i 10.4811 -8.858e-03 - 1.706e-03i 12.6486 -6.135e-03 - 9.761e-04i 15.2642 -4.237e-03 - 5.576e-04i 18.4207 -2.921e-03 - 3.181e-04i 22.2300 -2.011e-03 - 1.813e-04i 26.8270 -1.384e-03 - 1.033e-04i 32.3746 -9.514e-04 - 5.883e-05i 39.0694 -6.538e-04 - 3.349e-05i 47.1487 -4.492e-04 - 1.906e-05i 56.8987 -3.086e-04 - 1.085e-05i 68.6649 -2.120e-04 - 6.175e-06i 82.8643 -1.456e-04 - 3.514e-06i 100.0000 -9.997e-05 - 2.000e-06i Continuous-time frequency response.
bode(ss_Sys,'b', frdSys,'r--'), grid on
%% Convert Frequency-Response Data model to Linear Time-Invariant System
ltiSys = ssest(frdSys)
ltiSys = Continuous-time identified state-space model: dx/dt = A x(t) + B u(t) + K e(t) y(t) = C x(t) + D u(t) + e(t) A = x1 x2 x1 -1 1 x2 -2.302e-14 -1 B = u1 x1 0 x2 1 C = x1 x2 y1 1 0 D = u1 y1 0 K = y1 x1 0 x2 0 Parameterization: FREE form (all coefficients in A, B, C free). Feedthrough: none Disturbance component: none Number of free coefficients: 8 Use "idssdata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using SSEST on frequency response data "frdSys". Fit to estimation data: 100% FPE: 9.314e-30, MSE: 7.935e-30
%% Extract matrices and store in Workspace for State-space block in Simulink
A = ltiSys.A; % state matrix
B = ltiSys.B; % input matrix
C = ltiSys.C; % output matrix
D = ltiSys.D; % direct matrix
%% Time response of the equivalent FRD model
step(ltiSys), grid on

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeNumeric Linear Time-Invariant Models についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by