Gtld corr: различия между версиями

Материал из GTL-wiki
Перейти к навигации Перейти к поиску
(Новая страница: «== Краткое описание == Функция предназначена для реализации набора стандартных измерений параметров вибрации. Функция возвращает набор объектов с результатами измерений, по ключу value которых можно получить значение рассчитанного параметра. <p style="color:...»)
 
 
(не показано 9 промежуточных версий этого же участника)
Строка 1: Строка 1:
== Краткое описание ==
== Краткое описание ==
Функция предназначена для реализации набора стандартных измерений параметров вибрации. Функция возвращает набор объектов с результатами измерений, по ключу value которых можно получить значение рассчитанного параметра.
Функция предназначена для расчета коэффициента корреляции дискретных сигналов (массивов). В качестве аргументов на вход подаются массивы данных. В результате возвращается расчетное значение коэффициента корреляции.
<p style="color: red>Cодержание функции будет дополняться!</p>


== Синтаксис ==
== Синтаксис ==
Стандартная конструкция выглядит таким образом:
Стандартная конструкция выглядит таким образом:
<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>

Текущая версия от 00:52, 24 февраля 2025

Краткое описание

Функция предназначена для расчета коэффициента корреляции дискретных сигналов (массивов). В качестве аргументов на вход подаются массивы данных. В результате возвращается расчетное значение коэффициента корреляции.

Синтаксис

Стандартная конструкция выглядит таким образом:

var __corr = getCorr( массив 1, массив 2 );

Содержание функции

function getCorr(arr1, arr2) {
    let X = 0; //аргумент 1
    let Y = 0; //аргумент 2
    let Z = 0; //аргумент 3
    let __avg1 = arr1.reduce((acc, item) => (acc + item)) / arr1.length; //среднее значение массива 1
    let __avg2 = arr2.reduce((acc, item) => (acc + item)) / arr2.length; //среднее значение массива 2

    for (let i = 0; i < arr1.length; i++) {
        X += (arr1[i] - __avg1) * (arr1[i] - __avg2);
        Y += (arr1[i] - __avg1) ** 2;
        Z += (arr2[i] - __avg2) ** 2;
    };

    return X / (Math.sqrt(Y) * Math.sqrt(Z));
}; //рассчет корреляции