No BSD License  

Highlights from
Linear forced system with viscous damping

image thumbnail
from Linear forced system with viscous damping by Cristian Gutierrez Acuna
Frequency response function and modal parameter estimation.

Hcanonical(mass,damp,stiff,Wmax,N_Sample,Noise_Factor,out,inp)
function [H,w,modal_par] = Hcanonical(mass,damp,stiff,Wmax,N_Sample,Noise_Factor,out,inp)

%HCANONICAL   Frequency response function and modal parameter estimation for a N 
% degrees of freedom lineal forced system with viscous damping.
% 
% Syntax: [H,w,par] = Hcanonical(mass,damp,stiff,Wmax,N_Sample,Noise_Factor,out,inp)
%
% Example for system with 3 degrees of freedom:
%       mass         = 0.3*[1,0,0;0,1,0;0,0,1];       %mass matrix
%       damp         = 0.1*[2,-1,0;-1,2,-1;0,-1,2];   %damp matrix
%       stiff        = 10000*[2,-1,0;-1,2,-1;0,-1,2]; %stiff matrix
%       Wmax         = 500;                           %max. frequency (rad/sec)
%       N_Sample     = 512;                           %number of frequency samples
%       Noise_Factor = 0;                             %noise factor
%       out          = 1;                             %response point
%       inp          = 1;                             %input point
%
%       H   = Frequency response function
%       w   = frequency range (rad/sec)
%       modal_par = Modal Parameters [freq,damp,Ci,Oi]: 
%                   freq = Natural frequencies (rad/sec)
%                   damp = Damping ratio
%                   Ci   = Amplitude modal constant
%                   Oi   = Phase modal constant (degrees)
% 
%-----------------------------------------------------------------------------------
% Cristian Gutierrez Acuna, February 2002. crguti@icqmail.com
%-----------------------------------------------------------------------------------

dw = Wmax/N_Sample;
[N,c] = size(mass);
null = zeros(N,N);

%state-space formulation
A = [damp,mass;mass,null];
B = [stiff,null;null,-mass];

[V,D] = eig(B,-A); 
	lambda = diag(D);
	[Y,I] = sort(imag(lambda));
	polos = lambda(I);
    psi = V(:,I);
a = psi.'*A*psi;
b = psi.'*B*psi;

%Frequency Response Function
FRF = 0;
for n = 1:N
   w = dw:dw:Wmax;
   residuo = psi(1:N,N+n)*psi(1:N,N+n).'./a(N+n,N+n);
   H = residuo(out,inp)./(j.*w - polos(N+n)) + conj(residuo(out,inp))./(j.*w - conj(polos(N+n)));
   FRF = FRF + H;   
   matrix_residuo(n,1) = residuo(out,inp);
end

%generating IRF. If Noise_Factor = 0, this part can be omitted
IRF = ifft(FRF,N_Sample);
max_irf = max(abs(IRF));
ruido = Noise_Factor*max_irf*randn(size(IRF));
%sprintf('SNR = %0.5g [dB].',20*log10(std(IRF)/std(ruido))),
IRF = IRF + ruido;
H = fft(IRF,N_Sample);

polos = polos((length(polos)/2)+1:end,1); 
	freq = abs(polos); %Natural frequencies (rad/sec)
    damp = -real(polos)./abs(polos); %Damping ratio
   
Ai = -2*(real(matrix_residuo).*real(polos) + imag(matrix_residuo).*imag(polos));
Bi = 2*real(matrix_residuo);
const_modal = complex(Ai,abs(polos).*Bi);
	Ci = abs(const_modal); %Amplitude modal constant
	Oi = angle(const_modal).*180/pi; %Phase modal constant (degrees)

modal_par = [freq, damp, Ci, Oi] %Modal Parameters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Contact us at files@mathworks.com