gtld2-diag-scripts/gear transmission/gtMTX.js

61 lines
3.4 KiB
JavaScript
Raw Normal View History

2024-04-23 10:55:10 +03:00
"use strict";
2024-06-11 08:41:46 +03:00
var ufc = gtl.import("userFunctions.js");
2024-04-23 10:55:10 +03:00
2024-06-11 08:41:46 +03:00
export function gtMTX(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-06-11 08:41:46 +03:00
function modFactor(dSpec, dFilter, ampl, base) {
2024-04-23 13:33:32 +03:00
let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации
2024-06-11 05:32:06 +03:00
let df = dSpec.frequency / dFilter.width; //отношение частотному разрешению спектра к ширине фильтра
let mod = Math.sqrt((10 ** (dl / 10) - 1) * df);
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-06-11 08:41:46 +03:00
level = Math.round(modFactor(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;
};