2016-03-29 14 views
1

Ich habe den folgenden Code erstellt, um die Eigenfrequenzen einer Testprobe zu finden, die durch einen Schlaghammer angeregt wird und an der ein Beschleunigungsmesser angebracht ist. Allerdings steckte ich bei interp_accelerance_dB_first fest. Diese Interpolation erzeugt eine Reihe von NaN-Werten und ich weiß nicht warum. Ich finde es seltsam, interp_accelerance hat gut funktioniert. Ich hoffe, dass mir jemand helfen kann!Matlab findet natürliche Frequenz, interp1 Funktion erzeugt NaN Werte

N = 125000; 
fs = 1/(x(2)-x(1)); 
ts = 1/fs; 
f = -fs/2:fs/(N-1):fs/2; 

% Set x-axis of graph 
x_max = (N-1)*ts; 
x_axis=0:ts:x_max; 

% find the first natural frequency between these boundaries 
First_lower_boundary = 15; 
First_upper_boundary = 30; 


Input = abs(fft(y)); %FFT input force 
Output = abs(fft(o)); %FFT output acceleration 

Accelerance = Output./Input; 

bin_vals = [0 : N-1]; 
fax_Hz = bin_vals*fs/N; 
N_2 = ceil(N/2); 

% Interpolate accelerance function in order to be able to average all accelerance functions 
Interp_accelerance = interp1(fax_Hz(1:N_2),Accelerance(1:N_2),x_axis); 


% --- Find damping ratio of first natural frequency 

% Determine the x-axis (from the boundries at the beginning of this script) 
x_axis_first_peak = First_lower_boundary:ts:First_upper_boundary; 

% Accelerance function with a logarithmic scale [dB] 
Accelerance_dB_first = 20*log10(Accelerance(First_lower_boundary:First_upper_boundary)); 


% Interpolate the accelerance function [dB] 
Interp_accelerance_dB_first = interp1(fax_Hz(First_lower_boundary:First_upper_boundary),Accelerance_dB_first,x_axis_first_peak); 
+0

Was sind die Werte von 'x' und' y'? – gariepy

Antwort

0

Fest sicher zu sagen, ohne zu wissen, was x,y,o sind, aber in der Regel interp1 NaN zurück, wenn Sie versuchen, außerhalb der Grenzen der Daten der x-Achse zu interpolieren. Fügen Sie die folgenden am Ende des Codes:

[min(fax_Hz(First_lower_boundary:First_upper_boundary)),max(fax_Hz(First_lower_boundary:First_upper_boundary))] 
[min(x_axis_first_peak),max(x_axis_first_peak)] 

Wenn das zweite Segment fällt nicht innerhalb des ersten Segments, dann haben Sie Ihr Problem gefunden.

Übrigens, ich denke, dass interp_accelerance für den gleichen Fehler anfällig sein kann, wiederum abhängig von der genauen Art der Eingangsparameter.

+0

Sie haben recht, das zweite Segment fällt nicht innerhalb des ersten Segments, sowie "interp_accolerance". Die x, y, o Parameter werden direkt aus einem Oszilloskop extrahiert und haben die Natur eines 1x125000 double. – Laura

+0

Ich habe wenig Wissen über Matlab, kopierte den Code und änderte einige Dinge, aber leider funktioniert das nicht gut. Weißt du, was ich tun kann, um dieses Problem zu lösen? Danke für deinen Kommentar, entweder, es ist sehr hilfreich! – Laura

+0

Der Code, den Sie in Ihrem Kommentar hinzugefügt haben, gab 'min und max fax_Hz' 0,7 bzw. 1,45 und' min und max x_axis_first_peak' 15 und 30. Ich vermute also, dass das vom Oszilloskop erzeugte Signal zu schwach ist? – Laura