From eccc29b1716bbafa0fe06e77b0c709ab63f1a36d Mon Sep 17 00:00:00 2001 From: Aleksey_K Date: Wed, 15 May 2024 14:24:04 +0900 Subject: [PATCH] mask was changed --- mask_func.js | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/mask_func.js b/mask_func.js index 8e90562..773fb1e 100644 --- a/mask_func.js +++ b/mask_func.js @@ -1,8 +1,12 @@ export function mask(spec, filter, frq, harms, lvl, tol, state) { let mask = spec.base; //исходный массив точек для построения портрета дефекта - let df = filter.width / spec.resolution; //отношение ширины фильтра частотному разрешению спектра - let dl = 10 * Math.log10((lvl ** 2) * df + 1); //разность уровней гармонической и случайной составляющей вибрации + 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; //правая граница коридора @@ -11,8 +15,8 @@ export function mask(spec, filter, frq, harms, lvl, tol, state) { case 0: //маска износа: коэффициент затухания 30-50% for (let i = 1; i <= harms; i++) { k = 0.5; - xmin = Math.round(i * (frq - frq * tol / 100) / spec.resolution); //определяем индекс левой границы коридора - xmax = Math.round(i * (frq + frq * tol / 100) / spec.resolution); //определяем индекс правой границы коридора; + 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); //снижаем глубину модуляции с коэффициентом затухания }; @@ -20,8 +24,8 @@ export function mask(spec, filter, frq, harms, lvl, tol, state) { case 1: //маска дефекта: коэффициент затухания 5-10% for (let i = 1; i <= harms; i++) { k = 0.1; - xmin = Math.round(i * (frq - frq * tol / 100) / spec.resolution); //определяем индекс левой границы коридора - xmax = Math.round(i * (frq + frq * tol / 100) / spec.resolution); //определяем индекс правой границы коридора; + 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); //снижаем глубину модуляции с коэффициентом затухания }; @@ -31,12 +35,6 @@ export function mask(spec, filter, frq, harms, lvl, tol, state) { if (i % 2 > 0) { k = 0.1; - - - - - - }; }; break; @@ -56,3 +54,31 @@ export function mask(spec, filter, frq, harms, lvl, tol, state) { return mask; }; //построение портрета дефекта + +export function spec_model(spec) { + let model = spec.base; //исходный массив точек для построения упрощенной модели спектра + let imin = 0; //левый соседний индекс + let imax = 0; //правая соседний индекс + let df = 0; //ширина гармоники в модели спектра (количество индексов в массиве) + for (let i = 0; i < spec.peaks.length; i++) { + let freq = spec.peaks[i].freq; //получаем значение частоты гармоники из массива обнаруженных гармоник + let level = spec.peaks[i].level; //получаем значение уровня гармоники из массива обнаруженных гармоник + let idx = Math.round(freq / spec.resolution); //определяем индекс значения частоты с массиве модели + imin = idx - df; + imax = idx + df; + 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; +}; //построение упрощенной модели спектра +