mask_funk was updated
parent
eccc29b171
commit
be7f89e9ee
124
mask_func.js
124
mask_func.js
|
@ -1,71 +1,13 @@
|
||||||
|
|
||||||
export function mask(spec, filter, frq, harms, lvl, tol, state) {
|
export function spec_model(spec, tol) {
|
||||||
let mask = spec.base; //исходный массив точек для построения портрета дефекта
|
|
||||||
let df = 0; //отношение ширины фильтра частотному разрешению спектра
|
|
||||||
let dl = lvl; //разность уровней гармонической и случайной составляющей вибрации
|
|
||||||
if (filter != 0) {
|
|
||||||
df = filter.width / spec.resolution;
|
|
||||||
dl = 10 * Math.log10((lvl ** 2) * df + 1);
|
|
||||||
};
|
|
||||||
let k = 0; //коэффициент затухания
|
|
||||||
let xmin = 0; //левая граница коридора
|
|
||||||
let xmax = 0; //правая граница коридора
|
|
||||||
|
|
||||||
switch (state) {
|
|
||||||
case 0: //маска износа: коэффициент затухания 30-50%
|
|
||||||
for (let i = 1; i <= harms; i++) {
|
|
||||||
k = 0.5;
|
|
||||||
xmin = Math.round(i * (frq - frq * 0.5 * tol / 100) / spec.resolution); //определяем индекс левой границы коридора
|
|
||||||
xmax = Math.round(i * (frq + frq * 0.5 * tol / 100) / spec.resolution); //определяем индекс правой границы коридора;
|
|
||||||
for (let j = xmin; j <= xmax; j++) { mask[j] = spec.base[j] + dl }; //записываем значение глубины модуляции для коридора
|
|
||||||
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
case 1: //маска дефекта: коэффициент затухания 5-10%
|
|
||||||
for (let i = 1; i <= harms; i++) {
|
|
||||||
k = 0.1;
|
|
||||||
xmin = Math.round(i * (frq - frq * 0.5 * tol / 100) / spec.resolution); //определяем индекс левой границы коридора
|
|
||||||
xmax = Math.round(i * (frq + frq * 0.5 * tol / 100) / spec.resolution); //определяем индекс правой границы коридора;
|
|
||||||
for (let j = xmin; j <= xmax; j++) { mask[j] = spec.base[j] + dl }; //записываем значение глубины модуляции для коридора
|
|
||||||
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
case 2: //маска перекоса: коэффициент выраженности 0-20%
|
|
||||||
for (let i = 1; i < harms; i++) {
|
|
||||||
if (i % 2 > 0) {
|
|
||||||
k = 0.1;
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
|
|
||||||
//отрисовка пользовательского графика
|
|
||||||
gtl.plot.add(
|
|
||||||
{
|
|
||||||
color: 0xff0000,
|
|
||||||
name: "mask_" + spec.name,
|
|
||||||
x: spec.resolution,
|
|
||||||
y: mask
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
return mask;
|
|
||||||
}; //построение портрета дефекта
|
|
||||||
|
|
||||||
export function spec_model(spec) {
|
|
||||||
let model = spec.base; //исходный массив точек для построения упрощенной модели спектра
|
let model = spec.base; //исходный массив точек для построения упрощенной модели спектра
|
||||||
let imin = 0; //левый соседний индекс
|
let imin = 0; //левый соседний индекс
|
||||||
let imax = 0; //правая соседний индекс
|
let imax = 0; //правая соседний индекс
|
||||||
let df = 0; //ширина гармоники в модели спектра (количество индексов в массиве)
|
|
||||||
for (let i = 0; i < spec.peaks.length; i++) {
|
for (let i = 0; i < spec.peaks.length; i++) {
|
||||||
let freq = spec.peaks[i].freq; //получаем значение частоты гармоники из массива обнаруженных гармоник
|
let freq = spec.peaks[i].freq; //получаем значение частоты гармоники из массива обнаруженных гармоник
|
||||||
let level = spec.peaks[i].level; //получаем значение уровня гармоники из массива обнаруженных гармоник
|
let level = spec.peaks[i].level; //получаем значение уровня гармоники из массива обнаруженных гармоник
|
||||||
let idx = Math.round(freq / spec.resolution); //определяем индекс значения частоты с массиве модели
|
imin = Math.round((freq - freq * 0.5 * tol / 100) / spec.resolution);
|
||||||
imin = idx - df;
|
imax = Math.round((freq + freq * 0.5 * tol / 100) / spec.resolution);
|
||||||
imax = idx + df;
|
|
||||||
for (let j = imin; j <= imax; j++) { model[j] = spec.base[j] + level };
|
for (let j = imin; j <= imax; j++) { model[j] = spec.base[j] + level };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -82,3 +24,61 @@ export function spec_model(spec) {
|
||||||
return model;
|
return model;
|
||||||
}; //построение упрощенной модели спектра
|
}; //построение упрощенной модели спектра
|
||||||
|
|
||||||
|
export function mask(obj) {
|
||||||
|
let mask = obj.spec.base; //исходный массив точек для построения портрета дефекта
|
||||||
|
let df = 0; //отношение ширины фильтра частотному разрешению спектра
|
||||||
|
let dl = obj.lvl; //разность уровней гармонической и случайной составляющей вибрации
|
||||||
|
if (obj.filter != 0) {
|
||||||
|
df = obj.filter.width / obj.spec.resolution;
|
||||||
|
dl = 10 * Math.log10((obj.lvl ** 2) * df + 1);
|
||||||
|
};
|
||||||
|
let k = 0; //коэффициент затухания
|
||||||
|
let xmin = 0; //левая граница коридора
|
||||||
|
let xmax = 0; //правая граница коридора
|
||||||
|
|
||||||
|
switch (obj.type) {
|
||||||
|
case 0: //маска износа: коэффициент затухания 30-50%
|
||||||
|
for (let i = 1; i <= obj.harms; i++) {
|
||||||
|
k = 0.5;
|
||||||
|
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 }; //записываем значение глубины модуляции для коридора
|
||||||
|
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 1: //маска дефекта: коэффициент затухания 5-10%
|
||||||
|
for (let i = 1; i <= harms; i++) {
|
||||||
|
k = 0.1;
|
||||||
|
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 }; //записываем значение глубины модуляции для коридора
|
||||||
|
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 2: //маска перекоса: коэффициент выраженности 0-20%
|
||||||
|
for (let i = 1; i < obj.harms; i++) {
|
||||||
|
if (i % 2 > 0) {
|
||||||
|
k = 0.1;
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
//отрисовка пользовательского графика
|
||||||
|
gtl.plot.add(
|
||||||
|
{
|
||||||
|
color: 0xff0000,
|
||||||
|
name: obj.name,
|
||||||
|
x: obj.spec.resolution,
|
||||||
|
y: mask
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return mask;
|
||||||
|
}; //построение портрета дефекта
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue