www.gusucode.com > ident_featured 案例代码 matlab源码程序 > ident_featured/cs2.m

    %% Modeling Current Signal From an Energizing Transformer 
% This example shows the modeling of a measured signal. We analyze the
% current signal from the R-phase when a 400 kV three-phase transformer is
% energized. The measurements were performed by Sydkraft AB in Sweden.
%
% We describe the use of function |ar| for modeling the current signal. A
% non-parametric analysis of the signal is first performed. Tools for
% choosing a reasonable model order are then discussed, along with the use
% of |ar| for signal modeling. Methods for fitting a model to only a chosen
% range of harmonics are also discussed.

%   Copyright 1986-2014 The MathWorks, Inc.

%% Introduction
% Signals can be considered as the impulse response of an autoregressive
% linear model, and can thus be modeled using tools such as |ar|.
%
% Data for signals can be encapsulated into |iddata| objects, by setting
% the output data of the object to the signal values, and leaving the input
% empty. For example, if |x(t)| represents a signal to be modeled, then the
% corresponding |iddata| object can be created as: 
% |data = iddata(x,[],T);|, where |T| is the sample time of |x|.
% 
% Standard identification tools, such as |n4sid|, |ssest|, |ar| and |arx|
% may be used to estimate the characteristics of the "output-only" data.
% These models are assessed for their spectral estimation capability, as
% well as their ability to predict the future values of the signal from a
% measurement of their past values.

%% Analyzing Data
% We begin this case study by loading the data for the current signal from
% the transformer: 
load current.mat

%%
% Now, we package the current data (|i4r|) into an |iddata| object. The
% sample time is 0.001 seconds (1 |ms|).
i4r = iddata(i4r,[],0.001)  % Second argument empty for no input
%%
% Let us now analyze this data. First, take a look at the data:
plot(i4r)
%%
% A close up view of the data is shown below:
plot(i4r(201:250))

%%
% Next, we compute the raw periodogram of the signal:
ge = etfe(i4r)
spectrum(ge)
%%
% This periodogram reveals several harmonics, but is not very smooth. A
% smoothed periodogram is obtained by:
ges = etfe(i4r,size(i4r,1)/4); 
spectrum(ge,ges); 
legend({'ge (no smoothing)','ges (with smoothing)'})

%%
% Configure thee plot to use linear frequency scale and Hz units:
h = spectrumplot(ges);
opt = getoptions(h);
opt.FreqScale = 'linear';
opt.FreqUnits = 'Hz';
setoptions(h,opt);
axis([0 500,-5 40])
grid on, legend('ges')

%%
% We clearly see the dominant frequency component of 50 Hz, and its
% harmonics. 

%%
% Let us perform a spectral analysis of the data using |spa|, which uses a
% Hann window to compute the spectral amplitudes (as opposed to |etfe|
% which just computes the raw periodogram). The standard estimate  (with
% the default window % size, which is not adjusted to resonant spectra)
% gives: 
gs =  spa(i4r);
hold on
spectrumplot(gs);
legend({'ges (using etfe)','gs (using spa)'})
hold off

%%
% We see that a very large lag window will be required to see all the fine
% resonances of the signal. Standard spectral analysis does not work well.
% We need a more sophisticated model, such as those provided by parametric
% autoregressive modeling techniques.

%% Parametric Modeling of the Current Signal
% Let us now compute the spectra by parametric AR-methods. Models of 2nd
% 4th and 8th order are obtained by:
t2 = ar(i4r,2); 
t4 = ar(i4r,4); 
t8 = ar(i4r,8); 

%%
% Let us take a look at their spectra:
spectrumplot(t2,t4,t8,ges,opt);
axis([0 500,-8 40])
legend({'t2 (2nd order AR)','t4 (4th order AR)','t8 (8th order AR)','ges (using spa)'});

%%
% We see that the parametric spectra are not capable of picking up the
% harmonics. The reason is that the AR-models attach too much attention to
% the higher frequencies, which are difficult to model. (See Ljung (1999)
% Example 8.5).
%
% We will have to go to high order models before the harmonics are picked
% up.

%%
% What will a useful order be? We can use |arxstruc| to determine that.
V = arxstruc(i4r(1:301),i4r(302:601),(1:30)'); % Checking all order up to 30

%%
% Execute the following command to select the best order interactively:
% |nn = selstruc(V,'log');|
%
% <<../cs2_modelorder_arx.png>>

%%
% As the figure above shows, there is a dramatic drop for |n=20|. So let us
% pick that order for the following discussions.
t20 = ar(i4r,20); 
spectrumplot(ges,t20,opt); 
axis([0 500 -25 80])
legend({'ges (using spa)','t20 (20th order AR)'});

%%
% All the harmonics are now picked up, but why has the level dropped?
% The reason is that |t20| contains very thin but high peaks. With the
% crude grid of frequency points in |t20| we simply don't see the 
% true levels of the peaks. We can illustrate this as follows:
g20c = idfrd(t20,(551:650)/600*150*2*pi); % A frequency region around 150 Hz
spectrumplot(ges,t20,g20c,opt)
axis([0 500 -25 80])
legend({'ges (using spa)','t20 (20th order AR)','g20c (resp. around 150 Hz)'});
%%
% As this plot reveals, the model |t20| is fairly accurate; when plotted
% on a fine frequency grid, it does capture the harmonics of the signal
% quite accurately.

%% Modeling Only the Lower-Order Harmonics 
% If we are primarily interested in the lower harmonics, and want to
% use lower order models we will have to apply prefiltering of
% the data. We select a 5th order Butterworth filter with cut-off
% frequency at 155 Hz. (This should cover the 50, 100 and 150 Hz modes):
i4rf = idfilt(i4r,5,155/500); % 500 Hz is the Nyquist frequency
t8f = ar(i4rf,8);  

%%
% Let us now compare the spectrum obtained from the filtered data (8th
% order model) with that for unfiltered data (8th order) and with the
% periodogram:
spectrumplot(t8f,t8,ges,opt)
axis([0 350 -60 80])
legend({'t8f (8th order AR, filtered data)',...
   't8 (8th order AR, unfiltered data)','ges (using spa)'});

%%
% We see that with the filtered data we pick up the first three peaks in
% the spectrum quite well. 

%% 
% We can compute the numerical values of the resonances as follows:
% The roots of a sampled sinusoid of frequency, say |om|, are located on
% the unit circle at |exp(i*om*T)|, |T| being the sample time. We
% thus proceed as follows:
a = t8f.a % The AR-polynomial
omT = angle(roots(a))'
freqs = omT/0.001/2/pi'; 
% show only the positive frequencies for clarity: 
freqs1 = freqs(freqs>0) % In Hz
%%
% We thus find the first three harmonics (50, 100 and 150 Hz) quite well.   

%%  
% We could also test how well the model |t8f| is capable of predicting the
% signal, say 100 ms (100 steps) ahead, and evaluate the fit on samples 201
% to 500:
compare(i4rf,t8f,100,compareOptions('Samples',201:500));
%%
% As observed, a model of the first 3 harmonics is pretty good at
% predicting the future output values, even 100 steps ahead.

%% Modeling Only the Higher-Order Harmonics 
% If we were interested in only the fourth and fifth harmonics (around
% 200 and 250 Hz) we would proceed by band-filtering the data to this
% higher frequency range:
i4rff = idfilt(i4r,5,[185 275]/500);
t8fhigh = ar(i4rff,8);  
spectrumplot(ges,t8fhigh,opt)
axis([0 500 -60 40])
legend({'ges (using spa)','t8fhigh (8th order AR, filtered to high freq. range)'});

%%
% We thus got a good model in |t8fhigh| for describing the 4th and 5th
% harmonics. We thus see that with proper prefiltering, low order
% parametric models can be built that give good descriptions of the signal
% over the desired frequency ranges.

%% Conclusions
% Which model is the best? In general, a higher order model would give a
% higher fidelity. To analyze this, we consider what the 20th order 
% model would give in terms of its capability in estimating harmonics: 
a = t20.a  % The AR-polynomial
omT = angle(roots(a))'
freqs = omT/0.001/2/pi'; 
% show only the positive frequencies for clarity: 
freqs1 = freqs(freqs>0) %In Hz

%%
% We see that this model picks up the harmonics very well. This model will
% predict 100 steps ahead as follows: 
compare(i4r,t20,100,compareOptions('Samples',201:500));

%% 
% We now have a 93% fit with |t20|, as opposed to 80% for |t8f|. 
%
%% 
% We thus conclude that for a complete model of the signal, |t20| is the
% natural choice, both in terms of capturing the harmonics as well as in
% its prediction capabilities. For models in certain frequency ranges we can
% however do very well with lower order models, but we then have to
% prefilter the data accordingly.

%% Additional Information
% For more information on identification of dynamic systems with System
% Identification Toolbox visit the
% <http://www.mathworks.com/products/sysid/ System Identification Toolbox> product
% information page.