www.gusucode.com > control 案例程序 matlab源码代码 > control/ImproveAccuracyofDiscretizedSystemwithTimeDelayExample.m
%% Improve Accuracy of Discretized System with Time Delay % This example shows how to improve the frequency-domain accuracy of a system % with a time delay that is a fractional multiple of the sample time. % % For systems with time delays that are not integer multiples of the sample % time, the |Tustin| and |Matched| methods by default round the time delays % to the nearest multiple of the sample time. To improve the accuracy % of these methods for such systems, |c2d| can optionally approximate the % fractional portion of the time delay by a discrete-time all-pass filter % (a Thiran filter). In this example, discretize the system both without % and with an approximation of the fractional portion of the delay and compare % the results. % Copyright 2015 The MathWorks, Inc. %% % Create a continuous-time transfer function with a transfer delay of 2.5 s. G = tf(1,[1,0.2,4],'ioDelay',2.5); %% % Discretize |G| using a sample time of 1 s. |G| has a sharp % resonance at 2 rad/s. At a sample time of 1 s, that peak is close to % the Nyquist frequency. For a frequency-domain match that preserves % dynamics near the peak, use the Tustin method with prewarp frequency 2 % rad/s. discopts = c2dOptions('Method','tustin','PrewarpFrequency',2); Gt = c2d(G,1,discopts) %% % The software warns you that it rounds the fractional time delay to the % nearest multiple of the sample time. In this example, the time delay % of 2.5 times the sample time (2.5 s) converts to an additional factor of |z^(-3)| % in |Gt|. %% % Compare |Gt| to the continuous-time system |G|. plotopts = bodeoptions; plotopts.Ylim = {[-100,20],[-1080,0]}; bodeplot(G,Gt,plotopts); legend('G','Gt') %% % There is a phase lag between the discretized system |Gt| and the continuous-time % system |G|, which grows as the frequency approaches the Nyquist frequency. % This phase lag is largely due to the rounding of the fractional time delay. % In this example, the fractional time delay is half the sample time. %% % Discretize |G| again using a third-order discrete-time all-pass filter % (Thiran filter) to approximate the half-period portion of the delay. discopts.FractDelayApproxOrder = 3; Gtf = c2d(G,1,discopts); %% % The |FractDelayApproxOrder| option specifies the order of the Thiran filter % that approximates the fractional portion of the delay. The other options % in |discopts| are unchanged. Thus |Gtf| is a Tustin discretization of % |G| with prewarp at 2 rad/s. %% % Compare |Gtf| to |G| and |Gt|. plotopts.PhaseMatching = 'on'; bodeplot(G,Gt,Gtf,plotopts); legend('G','Gt','Gtf','Location','SouthWest') %% % The magnitudes of |Gt| and |Gtf| are identical. However, the phase of % |Gtf| provides a better match to the phase of the continuous-time system % through the resonance. As the frequency approaches the Nyquist frequency, % this phase match deteriorates. A higher-order approximation of the fractional % delay would improve the phase matching closer to the Nyquist frequencies. % However, each additional order of approximation adds an additional order % (or state) to the discretized system. %% % If your application requires accurate frequency-matching near the Nyquist % frequency, use |c2dOptions| to make |c2d| approximate the fractional portion % of the time delay as a Thiran filter.