gtld2-diag-scripts/mask_func.js

85 lines
4.4 KiB
JavaScript
Raw Normal View History

2024-05-08 04:30:31 +03:00
2024-05-16 10:04:16 +03:00
export function spec_model(spec, tol) {
let model = spec.base; //исходный массив точек для построения упрощенной модели спектра
let imin = 0; //левый соседний индекс
let imax = 0; //правая соседний индекс
for (let i = 0; i < spec.peaks.length; i++) {
let freq = spec.peaks[i].freq; //получаем значение частоты гармоники из массива обнаруженных гармоник
let level = spec.peaks[i].level; //получаем значение уровня гармоники из массива обнаруженных гармоник
imin = Math.round((freq - freq * 0.5 * tol / 100) / spec.resolution);
imax = Math.round((freq + freq * 0.5 * tol / 100) / spec.resolution);
for (let j = imin; j <= imax; j++) { model[j] = spec.base[j] + level };
};
//отрисовка пользовательского графика
gtl.plot.add(
{
color: 0x44944A,
name: "model_" + spec.name,
x: spec.resolution,
y: model
}
);
return model;
}; //построение упрощенной модели спектра
export function mask(obj) {
let mask = obj.spec.base; //исходный массив точек для построения портрета дефекта
2024-05-15 08:24:04 +03:00
let df = 0; //отношение ширины фильтра частотному разрешению спектра
2024-05-16 10:04:16 +03:00
let dl = obj.lvl; //разность уровней гармонической и случайной составляющей вибрации
if (obj.filter != 0) {
df = obj.filter.width / obj.spec.resolution;
dl = 10 * Math.log10((obj.lvl ** 2) * df + 1);
2024-05-15 08:24:04 +03:00
};
2024-05-08 08:43:57 +03:00
let k = 0; //коэффициент затухания
let xmin = 0; //левая граница коридора
let xmax = 0; //правая граница коридора
2024-05-08 04:30:31 +03:00
2024-05-16 10:04:16 +03:00
switch (obj.type) {
2024-05-08 08:43:57 +03:00
case 0: //маска износа: коэффициент затухания 30-50%
2024-05-16 10:04:16 +03:00
for (let i = 1; i <= obj.harms; i++) {
2024-05-15 08:21:54 +03:00
k = 0.5;
2024-05-16 10:04:16 +03:00
xmin = Math.round(i * (obj.freq - obj.freq * 0.5 * obj.tol / 100) / obj.spec.resolution); //определяем индекс левой границы коридора
xmax = Math.round(i * (obj.freq + obj.freq * 0.5 * obj.tol / 100) / obj.spec.resolution); //определяем индекс правой границы коридора;
for (let j = xmin; j <= xmax; j++) { mask[j] = obj.spec.base[j] + dl }; //записываем значение глубины модуляции для коридора
2024-05-15 08:21:54 +03:00
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
2024-05-08 04:30:31 +03:00
};
break;
2024-05-08 08:43:57 +03:00
case 1: //маска дефекта: коэффициент затухания 5-10%
2024-05-15 08:21:54 +03:00
for (let i = 1; i <= harms; i++) {
k = 0.1;
2024-05-16 10:04:16 +03:00
xmin = Math.round(i * (obj.freq - obj.freq * 0.5 * obj.tol / 100) / obj.spec.resolution); //определяем индекс левой границы коридора
xmax = Math.round(i * (obj.freq + obj.freq * 0.5 * obj.tol / 100) / obj.spec.resolution); //определяем индекс правой границы коридора;
for (let j = xmin; j <= xmax; j++) { mask[j] = obj.spec.base[j] + dl }; //записываем значение глубины модуляции для коридора
2024-05-15 08:21:54 +03:00
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
2024-05-08 04:30:31 +03:00
};
break;
2024-05-08 08:43:57 +03:00
case 2: //маска перекоса: коэффициент выраженности 0-20%
2024-05-16 10:04:16 +03:00
for (let i = 1; i < obj.harms; i++) {
2024-05-08 08:43:57 +03:00
if (i % 2 > 0) {
k = 0.1;
};
2024-05-08 04:30:31 +03:00
};
break;
default:
break;
};
//отрисовка пользовательского графика
gtl.plot.add(
{
2024-05-15 08:21:54 +03:00
color: 0xff0000,
2024-05-16 10:04:16 +03:00
name: obj.name,
x: obj.spec.resolution,
2024-05-08 04:30:31 +03:00
y: mask
}
);
return mask;
}; //построение портрета дефекта
2024-05-15 08:24:04 +03:00