- 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.
How to approximate a measured frequency response function to the sum of 2 1DOF vibration FRF functions?
20 views (last 30 days)
Show older comments
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).
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/955745/image.png)
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.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/955750/image.png)
0 Comments
Answers (1)
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:
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
2 Comments
Siti Abyad
on 3 Aug 2024 at 5:04
Hi, Abhishek, I am in need of similar help. I was wondering, if modalAmp is the mode shape vector, shouldn't the numerator be modalAmp.^2? As seen from the transfer function below, i thought mode shape vector was simply "u11" not "u11"^2. ![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1746001/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1746001/image.png)
Thank you in advance for the clearness in the code.
Umar
on 4 Aug 2024 at 19:01
Hi @Siti Abyad,
Using modalAmp.^2 in the numerator accounts for the energy contribution of the mode shape to the overall response. It is a common practice to square the mode shape vector to reflect its influence accurately in the system dynamics. So, in the context of your transfer function, using modalAmp.^2 is appropriate for capturing the mode's impact effectively.
See Also
Categories
Find more on Correlation Models 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!