2016-03-29 5 views
1

Я создал следующий код, чтобы найти собственные частоты тестового образца, который возбуждается с помощью ударного молотка и к нему прикреплен акселерометр. Однако я застрял в interp_accelerance_dB_first. Эта интерполяция создает набор значений NaN, и я не знаю, почему. Мне кажется странным, что interp_accelerance работал нормально. Я надеюсь, что кто-то может мне помочь!Matlab, обнаруживающий собственную частоту, функция interp1 создает значения NaN

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

Каковы значения 'x' и' y'? – gariepy

ответ

0

Трудно сказать наверняка, не зная, что x,y,o есть, но, как правило interp1 возвращает NaN, когда вы пытаетесь интерполировать вне границ данных X-оси. Добавьте следующее в конце коды:

[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)] 

Если второй сегмент не попадет внутрь первого сегмента, то вы нашли вашу проблему.

Кстати, я думаю, что interp_accelerance может быть восприимчив к той же ошибке, опять же в зависимости от точной природы входных параметров.

+0

Вы правы, второй сегмент не попадает далеко внутри первого сегмента, а также 'interp_accelerance'. Параметры x, y, o непосредственно извлекаются из осциллографа и имеют характер 1x125000 double. – Laura

+0

У меня мало знаний о Matlab, я скопировал код и изменил некоторые вещи, но, к сожалению, это плохо работает. Знаете ли вы, что я могу сделать, чтобы решить эту проблему? Спасибо за ваш комментарий в любом случае, это очень полезно! – Laura

+0

Код, добавленный в ваш комментарий, дал «min и max fax_Hz» 0,7 и 1,45 соответственно и 'min и max x_axis_first_peak' 15 и 30. Итак, я предполагаю, что сигнал, генерируемый осциллографом, слишком слаб? – Laura