Contents
- Universal File Modal Demo
- Import Universal Data File
- List the Contents of First 20 Files
- Read All FRFs Into a Single FRF matrix
- Find and Plot Driving Point FRF of First Reference
- Select Frequency Range for Curve Fitting
- Truncate H and Convert to Mobility
- Calculate Impulse Responses of All FRFs in H
- Calculate Multivariate Mode Indicator Function
- Curvefit for Poles
- Curve Fit for Residues
- Import Geometry
- Set Up Animation
- Save the Third Mode Shape as an AVI File
Universal File Modal Demo
This demo shows how to import modal analysis data and a geometry from a universal file. In this script data are imported, then curve fitted. A predefined geometry is imported for animation of the modes, and finally an AVI file is generated of the animation of the first mode.
% Comments: % The curve fitting is done with COMPLEXP, which is NOT a polyreference implementation. % However, you can still use several references to obtain the poles. The data come from % a 2-input shaker test on a small plastic airplane model. In this demo we use both % references. % Copyright (c) 2003-2006, Axiom EduTech AB, Ljusterö, Sweden. All rights reserved. % URL: http://www.vibratools.com Email: info@vibratools.com Ref=[1:2]; UnvDataName='ModelPlaneFRF.unv'; UnvGeoName='ModelPlaneGeo.unv';
Import Universal Data File
lo=100; % File names will start with uf100
nseq=univread(100,UnvDataName);
hi=nseq-1;
Reading 58 Saved data as uf100.mat Reading 58 Saved data as uf101.mat Reading 58 Saved data as uf102.mat Reading 58 Saved data as uf103.mat Reading 58 Saved data as uf104.mat Reading 58 Saved data as uf105.mat Reading 58 Saved data as uf106.mat Reading 58 Saved data as uf107.mat Reading 58 Saved data as uf108.mat Reading 58 Saved data as uf109.mat Reading 58 Saved data as uf110.mat Reading 58 Saved data as uf111.mat Reading 58 Saved data as uf112.mat Reading 58 Saved data as uf113.mat Reading 58 Saved data as uf114.mat Reading 58 Saved data as uf115.mat Reading 58 Saved data as uf116.mat Reading 58 Saved data as uf117.mat Reading 58 Saved data as uf118.mat Reading 58 Saved data as uf119.mat Reading 58 Saved data as uf120.mat Reading 58 Saved data as uf121.mat Reading 58 Saved data as uf122.mat Reading 58 Saved data as uf123.mat Reading 58 Saved data as uf124.mat Reading 58 Saved data as uf125.mat Reading 58 Saved data as uf126.mat Reading 58 Saved data as uf127.mat Reading 58 Saved data as uf128.mat Reading 58 Saved data as uf129.mat Reading 58 Saved data as uf130.mat Reading 58 Saved data as uf131.mat Reading 58 Saved data as uf132.mat Reading 58 Saved data as uf133.mat Reading 58 Saved data as uf134.mat Reading 58 Saved data as uf135.mat Reading 58 Saved data as uf136.mat Reading 58 Saved data as uf137.mat Reading 58 Saved data as uf138.mat Reading 58 Saved data as uf139.mat Reading 58 Saved data as uf140.mat Reading 58 Saved data as uf141.mat Reading 58 Saved data as uf142.mat Reading 58 Saved data as uf143.mat Reading 58 Saved data as uf144.mat Reading 58 Saved data as uf145.mat Reading 58 Saved data as uf146.mat Reading 58 Saved data as uf147.mat Reading 58 Saved data as uf148.mat Reading 58 Saved data as uf149.mat Reading 58 Saved data as uf150.mat Reading 58 Saved data as uf151.mat Reading 58 Saved data as uf152.mat Reading 58 Saved data as uf153.mat Reading 58 Saved data as uf154.mat Reading 58 Saved data as uf155.mat Reading 58 Saved data as uf156.mat Reading 58 Saved data as uf157.mat Reading 58 Saved data as uf158.mat Reading 58 Saved data as uf159.mat Reading 58 Saved data as uf160.mat Reading 58 Saved data as uf161.mat Reading 58 Saved data as uf162.mat Reading 58 Saved data as uf163.mat Reading 58 Saved data as uf164.mat Reading 58 Saved data as uf165.mat Reading 58 Saved data as uf166.mat Reading 58 Saved data as uf167.mat Reading 58 Saved data as uf168.mat Reading 58 Saved data as uf169.mat Reading 58 Saved data as uf170.mat Reading 58 Saved data as uf171.mat Reading 58 Saved data as uf172.mat Reading 58 Saved data as uf173.mat Reading 58 Saved data as uf174.mat Reading 58 Saved data as uf175.mat Reading 58 Saved data as uf176.mat Reading 58 Saved data as uf177.mat Reading 58 Saved data as uf178.mat Reading 58 Saved data as uf179.mat Reading 58 Saved data as uf180.mat Reading 58 Saved data as uf181.mat Reading 58 Saved data as uf182.mat Reading 58 Saved data as uf183.mat Reading 58 Saved data as uf184.mat Reading 58 Saved data as uf185.mat Reading 58 Saved data as uf186.mat Reading 58 Saved data as uf187.mat Reading 58 Saved data as uf188.mat Reading 58 Saved data as uf189.mat Reading 58 Saved data as uf190.mat Reading 58 Saved data as uf191.mat Reading 58 Saved data as uf192.mat
List the Contents of First 20 Files
%There are some useful commands to list the contents of the imported % universal file, for example: funclist([100:119],'ref','uf');
File no Response Reference Func Type
101 1Z+ 7Z+ FRF
102 2Z+ 7Z+ FRF
103 3Z+ 7Z+ FRF
104 28Z- 7Z+ FRF
105 20Z+ 7Z+ FRF
106 30Z+ 7Z+ FRF
107 4Z+ 7Z+ FRF
108 5Z+ 7Z+ FRF
109 7Z- 7Z+ FRF
110 9Z+ 7Z+ FRF
111 8Z+ 7Z+ FRF
112 6Z+ 7Z+ FRF
113 21Z+ 7Z+ FRF
114 22Z+ 7Z+ FRF
115 23Z+ 7Z+ FRF
116 26Z+ 7Z+ FRF
117 25Z+ 7Z+ FRF
118 24Z+ 7Z+ FRF
119 33Z+ 7Z+ FRF
100 56Z+ 28Z+ FRF
Read All FRFs Into a Single FRF matrix
This will create a matrix, H, NoFreqs-By-NoResponses-By-NoForces and some vectors with DOFs and directions.
[H,f,ForceNo,ForceDir,RespNo,RespDir]=uf2frf(lo,hi,'no');
Warning: Duplicate FRF found for Response: 56Z+ and Force: 28Z+. Discarded.
Find and Plot Driving Point FRF of First Reference
idx=find(RespNo == ForceNo(Ref(1))); figure semilogy(f,abs(H(:,idx,1))) xlabel('Frequency, Hz') ylabel('Mobility, (m/s)/N')
Select Frequency Range for Curve Fitting
figtext(10,5,'Select Frequency range (low/high)') [ff,dd]=ginput(2); flo=ff(1); fhi=ff(2); fprintf('Frequency range %6.1f to %6.1f Hz selected.\n',ff)
Frequency range 25.9 to 103.3 Hz selected.
Truncate H and Convert to Mobility
All ModalTools curve fitting is done on mobility data
[Ht,ft]=frftrunc(H(:,:,Ref),f,flo,fhi); Hv=cvfrfa2v(Ht,ft);
Calculate Impulse Responses of All FRFs in H
[h,t,fs] = impresp(Hv,ft);
Calculate Multivariate Mode Indicator Function
MIF = muvamif(Hv);
Curvefit for Poles
poles = complexp(h,fs,min(200,length(ft)),40,MIF,ft); [fr,zr]=poles2fd(poles); fprintf('Resonance frequencies and damping ratios:\n') fprintf('%16s%16s\n','Undamped Freq.','Rel. Damping') fprintf('%11s%15s\n','Hz','%') fprintf('%12.2f%16.3f\n',[fr zr].') fprintf('\nPress any key to continue...\n') %
Resonance frequencies and damping ratios:
Undamped Freq. Rel. Damping
Hz %
28.35 1.223
40.23 1.223
75.08 0.709
83.79 0.742
91.38 1.066
94.22 0.666
97.67 0.861
99.61 0.794
Press any key to continue...
Curve Fit for Residues
DispTime=0; % Suppress plotting
[residues,residuals] = pol2resf(H(:,:,1),f,poles,5,120,DispTime);
Import Geometry
geo=univr15(UnvGeoName); plotseq=univr82(UnvGeoName); % UF2FRF sorts response dofs in ascending order. % So we need to sort geo in the same order. [dum,I]=sort(geo(:,1)); % Sort geo so first column is in ascending order geo=geo(I,:); [geonew,psnew,list] = geocond(geo,plotseq); % Check that "list" is equal to RespNo from the universal file FRFs if min((list == RespNo')) == 1 [M,N]=size(geonew); [MM,NN,RR]=size(residues); geoadd=[zeros(M,2) sign(RespDir').*[1:46]']; else error('Imported geometry and FRF are not consistent.') end geonew=[geonew geoadd];
Reading UF Type 15 Data block Reading UF Type 82 Data block Reading UF Type 82 Data block Reading UF Type 82 Data block Reading UF Type 82 Data block Reading UF Type 82 Data block Reading UF Type 82 Data block
Set Up Animation
N = length(poles); for n = 1:N sn = int2str(n); eval(['[gpoint,G',sn,',ref] = animcalc(geonew,psnew,residues(',sn,',:),.1,0);']) end x = 10*ones(1,N); y = linspace(10,90,N); y = fliplr(y); txt=sprintf('%4s%7.1f%3s','#1:',fr(1),' Hz'); for n = 2:N S=sprintf('%4s%7.1f%3s',['#' int2str(n) ':'],fr(n),' Hz'); txt = str2mat(txt,S); end % call = str2mat('animatebutt(1,gpoint,G1,ref,5,x,y,txt,call)'); for n = 2:N eval(['st = ''animatebutt(1,gpoint,G',int2str(n),',ref,5,x,y,txt,call)'';']); call = str2mat(call,st); end animatebutt(1,gpoint,G1,ref,5,x,y,txt,call); figtext(100,160,'Animate modes as you please. When done, continue by pressing'); fprintf(' <RETURN> when the Again button shows'); pause
<RETURN> when the Again button shows
Save the Third Mode Shape as an AVI File
mno = 3; % Mode number: change for another mode! [gpoint,G,gref]=animcalc(geonew,psnew,residues(mno,:),.05,0); FileName=strcat('Mode',num2str(fr(mno)),'Hz.avi'); close all avimode(FileName,gpoint,G,0,8,[-135,-360-135],[17,17]);
Watch the video