gtld2-diag-scripts/kNN/kn_mtx.js

62 lines
3.6 KiB
JavaScript

"use strict";
var ufc = gtl.import("user-functions.js");
export function kn_mtx(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 mod_factor(dSpec, dFilter, ampl, base) {
let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации
let df = dSpec.resolution / dFilter.width; //отношение частотному разрешению спектра к ширине фильтра
let mod = Math.sqrt((10 ** (dl / 10) - 1) * df) * 100;
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(mod_factor(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;
};