Contents   Functions      PDF Index |
Identification is the process of estimating a parametric model (poles and modeshapes) that accurately represents measured data. The identification process is typically performed using the dock shown below opened with iicom('dockId').
The following procedure loads data from a .unv file but other way to open and load data are available.
% Unv with wire-frame, transfer and poles % Open empty dockid get pointer to feplot (cf) and iiplot (ci) [ci,cf]=iicom('dockid'); % Build gartid.unv file the first time, then provide file name fname=demosdt('build gartid.unv'); % Data are stored into a variable to help you build custom loading procedure UFS=ufread(fname); wire=UFS(1); % Test wireframe XF=UFS(2); % Transfers ID=UFS(3); % List of modes cf.mdl=wire; % Store the wireframe in the feplot figure % Put transfers to iiplot figure (Transfers named test are the ones ci.Stack{'curve','Test'}=XF; concerned by the current identification) ci.Stack{'curve','IdMain'}=ID; % Store the poles in the iiplot figure iicom('iix:TestOnly'); % Equivalent to : idcom figure, tab Stack, % right click on Test and select 'Display selected data'
When manual assignation is performed, do not forget to click on to refresh the tables (for instance the pole list in idcom). Note that to perform identification, only the transfers are needed: the wireframe allows visualizing the identified mode shapes and the list of poles is helpful if previous identification has been performed.
On top of the Test and IdMain data discussed above, other useful data used throughout the identification process and stored in the iiplot Stack are
[ci,cf]=gartid; % Open dockid with stored data and performs identification ci.Stack % Display list of stored data in the Stack of iiplot Test=ci.Stack{'curve','Test'}; % Retrieve data from iiplot IdFrf=ci.Stack{'curve','IdFrf'}; IdMain=ci.Stack{'curve','IdMain'}; IdAlt=ci.Stack{'curve','IdAlt'}; wire=cf.mdl.GetData; % GetData is used to retrieve a copy. % Otherwise all modifications are propagated to feplot
Here is a tutorial for interactive data loading in DockId
You will need the garteur example files, which can be found in SDTPath/sdtdemos/gart*.m. If these files are not present, click on the first step on the following tutorial in the HTML version of the documentation or download the patch at the adress https://www.sdtools.com/contrib/garteur.zip and unzip the content in the the folder SDTPath/sdtdemos.
The dock is divided in three parts:
Here are the 4 possible menus in this order: iiplot, idcom, feplot and feplot('mdl').
In the opening window, select the file to load. For this tutorial, the file is located at SDTPath/sdtdemos/gartid.unv.
Once selected, the Unv tab is displayed in the idcom or the feplot('mdl') figure (depending the chosen menu for ImportData.
It shows that three types of data are present in the file: a wireframe, transfers and identified mode shapes. Select the three check boxes to load everything.
The data are loaded: transfers are shown in the iiplot figure, the wireframe in the feplot figure and the list of poles in the tab Ident of the idcom figure.
A windows pops-up to ask what data must be saved. Save all (by default) to set all the data and info on the dockid in the saving file.
Close the dock. A pop-up should appear to ask if you really want to close iiplot (this is to ensure that no data is lost if no saving has been performed), click on Close without saving.
The proposed identification process is outlined below. The main steps of the methodology are
This process is handled through the Ident tab opened with iicom('InitIdent') or with the interface by clicking on Tab : Ident from the iiplot or idcom figure.
The main steps, associated with level 1 lines in the GUI tree are the topics of specific sections of the documentation:
The gartid script gives real data and an identification result for the GARTEUR example. The demo_id script analyses a simple identification example.
SDT stores transfer functions in the Response data (.w,.xf fields) or curve (.X,.Y fields) formats. The following table gives a partial list of systems with which the SDT has been successfully interfaced.
Vendor | Procedure used |
Bruel & Kjaer | Export data from Pulse to the UFF and read into SDT with ufread or use the Bridge To Matlab software and pulse2sdt. |
LMS | Export data from LMS CADA-X to UFF or MATLAB format. |
Polytec | Install the Polytec File Access library on your computer and use the polytec function to import .svd files directly. Alternatively, export data from PSV software to UFF. |
Dactron | Export data from RT-Pro software to the UFF. Use the Active-X API to drive the Photon from MATLAB see photon. |
MathWorks | Use Data Acquisition and Signal Processing toolboxes to estimate FRFs and create a script to fill in SDT information (see section 2.2.3). |
MTS | Export data from IDEAS-Pro software to UFF. |
Spectral Dynamics | Create a Matlab script to format data from SigLab to SDT format. |
The ufread and ufwrite functions allow conversions between the xf format and files in the Universal File Format which is supported by most measurement systems. A typical call would be
% generate gartid.unv (or retrieve file name if already generated) fname=demosdt('build gartid.unv'); UFS=ufread(fname); % read the unv file UFS % This command display in the command window the content of the file xf=UFS(2); % Read the transfers in the file and store in the variable xf %% Do everything needed with the data for customization if needed %%% % For instance extract channels 1:4 xf=fe_def('SubDofInd',xf,1:4) % Then pass to iiplot for view and ID purposes ci=idcom; % For identification purposes open IDCOM % Store transfers in 'Test' which are transfers to be identified ci.Stack{'curve','Test'}=xf; % To only view data in figure(11) the following would be sufficient cj=iiplot(11); % open an iiplot in figure 11 iiplot(cj,UFS(1)); % show UFS(1) there
where you read the database wrapper UFS (see xfopt), initialize the idcom figure, assign dataset 2 of UFS to dataset 'Test' 1 of ci (assuming that dataset two represents frequency response functions of interest).
Note that some acquisition systems write many universal files for a set of measurements (one file per channel). This is supported by ufread with a stared file name UFS=ufread('FileRoot*.unv');
fname=sdtcheck('patchget',struct('fname','PolytecMeas.svd')); % Provide a cell array with all readable measured data list=polytec('ReadList',fname); display(list); % Extract the transfer function Vib/Ref1 % with the estimator H1 Displacement/Voltage RO=struct('pointdomain','FFT','channel','Vib & Ref1',... 'signal','H1 Displacement / Voltage'); XF=polytec('ReadSignal',fname,RO); % alternative call using one row of the cell array "list" XF=polytec('ReadSignal',fname,struct('list',{list(20,:)}));
To avoid the manual filling of the reading options, it is also possible to simply load data from the interface : follow the tutorial in section section 2.2.1) but select the .svd file instead of the .unv file and do right-click+Read selected on the line you want to read. Loaded transfers can then be stored to variables with the command ci=iiplot;xf=ci.Stack{'Test'};
When writing your own script to transcript data to xfstruct format, you must have a MATLAB structure composed at minimum of the fields
Other fields may be required to specify the type of data and the type of model to use for identification. Two main optional fields are presented here:
This field should be set for title/legend generation (this is a label).
For correct display of shapes in feplot, the .dof may be a direct specification of direction in simple cases where the sensors are really oriented in global axes, but in general is just a label for the sensor orientation map stored in a sens.tdof field. See section 2.7 for details on geometry declaration.
In the example below one considers a MIMO test with 2 inputs and 4 outputs stored as columns of field .xf with the rows corresponding to frequencies stored in field .w. You script will look like
ci=idcom; [XF1,cf]=demosdt('demo2bay xf');% sample data and feplot pointer out_dof=[3:6]+.02'; % output dofs for 4 sensors in y direction in_dof=[6.02 3.01]; % input dofs for two shakers at nodes 1 and 10 out_dof=out_dof(:)*ones(1,length(in_dof)); in_dof=ones(length(out_dof),1)*in_dof(:)'; XF1=struct('w',XF1.w, ... % frequencies in Hz 'xf',XF1.xf, ... % responses (size Nw x (40)) 'dof',[out_dof(:) in_dof(:)]); XF1=xfopt('check',XF1); ci.Stack{'curve','Test'}=XF1; % sets data iicom(ci,'submagpha'); % display ci.Stack{'Test'}.idopt % field now points to ci.IDopt ci.IDopt.nsna=size(out_dof,1); % Possibly correct number of outputs ci.IDopt.recip='mimo';ci.IDopt % Set reciprocity to mimo cf.def=ci.Stack{'Test'}; fecom('ch35'); % frequency of first mode
You can check these values in the iicom('InitChannel') tab.
ci=demosdt('demogartid'); ci.IDopt.Residual='3'; ci.IDopt.DataType='Acc'; ci.IDopt.Absci='Hz'; ci.IDopt.PoleU='Hz'; iicom('wmin 6 40') % sets ci.IDopt.Selected ci.IDopt.Fit='Complex'; ci.IDopt % display current options
For correct transformations using id_rm, you should also verify ci.IDopt.NSNA (number of sensors/actuators), ci.IDopt.Reciprocity and ci.IDopt.Collocated.
For correct labels using iiplot you should set the abscissa, and ordinate numerator/denominator types in the data base wrapper. You can edit these values using the iiplot properties:channel tab. A typical script would declare frequencies, acceleration, and force using (see list with xfopt _datatype)
UFS(2).x='Freq';UFS(2).yn='Acc';UFS(2).yd='Load';UFS(2).info
The SDT does not intend to support the acquisition of test data since tight integration of acquisition hardware and software is mandatory. A number of signal processing tools are gradually being introduced in iiplot (see ii_mmif FFT or fe_curve h1h2). But the current intent is not to use SDT as an acquisition driver. The following example generates transfers from time domain data
frame=fe_curve('Testacq'); % 3 DOF system response % Time vector in .X field, measurements in .Y columns frf=fe_curve('h1h2 1',frame); % compute FRF ci=iicom('Curveid');iicom('curveinit','Test',struct('w',frf.X,'xf',frf.H1)) iicom('SubMagPha');
You can find theoretical information on data acquisition for modal analysis in Refs. [2][3][4][5][6].