Clear Filters
Clear Filters

How to approximate a measured frequency response function to the sum of 2 1DOF vibration FRF functions?

11 views (last 30 days)
I have measured the vibration frequency response function a structure (blue curves in the following diagrams).
By using command
SYSD=tfest(SYSFR,5);
% SYSFR is the measured result (imported beginning from 25 Hz, as the
% low-frequency area is not accurate). SYSD is the approximated FRF.
I can approximate the measured FRF to a transfer function with 5 poles (the least amount of poles needed for the approximation to be accurate enough).
Since the measured FRF curves clearly have the shape of 2DOF vibration system, I want to further approximate the transfer function as the sum of two 1DOF vibration transfer functions, and draw both 1DOF vibration FRF curves in diagram (like in the following diagram). How to achieve this? The approximation can either be done based on measured FRF or approximated 5-pole FRF.

Answers (1)

Abhishek Chakram
Abhishek Chakram on 14 Feb 2024
Hi DFfd,
To approximate the measured frequency response function (FRF) of a structure as the sum of two single degree of freedom (1DOF) vibration systems, you can perform a modal analysis. This involves estimating the modal parameters (natural frequencies, damping ratios, and mode shapes) from the measured FRF data. Once you have these parameters, you can construct two 1DOF system transfer functions and sum them to approximate the original FRF.
Here is an approach on how to achieve this in MATLAB:
  • Use the “modalfit” function from the “System Identification Toolbox” to estimate the modal parameters from the measured FRF.
  • Based on the estimated modal parameters, create two 1DOF transfer functions representing the two modes.
  • Combine the two 1DOF transfer functions to form a 2DOF approximation of the original system.
  • Compare the original FRF with the sum of the two 1DOF transfer functions by plotting them.
Here is a pseudo code for the same:
% Assuming SYSFR is your measured FRF starting from 25 Hz
% and SYSD is the 5-pole transfer function approximation
% Step 1: Estimate Modal Parameters
[fn, zeta, modalAmp] = modalfit(SYSD, 'FitMethod', 'lsqnonlin');
% Step 2: Construct 1DOF Transfer Functions
% Assuming the first two natural frequencies correspond to the 2DOF system
s = tf('s');
TF1 = modalAmp(1) / (s^2 + 2*zeta(1)*fn(1)*s + fn(1)^2);
TF2 = modalAmp(2) / (s^2 + 2*zeta(2)*fn(2)*s + fn(2)^2);
% Step 3: Sum the 1DOF Transfer Functions
TF_sum = TF1 + TF2;
% Step 4: Plot the Results
% Extract frequency vector from the measured FRF
freq = SYSFR.Frequency;
% Evaluate the transfer functions at the measured frequencies
[frf1, ~] = freqresp(TF1, freq*2*pi); % Convert Hz to rad/s
[frf2, ~] = freqresp(TF2, freq*2*pi);
[frf_sum, ~] = freqresp(TF_sum, freq*2*pi);
% Convert to magnitude and phase
frf1_mag = abs(frf1);
frf2_mag = abs(frf2);
frf_sum_mag = abs(frf_sum);
% Plot the original and approximated FRFs
figure;
subplot(2,1,1); % Magnitude plot
semilogy(freq, abs(SYSFR.ResponseData), 'b', freq, frf1_mag, 'r--', freq, frf2_mag, 'g--', freq, frf_sum_mag, 'k-.');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
legend('Measured FRF', '1DOF Mode 1', '1DOF Mode 2', 'Sum of 1DOF Modes');
subplot(2,1,2); % Phase plot
plot(freq, angle(SYSFR.ResponseData), 'b', freq, angle(frf1), 'r--', freq, angle(frf2), 'g--', freq, angle(frf_sum), 'k-.');
xlabel('Frequency (Hz)');
ylabel('Phase (radians)');
legend('Measured FRF', '1DOF Mode 1', '1DOF Mode 2', 'Sum of 1DOF Modes');
You can refer to the following documentation to know more about the “modalfit” function: https://www.mathworks.com/help/signal/ref/modalfit.html
Best Regards,
Abhishek Chakram

Categories

Find more on Vibration Analysis in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!