Статус документа
Статус документа

ГОСТ 31191.5-2007 (ИСО 2631-5:2004) Вибрация и удар. Измерение общей вибрации и оценка ее воздействия на человека. Часть 5. Вибрация, содержащая множественные ударные импульсы

Приложение D
(справочное)

     
Разработка компьютерных программ для расчета отклика и дозы ускорения

D.1 Общие положения

Расчет ускорения отклика по сигналам ускорения в направлениях и может быть осуществлен с помощью любых программ, предназначенных для вычисления ударного спектра процесса. Для расчета дозы ускорения в направлении стандартной программы не существует, но ее можно написать с помощью стандартных математических приложений. Пример такой программы, написанной в MATLAB, приведен в разделе D.3.

D.2 Тестовый пример

Настоящий пример может быть использован для проверки работоспособности программы. Входной сигнал ускорения на подушке сиденья для каждого из трех направлений измерений представляет собой кусочно-линейную функцию, состоящую из шести отрезков прямых. Каждый отрезок описывается линейной функцией . Значения коэффициентов и указаны в таблице D.1. Расчет реакции поясничного отдела позвоночника должен дать результат в виде функций, изображенных на рисунке D.1.


Таблица D.1 - Кусочно-линейная функция тестового сигнала

Номер отрезка функции

, м/с

, м/с

Диапазон изменения , с

1

40

0

00,05

2

0

2

0,050,2

3

-20

6

0,20,4

4

0

-2

0,40,5

5

40

-22

0,50,55

6

0

0

0,552



а) Входной сигнал ускорения на подушке сиденья


b) Реакция позвоночника в направлениях и



с) Реакция позвоночника в направлении

Рисунок D.1 - Тестовая входная функция и расчетные отклики, полученные в результате использования
компьютерной программы (указаны значения основных локальных экстремумов в м/с)



D.3 Пример программы для MATLAB

function SpineAcc(path, xfile, yfile, zfile)

%SpineAcc:

Calculates the human response of the spine, alx, aly and alz, and also Dx, Dy and Dz,

%

from acceleration measurements in the seat.

%path:

Directory in which the measurement files are located.

%xfile, yfile, or zfile: ASCII file with a time vector in the first column and the measurement result in the x-, y- or

%

z-direction, asx, asy, or asz, in the second column.

%lf any of the filenames is given as an empty string ", calculations will not be performed in that direction.

%subfunction calls

if xfile ~"

  figure(1)

  clf

  SpineAccXY(path, xfile, 'x');

end

if yfile ~"

   figure(2)

   clf

   SpineAccXY(path, yfile, 'y');

end

if zfile ~"

   figure(3)

   clf

   SpineAccZ(path, zfile);

end

function SpineAccXY(path, file, XorY)

%SpineAccXY:

%

Calculates the human response of the spine, alx, aly, Dx and Dy from acceleration  measurements in the seat. The result is stored in the file_al.txt, along with the time

vector.

%load input file

as=load([path, file, ' .txt']);

%separation of input time data measurement data

time=as(:,1);

as=as(:,2);

%calculation of al(t)

a=[1, -1.957115,0.963949];

b=[0.0192752,0.00433451, -0.0167763];

a1=filter(b, a, as);

%call the function CountPeaks to cakculate Dk

Dk=CountPeaks(a1, XorY);

%plot the result

plot (time, a1)

title (file)

legend(['D', XorY,' = ', num2str(Dk)], 1)

%add the time column to the calculated response and the calculated value Dk to the last row and second

%column

a1=[time, a1; 0 Dk];

eval (['save', path, file, '_al.txt a1 -ascii-tabs'])

function SpineAccZ (path, zfile)

%SpineAccZ:

Calculates the human response of the spine, alz and Dz from acceleration measurements in

%

the seat. The result is stored in the file zfile_al.txt, along with the time vector.

%path:

Directory in which measurement files are located.

%zfile:

ASCII file with a time vector in the first column and the measurement result, asz, in the

%

second column.

%load input file

asz=load ([path, zfile,' .txt']);

([' save', path,file,' _al.txt alz -ascii -tabs'])

%separation of input time data and measurement data

time=asz(:, 1);

asz=asz(:, 2);

%extension of asz with 8 samples

asz=[0; 0; 0; 0; 0; 0; 0; 0; asz];

%preallocation of memory

alz=zeros (size (asz));

x=zeros (length (asz), 7);

%constants

w=[0.00130 0.01841 -0.00336 0.01471 0.00174 0.00137 0.00145;

-0.00646 -0.00565 -0.00539 0.01544 -0.00542 0.00381 0.00497;

-0.00091 0.02073 0.00708 -0.00091 0.00255 -0.00216 0.01001;

0.00898 -0.02626 0.00438 -0.00595 -0.00774 -0.00034 0.01283;

0.00201 0.00579 0.00330 -0.00065 -0.00459 -0.00417 -0.00468;

0.00158 0.00859 0.00166 0.00490 -0.00546 0.00057 -0.00797;

0.00361 0.00490 0.00452 0.00079 -0.00604 -0.00638 -0.00529;

0.00167 -0.00098 0.00743 0.00795 -0.01095 0.00627 -0.00341;

-0.00078 -0.00261 0.00771 0.00600 -0.00908 0.00504 0.00135;

-0.00405 -0.00210 0.00520 0.00176 -0.00465 -0.00198 0.00451;

0.00563 0.00218 -0.00105 0.00195 0.00296 -0.00190 0.00306;

-0.00372 0.00037 -0.00045 -0.00197 0.00289 -0.00448 0.00216;

-0.31088 -0.95883 -0.67105 0.14423 0.04063 0.07029 1.0330];

w= [57.96539 52.32773 49.78227 53.1688556. 02619 -27.79550 72.34446, 21.51959];

%calculation of alz(t)

for t = (9:1ength(asz));

for j=1 : 7

         x(t, j) = sum(alz (t-1: -1: t-4). *w(1:4, j))+sum (asz(t-1: -1: t-8). *w(5:12, j))

         +w(13, j);

         x(t, j)=tanh(x(t, j));

   end

   alz(t)=sum(W(1:7). *x(t, 1:7))+W(8);

end

alz=alz(9:1ength (asz));

%call the function CountPeaks to calculate Dz

Dz=CouhtPeaks (alz,' z');

%plot the result in figure 3

plot (time, alz)

title (zfile)

legend ([' Dz = ', num2str(Dz)], 1)

%add the time column to the calculated response and the calculated value Dz to the last row and second

%column

alz= [time, alz; 0 Dz);

(['save', path, zfile, '_al. txt alz -ascii -tabs'])

function Dk=CountPeaks (alk, xyz)

%CountPeaks:

Calculates Dk from the input signal alk.

%Dk:

Calculated output value Dk.

%alk:

Input vector: One column with the response alk.

%xyz:

String expression: 'x', 'y' or 'z' depending on which direction the input vector represents.

Dk=0;

i=1;

id1=1;

id2=1;

%set the array pointers id1 and id2 each time signal changes sign (+/-) and find the maximum between id1 and

%id2

for i=1 : 1ength (alk) -1

if (((alk (i)>0)&(alk (i+1)<0)) | ((alk (i)<0) & (alk (i+1)>0)))

id2=i;

if alk (id2) <0

[mx, ind]=min((alk (id1 : id2)));

if((xyz==' z ')|(xyz==' Z '))

        mx=0;

end

else

         [mx, ind] =max ((alk (id1 : id2)));

end

Dk=Dk+mx6;

id1=id2;

   end

end

Dk=Dk(1/6)