2024-04-23 10:55:10 +03:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var ufc = gtl.import("user-functions.js");
|
|
|
|
|
2024-04-23 13:33:32 +03:00
|
|
|
export function gt_mtx(spec, filter, isDeep) {
|
2024-04-23 10:55:10 +03:00
|
|
|
var num = 6; //глубина матрицы (количество гармоник)
|
|
|
|
var level = 0; //уровень развития дефекта
|
|
|
|
var res = {}; //результат
|
|
|
|
|
|
|
|
var set = {
|
|
|
|
FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 },
|
|
|
|
GTF2: { nm: "Частота вращения второго вала", fn: ufc.GTF2(), md: 0, cl: 0xffFFB841 },
|
|
|
|
GTFZ: { nm: "Зубцовая частота по шестерне", fn: ufc.GTFZ(), md: ufc.FREQ(), cl: 0xffED3CCA },
|
|
|
|
GTFZ2: { nm: "Зубцовая частота по второму валу", fn: ufc.GTFZ(), md: ufc.GTF2(), cl: 0xff990090 }
|
|
|
|
}; //набор функциональных частот
|
|
|
|
|
2024-04-23 13:33:32 +03:00
|
|
|
function mod_factor(dSpec, dFilter, ampl, base) {
|
|
|
|
let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации
|
|
|
|
let df = dSpec.resolution / dFilter.width; //отношение частотному разрешению спектра к ширине фильтра
|
2024-04-24 10:41:55 +03:00
|
|
|
let mod = Math.sqrt((10 ** (dl / 10) - 1) * df) * 100;
|
2024-04-23 13:33:32 +03:00
|
|
|
return mod;
|
|
|
|
}; //определение глубины модуляции ВЧ составляющих
|
|
|
|
|
2024-04-23 10:55:10 +03:00
|
|
|
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:
|
2024-04-23 13:33:32 +03:00
|
|
|
level = Math.round(mod_factor(spec, filter, lines.harms[j].amplitude, lines.harms[j].base));
|
2024-04-23 10:55:10 +03:00
|
|
|
break;
|
|
|
|
case false:
|
2024-05-08 04:30:31 +03:00
|
|
|
level = Math.round(lines.harms[j].level);
|
2024-04-23 10:55:10 +03:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
};
|
|
|
|
arr.push(level);
|
|
|
|
} else { arr.push(0) };
|
|
|
|
res[rows[i]] = arr;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
return res;
|
|
|
|
};
|
|
|
|
|