www.gusucode.com > control 案例程序 matlab源码代码 > control/FrequencyResponseDataFRDModelWithTimeDelayExample.m
%% Frequency Response Data (FRD) Model with Time Delay % This example shows that absorbing time delays into frequency response data % can cause undesirable phase wrapping at high frequencies. %% % When you collect frequency response data for a system that includes time % delays, you can absorb the time delay into the frequency response as a % phase shift. Alternatively, if you are able to separate time delays from % your measured frequency response, you can represent the delays using the % |InputDelay|, |OutputDelay|, or |ioDelay| properties of the |frd| model % object. The latter approach can give better numerical results, as this % example illustrates. %% % The |frd| model |fsys| includes a transport delay of 2 s. Load the model % into the MATLAB(R) workspace and inspect the time delay. load(fullfile(matlabroot,'examples','control','frddelayexample.mat'),'fsys') fsys.IODelay %% % A Bode plot of |fsys| shows the effect of the transport % delay, causing the accumulation of phase as frequency increases. bodeplot(fsys) %% % The |absorbDelay| command absorbs % all time delays directly into the frequency response, resulting in % an |frd| model with |IODelay = 0|. fsys2 = absorbDelay(fsys); fsys2.IODelay %% % Comparing the two ways of representing the delay shows that absorbing the % delay into the frequency response causes phase-wrapping. bode(fsys,fsys2) %% % Phase wrapping can introduce numerical inaccuracy at high frequencies or % where the frequency grid is sparse. For that reason, if your system takes % the form $e^{-\tau s}G(s)$, you might get better results by measuring % frequency response data for _G_(_s_) and using |InputDelay|, % |OutputDelay|, or |ioDelay| to model the time delay $\tau$.