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

Материал из GTL-wiki
Перейти к навигации Перейти к поиску
Строка 32: Строка 32:
== Содержание функции ==
== Содержание функции ==
<pre>
<pre>
function getStdMeasures(options) {
function getCorr(src1, src2) {
     let __source = options.src;
     let arr1 = src1.data;
     let __time = 0.1;
     let arr2 = src2.data;
     let __avg = 5;
    let X = 0; //аргумент 1
    let Y = 0; //аргумент 2
    let Z = 0; //аргумент 3
    let arr1_avg = arr1.reduce((acc, item) => (acc + item)) / arr1.length; //среднее значение массива 1
     let arr2_avg = arr2.reduce((acc, item) => (acc + item)) / arr2.length; //среднее значение массива 2


     if (options.time != undefined) { __time = options.time };
     for (let i = 0; i < arr1.length; i++) {
    if (options.avg != undefined) { __avg = options.avg };
         X += (arr1[i] - arr1_avg) * (arr2[i] - arr2_avg);
 
        Y += (arr1[i] - arr1_avg) ** 2;
    function getFilter(L, R) {
        Z += (arr2[i] - arr2_avg) ** 2;
        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 = {
        rms_A2_3000: __rms_A2_3000,
        rms_A2_10000: __rms_A2_10000,
        rms_A100_10000: __rms_A100_10000,
        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:28, 28 июня 2024

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

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

Синтаксис

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

var __mes = getStdMeasures(
    {
      src: gtl.analog_inputs[0], //источник сигнала вибрации
      time: 0.25, //интервал расчета параметров 
      avg: 8 //количество отсчетов для усреднения
    }
);

Результат

rms_A2_3000.value - СКЗ виброускорения в диапазоне 2-3000 Гц
rms_A2_10000.value - СКЗ виброускорения в диапазоне 2-10000 Гц
rms_A100_10000.value - СКЗ виброускорения в диапазоне 100-10000 Гц
ampl_A100_10000.value - амплитуда виброускорения в диапазоне 100-10000 Гц
ampl_full.value - амплитуда виброускорения во всем диапазоне измерения
rms_V2_1000.value - СКЗ виброскорости в диапазоне 2-1000 Гц
rms_V10_1000.value - СКЗ виброскорости в диапазоне 10-1000 Гц
rms_S2_200.value - СКЗ виброперемещения в диапазоне 2-200 Гц
kurt_full.value - эксцесс во всем диапазоне измерения
kurt_2_5k.value - эксцесс в полосе 2.5-5 кГц
kurt_5_10k.value - эксцесс в полосе 5-10 кГц
kurt_10_20k.value - эксцесс в полосе 10-20 кГц
kurt_30_40k.value - эксцесс в полосе 30-40 кГц
kurt_40_80k.value - эксцесс в полосе 40-80 кГц

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

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

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

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