"use strict"; var ufc = gtl.import("userFunctions.js"); export function knMTX(spec, filter, isDeep) { var num = 6; //глубина матрицы (количество гармоник) var level = 0; //уровень развития дефекта var res = {}; //результат var set = { FTF: { nm: "Частота вращения сепаратора", fn: ufc.FTF(), md: 0, cl: 0xffff0000 }, FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 }, BSF: { nm: "Частота вращения (контакта) тел качения", fn: ufc.BSF(), md: ufc.FTF(), cl: 0xffFFB841 }, BPFO: { nm: "Частота перекатывания тел качения по наружному кольцу", fn: ufc.BPFO(), md: ufc.FTF(), cl: 0xffED3CCA }, BPFI: { nm: "Частота перекатывания тел качения по внутреннему кольцу", fn: ufc.BPFI(), md: ufc.FREQ(), cl: 0xff990090 } }; //набор функциональных частот function modFactor(dSpec, dFilter, ampl, base) { let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации let df = dSpec.frequency / dFilter.width; //отношение частотному разрешению спектра к ширине фильтра let mod = Math.sqrt((10 ** (dl / 10) - 1) * df); return mod; }; //определение глубины модуляции ВЧ составляющих var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов) //присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес. for (let i = 0; i <= rows.length - 1; i++) { let lines = rows[i]; let idx = 0; //индекс гармонического ряда let nms = set[lines].nm; //название гармонического ряда let frq = set[lines].fn; //расчетная частота let mod = set[lines].md; //модулирующая частота let clr = set[lines].cl; //предустановленный цвет let arr = []; //массив обнаруженных гармоник lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд) lines.name = nms; idx = spec.index_of_harms_set(lines); //определяем индекс набора частот if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию for (let j = 0; j <= num - 1; j++) { lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники if (lines.harms[j].is_present == true) { switch (isDeep) { case true: level = Math.round(modFactor(spec, filter, lines.harms[j].amplitude, lines.harms[j].base)); break; case false: level = Math.round(lines.harms[j].level); break; default: break; }; arr.push(level); } else { arr.push(0) }; res[rows[i]] = arr; }; }; return res; };