FREQUENCY RESPONSE FUNCTION (FRF)

advertisement
Frequency Response Function (FRF)
Dr Michael Sek
FREQUENCY RESPONSE FUNCTION (FRF)
The concept of Frequency Response Function (Figure 1) is at
the foundation of modern experimental system analysis. A
linear system such as an SDOF or an MDOF, when subjected
to sinusoidal excitation, will respond sinusoidally at the same
frequency and at specific amplitude that is characteristic to the
frequency of excitation. The phase of the response, in general
case, will be different than that of the excitation. The phase
difference between the response and the excitation will vary
with frequency. The system does not need to be excited at one
frequency at the time. The same applies if the system is
subjected to a broadband excitation comprising a blend of
many sinusoids at any given time, such as in the white noise
(Gaussian random excitation) or an impulse. It is obvious that,
in order to find how the system responds at various
frequencies, the excitation and the response signals must be
subjected to the DFT.
The characteristics of a system that describe its response to
excitation as the function of frequency is the Frequency
Response Function H(f) defined as the ratio of the complex
spectrum of the response to the complex spectrum of the
excitation. The spectra are raw (unfolded two-sided).
H( f ) =
X( f )
F( f )
The H(f) is a spectrum whose magnitude |H| is the ratio of
|X| / |F| and the phase φH = φX - φF .
Figure 2 shows an example of experimental setup.
Figure 1 Concept of Frequency Response Function
(Brüel&Kjær "Structural Testing")
Figure 2 Car body undergoing testing to acquire its FRFs (Brüel&Kjær "Structural Testing")
1
Frequency Response Function (FRF)
Dr Michael Sek
VIRTUAL EXPERIMENT TO MEASURE THE FREQUENCY RESPONSE FUNCTION
Let's find the FRF of a system in a virtual experiment. For this purpose let's use the SDOF system (m=100kg, c=1000N/(m/s),
k=1e6N/m) studied in the module "ORDINARY DIFFERENTIAL EQUATIONS. VIBRATIONS OF SINGLE DEGREE OF
FREEDOM (SDOF) SYSTEM".
We use the simulation model as a virtual system, pretending that we do not know much about it, as the faded section of Figure
3 indicates. As in the real experiment, we will obtain the "experimental" data from the oscilloscope "Scope1". We need to
enable the scope's storage feature. Since the Scope1 has multiple inputs connected to it we choose the format "Structure with
time" as shown in Figure 4. After running the model once we can check field names in the structure ScopeData1.
2
VIRTUAL SYSTEM
Figure 3 Virtual experimental setup to acquire the data for the FRF of a system
>> ScopeData1
ScopeData1 =
time: [2048x1 double]
signals: [1x4 struct]
blockName: 'SDOF/Scope1'
>> ScopeData1.signals
ans =
1x4 struct array with fields:
values
dimensions
label
title
plotStyle
Figure 4 Data history settings for Scope1 and field names in the structure ScopeData1
It is obvious that, following the order of connections to Scope1, the essential "measurements" are accessible in the structure
ScopeData1 as shown
Time
ScopeData1.time
Excitation Force
ScopeData1.signals(1).values
Response Acceleration
ScopeData1.signals(2).values
Response Velocity
ScopeData1.signals(3).values
Response Displacement ScopeData1.signals(4).values
2
Frequency Response Function (FRF)
Dr Michael Sek
Simulation Parameters block is setup as shown in Figure 5. Note that "Save to workspace" items are ticked-off since the data is
returned via Scope1. The variables dt and tmax control the sampling interval and the duration of the virtual experiment which
resembles the real situation.
Figure 5 Settings of Simulation Parameters block
Random Excitation
The variable Fmax controls the maximum excitation. Variance in the
Random Number block refers to the squared standard deviation σ. The
normal random signal only rarely exceeds 3σ. The entered expression for
the variance will cause the maximum instantaneous force to be close
enough to Fmax.
Figure 6 Settings of Random Number block
The FRFs can be found for any parameter that describes the response of the system, i.e. acceleration, velocity and
displacement. Figure 8 shows the results for random excitation obtained with the code shown in the Appendix. The resonance
is near 15Hz. The curves look noisy. Random excitation requires longer sample time and averaging. Note that the scaling and
multiplication by 2 are not required for the folding of H(f) since H(f) is the ratio.
Impact Excitation
Better results are obtained with an impact excitation (see Figure 9). In the model it can be achieved with the Pulse Generator
set up as shown in Figure 7. Pulse duration is expressed in multiples of dt.
3
Frequency Response Function (FRF)
Dr Michael Sek
Figure 7 Settings of Pulse Generator block to produce an impact
Figure 8 Excitation and responses of the system under test (random excitation) and the corresponding FRFs
4
Frequency Response Function (FRF)
Dr Michael Sek
Figure 9 Excitation and responses of the system under test (impact excitation) and the corresponding FRFs
Identification (Recovery) of System's Parameters from its FRF
FRFs allow to recover the "unknown" parameters of the system.
•
•
•
The value of Ha at large frequency approximately equals 1/mass.
The value of Hx at near-zero frequency approximates 1/stiffness coefficient.
The width of Hv is proportional to the damping.
Using the results in Figure 9:
• mass m= 1 / 0.01 = 100 kg
• stiffness coefficient k= 1 / 0.1e-5 = 1e6 N/m
The results match the values used for the simulation.
5
Frequency Response Function (FRF)
Dr Michael Sek
APPENDIX
AN EXAMPLE OF A FUNCTION USED TO GENERATE A HARMONIC SIGNAL
6
Frequency Response Function (FRF)
Dr Michael Sek
IMPLEMENTATION OF THE FOLDING ALGORITHM
sFreq = 8000;
nPts = 2048;
g=
?????;
%obtain the signal
df = sFreq/nPts;
fNyquist = sFreq / 2;
spec = fft(g, nPts);
spec = spec(1:nPts/2+1);
spec = spec / nPts;
spec(2:end) = 2 * spec(2:end);
mag = abs(spec);
phase = atan(imag(spec)./real(spec));
or
phase = angle(spec);
freq = linspace(0, fNyquist,
nPts/2+1)';
or
freq = [0: nPts/2]' * df;
plot(freq, mag)
plot(freq, phase);
7
Frequency Response Function (FRF)
Dr Michael Sek
The code used to obtain the FRFs of the system in Figure 3 and produce Figure 8 and
Figure 9.
%SDOF start up
m=100;
k=1e6;
%f0 = 1/(2*pi)*sqrt(k/m)
%c0 = 2*sqrt(k*m)
c=1000;
%zeta = c/c0
%initial conditions
xdot0=0;
x0=0;
samplingFrequency = 200;
dt = 1/samplingFrequency;
FFTsize = 2048;
tmax = (FFTsize-1)*dt;
Fmax = 1000;
pulseDuration = 5*dt;
SDOF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%THIS SECTION USES ScopeData (Structure with time)
% Time......
ScopeData1.time
% Excitation Force
ScopeData1.signals(1).values
% Response Acceleration ScopeData1.signals(2).values
% Response Velocity
ScopeData1.signals(3).values
% Response Displacement ScopeData1.signals(4).values
sim('SDOF');
%plotting the results
figure
subplot(4,1,1)
plot(ScopeData1.time,ScopeData1.signals(1).values)
title('Excitation')
ylabel('Force [N]')
grid on
subplot(4,1,2)
plot(ScopeData1.time,ScopeData1.signals(2).values)
ylabel('Accel [m/s^2]')
grid on
subplot(4,1,3)
plot(ScopeData1.time,ScopeData1.signals(3).values)
ylabel('Vel [m/s]')
grid on
subplot(4,1,4)
plot(ScopeData1.time,ScopeData1.signals(4).values)
ylabel('Disp [m]')
xlabel('Time [s]')
grid on
%Calculating FRFs
F = fft(ScopeData1.signals(1).values);
A = fft(ScopeData1.signals(2).values);
V = fft(ScopeData1.signals(3).values);
X = fft(ScopeData1.signals(4).values);
Ha = A ./ F;
Hv = V ./ F;
Hx = X ./ F;
%Folded frequency axis
df = samplingFrequency/FFTsize;
freq = [0:FFTsize/2]'*df;
8
Frequency Response Function (FRF)
Dr Michael Sek
%folding
Ha = Ha(1:FFTsize/2+1);
%No need to scale since H's are the ratio
HaMag = abs(Ha);
figure
subplot(3,1,1)
plot(freq, HaMag)
ylabel('FRF H_a[(m/s^2)/N]')
xlabel('Frequency [Hz]')
grid on
[HaMax,idx] = max(HaMag);
fResonance = freq(idx);
title(sprintf('Max=%.2e(m/s^2)/N @ %.2fHz',HaMax,fResonance))
Hv = Hv(1:FFTsize/2+1);
HvMag = abs(Hv);
subplot(3,1,2)
plot(freq, HvMag)
ylabel('FRF H_v[(m/s)/N]')
xlabel('Frequency [Hz]')
grid on
[HvMax,idx] = max(HvMag);
fResonance = freq(idx);
title(sprintf('Max=%.2e(m/s)/N @ %.2fHz',HvMax,fResonance))
Hx = Hx(1:FFTsize/2+1);
HxMag = abs(Hx);
subplot(3,1,3)
plot(freq, HxMag)
ylabel('FRF H_x[m/N]')
xlabel('Frequency [Hz]')
grid on
[HxMax,idx] = max(HxMag);
fResonance = freq(idx);
title(sprintf('Max=%.2em/N @ %.2fHz',HxMax,fResonance))
9
Download