www.gusucode.com > control_featured 案例源码程序 matlab代码 > control_featured/notchdemo.m
%% Discretizing a Notch Filter % This example shows the comparison of several techniques for discretizing % a notch filter. While control system components are often designed in % continuous time, they must generally be discretized for implementation on % digital computers and embedded processors. % Copyright 1986-2012 The MathWorks, Inc. %% Continuous-Time Notch Filter % Notch filters are designed to reject signal content at a specific frequency by sharply % attenuating the gain at that frequency. For this example we consider the % following notch filter: % % $$ H(s) = {s^2 + 0.5 s + 100 \over s^2 + 5 s + 100} $$ % % You can plot the frequency response of this filter with the |bode| % command: H = tf([1 0.5 100],[1 5 100]); bode(H), grid %% % This notch filter provides a 20dB attenuation at the frequency w = 10 % rad/s. %% Choosing the Discretization Method % You can discretize a continuous-time system with the |c2d| command. % Several discretization algorithms are supported by Control System Toolbox(TM), including: % % * Zero-order hold % * First-order hold % * Impulse invariant % * Tustin (bilinear approximation) % * Tustin with frequency prewarping % * Matched poles and zeros % % Which method to choose depends on the application and requirements. %% % The zero- and first-order % hold methods and the impulse-invariant method are well-suited for discrete % approximations in the time domain. For example, the step response of the ZOH % discretization matches the continuous-time step response at each time step % (independently of the sampling rate): Ts = 0.1; Hdz = c2d(H,Ts,'zoh'); step(H,'b',Hdz,'r'), legend('Continuous','Discretized at 10 Hz') %% % Similarly, the impulse-invariant discretization has the same impulse % response as the original system: G = tf([1 -3],[1 2 10]); Gd = c2d(G,Ts,'imp'); impulse(G,'b',Gd,'r') legend('Continuous','Discretized at 10 Hz') %% % By contrast, the Tustin and Matched methods tend to perform better in the % frequency domain because they introduce less gain and phase distortion near the Nyquist % frequency. For example, compare the Bode responses of the continuous-time % notch filter and its discretizations using the ZOH, Tustin, and Matched % algorithms: Hdt = c2d(H,Ts,'tustin'); Hdm = c2d(H,Ts,'match'); bode(H,'b',Hdz,'r',Hdt,'m',Hdm,'g',{1 100}), grid legend('Continuous','ZOH','Tustin','Matched') %% % This comparison indicates that the Matched method provides the most % accurate frequency-domain approximation of the notch filter. However, you % can further improve the accuracy of the Tustin algorithm by specifying a % prewarping frequency equal to the notch frequency. This ensures accurate % match near w = 10 rad/s: Hdp = c2d(H,Ts,'prewarp',10); bode(H,'b',Hdt,'m',Hdp,'g',{1 100}), grid legend('Continuous','Tustin','Tustin with prewarping') %% Choosing the Sampling Rate % The higher the sampling rate, the closer the match between the % continuous and discretized responses. But how small can the sampling % rate be, or equivalently, how large can the sampling interval be? % As a rule of thumb, if you want the continuous and discretized models % to match closely up to some frequency |wm|, make sure that the % Nyquist frequency (sampling rate times Pi) is at least twice |wm|. % For the notch filter, you need to preserve % the shape near 10 rad/s, so the Nyquist frequency should be beyond % 20 rad/s, which gives a sampling period of at most pi/20 = 0.16 s. % % To confirm this choice, compare the matched discretizations with sampling period % 0.1, 0.15, and 0.3: Hd1 = c2d(H,0.1,'m'); Hd2 = c2d(H,0.15,'m'); Hd3 = c2d(H,0.3,'m'); bode(H,'b',Hd1,'r',Hd2,'m',Hd3,'g',{1 100}), grid legend('Continuous','Ts = 0.1','Ts = 0.15','Ts = 0.3') %% % As predicted, the discretization remains fairly accurate for % |Ts < 0.16| but starts breaking down for larger sampling intervals. %% Interactive GUI % Click on the link below to launch an interactive GUI that further % shows how the discretized notch filter is affected by % the choice of discretization algorithm and sampling rate. % % <matlab:notch_gui Open the Notch Discretization GUI> notch_gui