Can someone help me to obtain the FRF curve and plot the curve?

9 vues (au cours des 30 derniers jours)
Midhun
Midhun le 19 Sep 2025
Commenté : dpb le 19 Sep 2025
%%
% clear memory
clear all
clc
%% % Define material properties and beam dimensions % % %
%xx----------------------------------------------------------------------------------------xx%
width = 0.3; % beam width
t1 = 0.1; % beam thickness of first layer
t2 = 0.1; % beam thickness of second layer
L = 1; % beam length
poisson1 = 0.33; % Poisson's ratio first layer
poisson2 = 0.33; % Poisson's ratio second layer
rho1 = 1700; % density of material 1
rho2 = 1240; % density of material 2
E1 = 2.2e11; % modulus of elasticity for material 1
E2 = 7.9e19; % modulus of elasticity for material 1
E3=7.9e9; % modulus of elasticity for material 2
% % % beam load parameters % % %
%xx----------------------------------------------------------------------------------------xx%
n = 0; % material gradation index
P = -100; % uniform distributed load
Mb = 24.4; % ratio of Young's moduli between two materials
E2 = E1 / Mb;
% % % Derived FGM parameters % % %
%xx----------------------------------------------------------------------------------------xx%
[C1, I01, I1, A01] = effectstifmass(width, t1, rho1, rho2, E1, E2, Mb, n, poisson1);
Unrecognized function or variable 'effectstifmass'.
[C2, I02, I2, A02] = effectstifmass(width, t2, rho1, rho2, E3, E3, Mb, n, poisson2);
% Mass parameters for FGM
numberElements = 40;
nodeCoordinates = linspace(0, L, numberElements + 1);
xx = nodeCoordinates';
x = xx';
elementNodes = zeros(size(nodeCoordinates, 2) - 1, 2);
for i = 1:size(nodeCoordinates, 2) - 1
elementNodes(i, 1) = i;
elementNodes(i, 2) = i + 1;
end
numberNodes = size(xx, 1);
GDof = 2 * numberNodes;
% % % Static analysis % % %
%xx----------------------------------------------------------------------------------------xx%
% Computation of the system stiffness, force, mass
[stiffness1, force, mass1] = formStiffnessMassTimoshenkoBeam(GDof, numberElements, ...
elementNodes, numberNodes, xx, C1, P, rho1, I01, t1);
[stiffness2, ~, mass2] = formStiffnessMassTimoshenkoBeam(GDof, numberElements, ...
elementNodes, numberNodes, xx, C2, P, rho1, I02, t2);
% % % Boundary conditions % % %
%xx----------------------------------------------------------------------------------------xx%
fixedNodeW = [1, 1];
fixedNodeTX = [1, 2];
prescribedDof = [fixedNodeW; fixedNodeTX + numberNodes];
stiffness = stiffness1 + stiffness2 + stiffness1;
mass = mass1 + mass2 + mass1;
K = stiffness;
m = mass;
% % % Free vibration analysis % % %
%xx----------------------------------------------------------------------------------------xx%
[modes, eigenvalues] = eigenvalue(GDof, prescribedDof, stiffness, mass, 0);
omega = sqrt(eigenvalues) * L * L * sqrt(rho1 * A01 / E1 / I01);
disp('First 3 dimensionless frequencies:')
disp(omega(1:3))
f = sqrt(eigenvalues);
disp('First 3 natural frequencies (Hz):')
disp(f(1:3))
% Drawing mesh and deformed shape
modeNumber = 3;
V1 = modes(:, 1:modeNumber);
% Normalize the mode shapes for better visualization
for i = 1:modeNumber
V1(:,i) = V1(:,i) / max(abs(V1(:,i)));
end
% Plot the first 3 mode shapes
figure;
for i = 1:modeNumber
subplot(3,1,i);
plot(x, V1(1:numberNodes, i), 'LineWidth', 2);
title(['Mode Shape ', num2str(i)]);
xlabel('Beam Length (x)');
ylabel('Normalized Displacement');
grid on;
end
% Solve for static displacements
displacements = solution(GDof, prescribedDof, stiffness, force);
U = displacements;
% Max displacement
disp('Max normal displacement:')
disp(min(U(1:numberNodes)))
% % % Forced vibration analysis % % %
%xx----------------------------------------------------------------------------------------xx%
c1 = 1.5;
c2 = 0.9; % damping coefficients
Ca = c1 * mass + c2 * stiffness;
F = @(t) force * sin(2* t); % time-dependent load
D0 = zeros(GDof,1); % initial displacement
V0 = zeros(GDof,1); % initial velocity
dt = 0.005; T = 100; tt = 0:dt:T;
[D, V, A] = Newmark(mass, Ca, stiffness, F, D0, V0, dt, T);
% Plot forced vibration displacement at a node
figure;
plot(tt, D(21,:), 'b', 'LineWidth', 2);
title('Forced Vibration Displacement at Node 21');
xlabel('Time (s)');
ylabel('Displacement');
grid on;
% % % Export results to Excel % % %
%xx----------------------------------------------------------------------------------------xx%
xlswrite('mode vibration result.xlsx', [x(:), V1(1:numberNodes,:)]);
xlswrite('normal displacement.xlsx', [x(:), U(1:numberNodes,:)]);
xlswrite('forced displacement.xlsx', [tt', D(21,:)']);
this is my current code
  8 commentaires
Sam Chak
Sam Chak le 19 Sep 2025
@Midhun, From your reply, I gather that you may be unable to provide the 5 functions that Mathieu requested to help you. In that case, you need to provide the mathematical formulas. Do you have the textbook, "Engineering Mechanics: Statics & Dynamics" by Hibbeler? We can likely guide you on how to implement those in MATLAB.
dpb
dpb le 19 Sep 2025
Modifié(e) : dpb le 19 Sep 2025
@Midhun downloaded or was given the unamed posted script but a search did not uncover the source for any of the missing functions nor do we know its provenance so have no way to find from whence it came and @Midhun isn't being forthright in volunteering any information nor shown any interest in providing any input from his end.
In line with blindly applying code without understanding what it is doing, see <Frequency Response Functions for Modal Analysis> in Signal Processing Toolbox.

Connectez-vous pour commenter.

Réponses (1)

Sam Chak
Sam Chak le 19 Sep 2025
Déplacé(e) : dpb le 19 Sep 2025
The beam data and load parameters are provided. Logically, by using the effectstifmass() function, the beam input data are used to obtain [C1, I01, I1, A01], which are required by the formStiffnessMassTimoshenkoBeam() function to return the mass, stiffness, and force matrices as outputs. These matrices typically constitute the MIMO system represented by the equation, , which can be expressed in the form of a state-space system. Subsequently, follow the guidance provided by @dpb to obtain the FRF for modal analysis.
Code snippet:
A = [0 1;
-1 -0.1];
B = [0;
1];
C = [1, 0];
D = 0*C*B;
Fs = 1;
dt = 1/Fs;
N = 3000;
t = dt*(0:N-1);
b = 0.01;
u = randn(1, N)/2;
u(2001:end) = 0;
y = 0;
x = [0;0];
for k = 1:N
y(k) = C*x + D*u(k);
x = A*x + B*u(k);
end
figure
plot(t, y), grid on
xlabel('Time')
ylabel('Displacement')
wind = hann(N/2);
%% Method 1
[frf, f]= modalfrf(u', y', Fs, wind, Sensor="dis");
%% Method 2
[b, a] = ss2tf(A, B, C, D);
[ztf,fz]= freqz(b, a, 2048, Fs);
%% Plot
figure
hold on
plot(f, mag2db(abs(frf)))
plot(fz*Fs, mag2db(abs(ztf))), grid on
hold off
ylim([-20 60])
legend('Method 1', 'Method 2')
xlabel('Frequency')
ylabel('Magnitude')
  1 commentaire
dpb
dpb le 19 Sep 2025
@Sam Chak, you had more perserverence to actually read enough details in the beginning to see how much was/wasn't there.
I took the liberty to turn that effort into an Answer...hopefully @Midhun will express gratitude for others' efforts on his behalf.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by