|
|
| (не показано 8 промежуточных версий этого же участника) |
| Строка 1: |
Строка 1: |
| == Краткое описание == | | == Краткое описание == |
| Функция предназначена для расчета коэффициента корреляции дискретных сигналов (массивов). В качестве аргументов на вход подаются объекты, содержащие массив данных в ключе data. В результате возвращается расчетное значение коэффициента корреляции. | | Функция предназначена для расчета коэффициента корреляции дискретных сигналов (массивов). В качестве аргументов на вход подаются массивы данных. В результате возвращается расчетное значение коэффициента корреляции. |
|
| |
|
| == Синтаксис == | | == Синтаксис == |
| Стандартная конструкция выглядит таким образом: | | Стандартная конструкция выглядит таким образом: |
| <pre style="color: purple> | | <pre style="color: purple> |
| var __mes = getStdMeasures( | | var __corr = getCorr( массив 1, массив 2 ); |
| {
| |
| src: gtl.analog_inputs[0], //источник сигнала вибрации
| |
| time: 0.25, //интервал расчета параметров
| |
| avg: 8 //количество отсчетов для усреднения
| |
| }
| |
| ); | |
| </pre> | | </pre> |
|
| |
| == Результат ==
| |
| :<code style="color: purple>rms_A2_3000.value</code> - СКЗ виброускорения в диапазоне 2-3000 Гц
| |
| :<code style="color: purple>rms_A2_10000.value</code> - СКЗ виброускорения в диапазоне 2-10000 Гц
| |
| :<code style="color: purple>rms_A100_10000.value</code> - СКЗ виброускорения в диапазоне 100-10000 Гц
| |
| :<code style="color: purple>ampl_A100_10000.value</code> - амплитуда виброускорения в диапазоне 100-10000 Гц
| |
| :<code style="color: purple>ampl_full.value</code> - амплитуда виброускорения во всем диапазоне измерения
| |
| :<code style="color: purple>rms_V2_1000.value</code> - СКЗ виброскорости в диапазоне 2-1000 Гц
| |
| :<code style="color: purple>rms_V10_1000.value</code> - СКЗ виброскорости в диапазоне 10-1000 Гц
| |
| :<code style="color: purple>rms_S2_200.value</code> - СКЗ виброперемещения в диапазоне 2-200 Гц
| |
| :<code style="color: purple>kurt_full.value</code> - эксцесс во всем диапазоне измерения
| |
| :<code style="color: purple>kurt_2_5k.value</code> - эксцесс в полосе 2.5-5 кГц
| |
| :<code style="color: purple>kurt_5_10k.value</code> - эксцесс в полосе 5-10 кГц
| |
| :<code style="color: purple>kurt_10_20k.value</code> - эксцесс в полосе 10-20 кГц
| |
| :<code style="color: purple>kurt_30_40k.value</code> - эксцесс в полосе 30-40 кГц
| |
| :<code style="color: purple>kurt_40_80k.value</code> - эксцесс в полосе 40-80 кГц
| |
|
| |
|
| == Содержание функции == | | == Содержание функции == |
| <pre> | | <pre> |
| function getStdMeasures(options) { | | function getCorr(arr1, arr2) { |
| let __source = options.src; | | let X = 0; //аргумент 1 |
| let __time = 0.1;
| | let Y = 0; //аргумент 2 |
| let __avg = 5;
| | let Z = 0; //аргумент 3 |
| | | let __avg1 = arr1.reduce((acc, item) => (acc + item)) / arr1.length; //среднее значение массива 1 |
| if (options.time != undefined) { __time = options.time };
| | let __avg2 = arr2.reduce((acc, item) => (acc + item)) / arr2.length; //среднее значение массива 2 |
| if (options.avg != undefined) { __avg = options.avg };
| |
| | |
| function getFilter(L, R) {
| |
| let __filter = gtl.add_filter_iir(__source);
| |
| __filter.kind = gtl.filter_iir.butterworth;
| |
| __filter.order = 10;
| |
| | |
| switch (L) {
| |
| case "lowpass":
| |
| __filter.type = gtl.filter_iir.lowpass;
| |
| __filter.frequency = R;
| |
| break;
| |
| | |
| case "highpass":
| |
| __filter.type = gtl.filter_iir.highpass;
| |
| __filter.frequency = R;
| |
| break;
| |
| | |
| default:
| |
| __filter.type = gtl.filter_iir.bandpass;
| |
| __filter.frequency = (R - L) / 2 + L;
| |
| __filter.width = R - L;
| |
| break;
| |
| };
| |
| | |
| return __filter;
| |
| }; //формирование фильтра
| |
| | |
| function getIntg(src, taps, scale) { | |
| let __intg = gtl.add_intg(src);
| |
| __intg.taps = taps;
| |
| __intg.scale = scale;
| |
| | |
| return __intg;
| |
| }; //интегрирование сигнала
| |
| | |
| function getRMS(src) { | |
| let __rms = gtl.add_value_rms(src);
| |
| __rms.time = __time;
| |
| __rms.avg_cnt = __avg;
| |
| | |
| return __rms;
| |
| }; //получение СКЗ
| |
| | |
| function getAmpl(src) { | |
| let __ampl = gtl.add_value_ampl(src);
| |
| __ampl.time = __time;
| |
| __ampl.avg_cnt = __avg;
| |
| | |
| return __ampl;
| |
| }; //получение амплитуды
| |
| | |
| function getKurt(src) {
| |
| let __kurt = gtl.add_value_kurt(src);
| |
| __kurt.time = __time;
| |
| __kurt.avg_cnt = __avg;
| |
| | |
| return __kurt;
| |
| }; //получение эксцесса
| |
| | |
| //[Набор фильтров]
| |
| let __filter_2_200 = getFilter(2, 200);
| |
| let __filter_2_1000 = getFilter(2, 1000);
| |
| let __filter_10_1000 = getFilter(10, 1000);
| |
| let __filter_2_3000 = getFilter(2, 3000);
| |
| let __filter_2_10000 = getFilter(2, 10000);
| |
| let __filter_100_10000 = getFilter(100, 10000);
| |
| let __filter_2_5k = getFilter(2500, 5000);
| |
| let __filter_5_10k = getFilter(5000, 10000);
| |
| let __filter_10_20k = getFilter(10000, 20000);
| |
| let __filter_30_40k = getFilter(30000, 40000);
| |
| let __filter_40_80k = getFilter(40000, 80000);
| |
| | |
| //[Набор интеграторов]
| |
| let __pre_int1 = getIntg(__filter_2_1000, 1, 1000);
| |
| let __pre_int2 = getIntg(__filter_10_1000, 1, 1000); | |
| let __pre_int3 = getIntg(__filter_2_200, 2, 1);
| |
| | |
| //[Расчет набора параметров]
| |
| let __rms_A2_3000 = getRMS(__filter_2_3000); //СКЗ виброускорения в диапазоне 2-3000 Гц
| |
| let __rms_A2_10000 = getRMS(__filter_2_10000); //СКЗ виброускорения в диапазоне 2-10000 Гц
| |
| let __rms_A100_10000 = getRMS(__filter_100_10000); //СКЗ виброускорения в диапазоне 100-10000 Гц
| |
| | |
| let __ampl_A100_10000 = getAmpl(__filter_100_10000); //амплитуда виброускорения в диапазоне 100-10000 Гц
| |
| let __ampl_full = getAmpl(__source); //амплитуда виброускорения во всем диапазоне измерения
| |
| | |
| let __rms_V2_1000 = getRMS(__pre_int1); //СКЗ виброскорости в диапазоне 2-1000 Гц
| |
| let __rms_V10_1000 = getRMS(__pre_int2); //СКЗ виброскорости в диапазоне 2-1000 Гц
| |
| let __rms_S2_200 = getRMS(__pre_int3); //СКЗ виброперемещения в диапазоне 2-200 Гц
| |
| | |
| let __kurt_full = getKurt(__source); //эксцесс во всем диапазоне измерения
| |
| let __kurt_2_5k = getKurt(__filter_2_5k); //эксцесс в полосе 2.5-5 кГц
| |
| let __kurt_5_10k = getKurt(__filter_5_10k); //эксцесс в полосе 5-10 кГц
| |
| let __kurt_10_20k = getKurt(__filter_10_20k); //эксцесс в полосе 10-20 кГц
| |
| let __kurt_30_40k = getKurt(__filter_30_40k); //эксцесс в полосе 30-40 кГц
| |
| let __kurt_40_80k = getKurt(__filter_40_80k); //эксцесс в полосе 40-80 кГц
| |
|
| |
|
| let __result = { | | for (let i = 0; i < arr1.length; i++) { |
| rms_A2_3000: __rms_A2_3000, | | X += (arr1[i] - __avg1) * (arr1[i] - __avg2); |
| rms_A2_10000: __rms_A2_10000, | | Y += (arr1[i] - __avg1) ** 2; |
| rms_A100_10000: __rms_A100_10000, | | Z += (arr2[i] - __avg2) ** 2; |
| ampl_A100_10000: __ampl_A100_10000,
| |
| ampl_full: __ampl_full,
| |
| rms_V2_1000: __rms_V2_1000,
| |
| rms_V10_1000: __rms_V10_1000,
| |
| rms_S2_200: __rms_S2_200,
| |
| kurt_full: __kurt_full,
| |
| kurt_2_5k: __kurt_2_5k,
| |
| kurt_5_10k: __kurt_5_10k,
| |
| kurt_10_20k: __kurt_10_20k,
| |
| kurt_30_40k: __kurt_30_40k,
| |
| kurt_40_80k: __kurt_40_80k
| |
| }; | | }; |
|
| |
|
| return __result; | | return X / (Math.sqrt(Y) * Math.sqrt(Z)); |
| }; //измерение стандартных параметров | | }; //рассчет корреляции |
| </pre> | | </pre> |