Accelerance FRF with modal FRF?

25 次查看(过去 30 天)
Hello, I'm trying to compute the accelerance FRF based on acceleration and modal hammer force signal.
I use the script of Manuel Lozano (script link) and the matlab modalFRF function, but I have diferences in magnitude and shape.
clc; clear; close all;
a = readtable ('aceleracion.csv').Var2; %Aceleration in [g]
f = readtable ('fuerza.csv').Var2; %Force in [N]
%% Using the code of https://la.mathworks.com/matlabcentral/answers/530968-what-s-wrong-with-my-frf
N = length(a); %length of signal
fs = 10000; %sampling frequency [Hz]
df = fs/N; %frequency resolution
fn = fs/2; %nyquist frequency
frequencies = linspace(0,fn,N/2+1);
Y = fft(a);
X = fft (f);
FRF = (Y./X); %Accelerance
Ymag = abs(FRF/N);
Ymag = Ymag(1:N/2+1);
Ymag(2:end-1) = 2*Ymag(2:end-1); % double magnitudes except c0
%% Using modalfrf function
winlen = size(a,1);
[FRF,f] = modalfrf(f, a, fs, winlen);
FRF = abs(FRF);
%% Plot
figure
plot(frequencies,Ymag, f, FRF)
set(gca,'YScale','log')
xlabel('frequency [Hz]')
ylabel('Magnitude [g/N]')
legend ('Using FFT', 'Using Matlab ModalFRF');
grid on
I have also calculated the accelerance function using commercial software based on LabVIEW language. It can be seen that there is no coincidence either.
Does anyone done this comparison? can someone tell me where is the error?
Thanks in advance.

采纳的回答

Paul
Paul 2022-8-2
编辑:Paul 2022-8-2
The two blue curves look pretty close, perhaps just off by a scale factor (except for the dip at ~600 Hz?). Those curves are the accelerance at least according to how Ymag is computed and the statement about what LabView computes. However, modalfrf always computes the receptance. So perhaps the output of modalfrf needs to be multplied by -omega^2 (omega in rad/sec) to get the accelerance? Worth a try anyway to see if that better aligns the curves.
Then still need to figure out the scale factor.. To sort that out, I think you'll really need to understand more precisely what LabView and modalfrf are really computing.

更多回答(1 个)

Ricardo Néstor Aguilar
It seems that, changing Ymag = abs(FRF/N) by Ymag = abs(FRF), removing Ymag(2:end-1) = 2*Ymag(2:end-1); and adding Ymag = Ymag./(2*pi*frequencies').^2; the curve fit to the output of modalFRF.
clc; clear; close all;
a = readtable ('aceleracion.csv').Var2; %Aceleration in [g]
f = readtable ('fuerza.csv').Var2; %Force in [N]
%% Using the code of https://la.mathworks.com/matlabcentral/answers/530968-what-s-wrong-with-my-frf
N = length(a); %length of signal
fs = 10000; %sampling frequency [Hz]
df = fs/N; %frequency resolution
fn = fs/2; %nyquist frequency
frequencies = linspace(0,fn,N/2+1);
Y = fft(a);
X = fft (f);
FRF = (Y./X); %Accelerance
Ymag = abs(FRF);
Ymag = Ymag(1:N/2+1);
Ymag = Ymag./(2*pi*frequencies').^2;
%% Using modalfrf function
winlen = size(a,1);
[FRF,frec] = modalfrf(f, a, fs, winlen,'Sensor','acc');
FRF = abs(FRF);
%% Plot
figure
plot(frequencies,Ymag, frec, FRF,'-.')
set(gca,'YScale','log')
xlabel('frequency [Hz]')
ylabel('Magnitude [g/N]')
legend ('Using FFT', 'Using Matlab ModalFRF');
grid on
  2 个评论
Paul
Paul 2022-8-2
Yes, I should have commented on the "divide by N." But keep in mind that the plots above are the reactance, when the question was about the accelerance. So to get the accelerance, really should multiply the output of modalfrf by (2*pi*frequencies').^2 , or by the negative of that if also desired to preserve the phase.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Vibration Analysis 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by