getMask and getStd were changed
parent
70d05e8726
commit
f2cc08fe32
50
getMask.js
50
getMask.js
|
@ -33,19 +33,19 @@ export function specModel(spec, tol, color, visible) {
|
|||
return result;
|
||||
}; //построение упрощенной модели спектра
|
||||
|
||||
export function getMask(obj) {
|
||||
export function getMask(options) {
|
||||
let result = {}; //результат
|
||||
let data = obj.src1.data; //массив точек спектра для сравнения с портретом
|
||||
let mask = obj.src2.base; //массив точек базовой линии для построения портрета дефекта
|
||||
let harms = obj.harms; //кол-во гармоник портрета
|
||||
if (obj.freq * harms > obj.src2.frequency) { harms = Math.trunc(obj.src2.frequency / obj.freq) }; //проверяем максимальное кол-во гармоник в портрете
|
||||
let data = options.src1.data; //массив точек спектра для сравнения с портретом
|
||||
let mask = options.src2.base; //массив точек базовой линии для построения портрета дефекта
|
||||
let harms = options.harms; //кол-во гармоник портрета
|
||||
if (options.freq * harms > options.src2.frequency) { harms = Math.trunc(options.src2.frequency / options.freq) }; //проверяем максимальное кол-во гармоник в портрете
|
||||
let df = 0; //отношение ширины фильтра частотному разрешению спектра
|
||||
let dl = obj.lvl; //разность уровней гармонической и случайной составляющей вибрации
|
||||
if (obj.filter != 0) {
|
||||
df = obj.src2.frequency / obj.filter.width;
|
||||
dl = 10 * Math.log10((obj.lvl ** 2) / df + 1);
|
||||
let dl = options.lvl; //разность уровней гармонической и случайной составляющей вибрации
|
||||
if (options.filter != 0) {
|
||||
df = options.src2.frequency / options.filter.width;
|
||||
dl = 10 * Math.log10((options.lvl ** 2) / df + 1);
|
||||
};
|
||||
let k = obj.coef; //коэффициент затухания
|
||||
let k = options.coef; //коэффициент затухания
|
||||
let x = 0; //индекс элемента массива для гармоники
|
||||
let dx = 0; //коридор индексов
|
||||
let xmin = 0; //левая граница коридора
|
||||
|
@ -74,16 +74,16 @@ export function getMask(obj) {
|
|||
|
||||
let arr1 = [];
|
||||
let arr2 = [];
|
||||
switch (obj.type) {
|
||||
switch (options.type) {
|
||||
case 0: //обычный ряд
|
||||
for (let i = 1; i <= harms; i++) {
|
||||
x = Math.trunc(i * obj.freq / obj.src2.resolution); //определяем инднекс элемента массива для гармоники
|
||||
dx = Math.trunc(i * (obj.freq * obj.tol / 100) / obj.src2.resolution); //коридор индексов массива для гармоники
|
||||
x = Math.trunc(i * options.freq / options.src2.resolution); //определяем инднекс элемента массива для гармоники
|
||||
dx = Math.trunc(i * (options.freq * options.tol / 100) / options.src2.resolution); //коридор индексов массива для гармоники
|
||||
xmin = x - Math.round(dx / 2); //определяем индекс левой границы коридора
|
||||
xmax = x + Math.round(dx / 2); //определяем индекс правой границы коридора
|
||||
|
||||
if (xmax > obj.src2.base.length) { xmax = obj.src2.base.length - 2 }; //проверяем выход границы за размер массива
|
||||
for (let j = xmin; j <= xmax; j++) { mask[j] = obj.src2.base[j] + dl }; //записываем значение глубины модуляции для коридора
|
||||
if (xmax > options.src2.base.length) { xmax = options.src2.base.length - 2 }; //проверяем выход границы за размер массива
|
||||
for (let j = xmin; j <= xmax; j++) { mask[j] = options.src2.base[j] + dl }; //записываем значение глубины модуляции для коридора
|
||||
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
|
||||
|
||||
for (let j = xmin - 2; j <= xmax + 2; j++) {
|
||||
|
@ -95,16 +95,16 @@ export function getMask(obj) {
|
|||
break;
|
||||
case 1: //четные составляющие
|
||||
for (let i = 1; i <= harms; i++) {
|
||||
x = Math.trunc(i * obj.freq / obj.src2.resolution); //инднекс элемента массива для гармоники
|
||||
dx = Math.trunc(i * (obj.freq * obj.tol / 100) / obj.src2.resolution); //коридор индексов массива для гармоники
|
||||
x = Math.trunc(i * options.freq / options.src2.resolution); //инднекс элемента массива для гармоники
|
||||
dx = Math.trunc(i * (options.freq * options.tol / 100) / options.src2.resolution); //коридор индексов массива для гармоники
|
||||
xmin = x - Math.round(dx / 2); //определяем индекс левой границы коридора
|
||||
xmax = x + Math.round(dx / 2); //определяем индекс правой границы коридора
|
||||
|
||||
if (xmax > obj.src2.base.length) { xmax = obj.src2.base.length - 2 }; //проверяем выход границы за размер массива
|
||||
if (xmax > options.src2.base.length) { xmax = options.src2.base.length - 2 }; //проверяем выход границы за размер массива
|
||||
if (i % 2 > 0) {
|
||||
for (let j = xmin; j <= xmax; j++) { mask[j] = obj.src2.base[j] + k * dl }; //записываем значение глубины модуляции для коридора (нечетная гармоника)
|
||||
for (let j = xmin; j <= xmax; j++) { mask[j] = options.src2.base[j] + k * dl }; //записываем значение глубины модуляции для коридора (нечетная гармоника)
|
||||
} else {
|
||||
for (let j = xmin; j <= xmax; j++) { mask[j] = obj.src2.base[j] + dl }; //записываем значение глубины модуляции для коридора (четная гармоника)
|
||||
for (let j = xmin; j <= xmax; j++) { mask[j] = options.src2.base[j] + dl }; //записываем значение глубины модуляции для коридора (четная гармоника)
|
||||
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
|
||||
};
|
||||
|
||||
|
@ -120,17 +120,17 @@ export function getMask(obj) {
|
|||
};
|
||||
|
||||
//формируем результат
|
||||
result["name"] = obj.name; //имя маски дефекта
|
||||
result["name"] = options.name; //имя маски дефекта
|
||||
result["corr"] = correlation / harms; //средняя корреляция
|
||||
result["data"] = mask; //массив данных портрета
|
||||
|
||||
//отрисовка графика на plot
|
||||
if (obj.visible == true) {
|
||||
if (options.visible == true) {
|
||||
gtl.plot.add(
|
||||
{
|
||||
color: obj.color,
|
||||
name: obj.name,
|
||||
x: obj.src2.resolution,
|
||||
color: options.color,
|
||||
name: options.name + " (" + result.corr.toFixed(2) + ")",
|
||||
x: options.src2.resolution,
|
||||
y: mask
|
||||
}
|
||||
);
|
||||
|
|
|
@ -1,27 +1,134 @@
|
|||
export function getStdMeasures(options) {
|
||||
let __source = options.src;
|
||||
let __time = 0.1;
|
||||
let __avg = 5;
|
||||
|
||||
export function getStdMeasure(src) {
|
||||
let __result = {}; //результат
|
||||
if (options.time != undefined) { __time = options.time };
|
||||
if (options.avg != undefined) { __avg = options.avg };
|
||||
|
||||
//фильтрация диапазона в сигнале для определения СКЗ вибрации
|
||||
var __filter = gtl.add_filter_iir(src);
|
||||
__filter.kind = gtl.filter_iir.butterworth;
|
||||
__filter.type = gtl.filter_iir.lowpass;
|
||||
__filter.order = 8;
|
||||
__filter.frequency = 1000;
|
||||
function getFilter(L, R) {
|
||||
let __filter = gtl.add_filter_iir(__source);
|
||||
__filter.kind = gtl.filter_iir.butterworth;
|
||||
__filter.order = 10;
|
||||
|
||||
//определение среднего квадратического значения в диапазоне фильтра до 1000 Гц
|
||||
var __rms = gtl.add_value_rms(__filter);
|
||||
__rms.time = 0.1;
|
||||
__rms.avg_cnt = 4;
|
||||
switch (L) {
|
||||
case "lowpass":
|
||||
__filter.type = gtl.filter_iir.lowpass;
|
||||
__filter.frequency = R;
|
||||
break;
|
||||
|
||||
//определение амплитудного значения в диапазоне фильтра до 1000 Гц
|
||||
var __ampl = gtl.add_value_ampl(__filter);
|
||||
__ampl.time = 0.1;
|
||||
__ampl.avg_cnt = 4;
|
||||
case "highpass":
|
||||
__filter.type = gtl.filter_iir.highpass;
|
||||
__filter.frequency = R;
|
||||
break;
|
||||
|
||||
__result = {
|
||||
rms1000: __rms,
|
||||
ampl1000: __ampl
|
||||
default:
|
||||
__filter.type = gtl.filter_iir.bandpass;
|
||||
__filter.frequency = (R - L) / 2 + L;
|
||||
__filter.width = R - L;
|
||||
break;
|
||||
};
|
||||
|
||||
return __filter;
|
||||
}; //формирование фильтра
|
||||
|
||||
function getIntg(src, taps, scale) {
|
||||
let __intg = gtl.add_intg(src);
|
||||
__intg.taps = taps;
|
||||
__intg.scale = scale;
|
||||
|
||||
return __intg;
|
||||
}; //интегрирование сигнала
|
||||
|
||||
function getRMS(src) {
|
||||
let __rms = gtl.add_value_rms(src);
|
||||
__rms.time = __time;
|
||||
__rms.avg_cnt = __avg;
|
||||
|
||||
return __rms;
|
||||
}; //получение СКЗ
|
||||
|
||||
function getAmpl(src) {
|
||||
let __ampl = gtl.add_value_ampl(src);
|
||||
__ampl.time = __time;
|
||||
__ampl.avg_cnt = __avg;
|
||||
|
||||
return __ampl;
|
||||
}; //получение амплитуды
|
||||
|
||||
function getKurt(src) {
|
||||
let __kurt = gtl.add_value_kurt(src);
|
||||
__kurt.time = __time;
|
||||
__kurt.avg_cnt = __avg;
|
||||
|
||||
return __kurt;
|
||||
}; //получение эксцесса
|
||||
|
||||
//[Набор фильтров]
|
||||
let __filter_2_200 = getFilter(2, 200);
|
||||
let __filter_2_1000 = getFilter(2, 1000);
|
||||
let __filter_10_1000 = getFilter(10, 1000);
|
||||
let __filter_2_3000 = getFilter(2, 3000);
|
||||
let __filter_2_10000 = getFilter(2, 10000);
|
||||
let __filter_100_10000 = getFilter(100, 10000);
|
||||
let __filter_2_5k = getFilter(2500, 5000);
|
||||
let __filter_5_10k = getFilter(5000, 10000);
|
||||
let __filter_10_20k = getFilter(10000, 20000);
|
||||
let __filter_30_40k = getFilter(30000, 40000);
|
||||
let __filter_40_80k = getFilter(40000, 80000);
|
||||
|
||||
//[Набор интеграторов]
|
||||
let __pre_int1 = getIntg(__filter_2_1000, 1, 1000);
|
||||
let __pre_int2 = getIntg(__filter_10_1000, 1, 1000);
|
||||
let __pre_int3 = getIntg(__filter_2_200, 2, 1);
|
||||
|
||||
|
||||
/*let __int1 = gtl.add_filter_iir(__pre_int1);
|
||||
__int1.kind = gtl.filter_iir.butterworth;
|
||||
__int1.type = gtl.filter_iir.highpass;
|
||||
__int1.order = 10;
|
||||
__int1.frequency = 2;*/
|
||||
|
||||
/*let __int2 = gtl.add_filter_iir(__pre_int2);
|
||||
__int2.kind = gtl.filter_iir.butterworth;
|
||||
__int2.type = gtl.filter_iir.highpass;
|
||||
__int2.order = 10;
|
||||
__int2.frequency = 2;*/
|
||||
|
||||
//[Расчет набора параметров]
|
||||
let __rms_A2_3000 = getRMS(__filter_2_3000); //СКЗ виброускорения в диапазоне 2-3000 Гц
|
||||
let __rms_A2_10000 = getRMS(__filter_2_10000); //СКЗ виброускорения в диапазоне 2-10000 Гц
|
||||
let __rms_A100_10000 = getRMS(__filter_100_10000); //СКЗ виброускорения в диапазоне 100-10000 Гц
|
||||
|
||||
let __ampl_A100_10000 = getAmpl(__filter_100_10000); //амплитуда виброускорения в диапазоне 100-10000 Гц
|
||||
let __ampl_full = getAmpl(__source); //амплитуда виброускорения во всем диапазоне измерения
|
||||
|
||||
let __rms_V2_1000 = getRMS(__pre_int1); //СКЗ виброскорости в диапазоне 2-1000 Гц
|
||||
let __rms_V10_1000 = getRMS(__pre_int2); //СКЗ виброскорости в диапазоне 10-1000 Гц
|
||||
let __rms_S2_200 = getRMS(__pre_int3); //СКЗ виброперемещения в диапазоне 2-200 Гц
|
||||
|
||||
let __kurt_full = getKurt(__source); //эксцесс во всем диапазоне измерения
|
||||
let __kurt_2_5k = getKurt(__filter_2_5k); //эксцесс в полосе 2.5-5 кГц
|
||||
let __kurt_5_10k = getKurt(__filter_5_10k); //эксцесс в полосе 5-10 кГц
|
||||
let __kurt_10_20k = getKurt(__filter_10_20k); //эксцесс в полосе 10-20 кГц
|
||||
let __kurt_30_40k = getKurt(__filter_30_40k); //эксцесс в полосе 30-40 кГц
|
||||
let __kurt_40_80k = getKurt(__filter_40_80k); //эксцесс в полосе 40-80 кГц
|
||||
|
||||
let __result = {
|
||||
rms_A2_3000: __rms_A2_3000,
|
||||
rms_A2_10000: __rms_A2_10000,
|
||||
rms_A100_10000: __rms_A100_10000,
|
||||
ampl_A100_10000: __ampl_A100_10000,
|
||||
ampl_full: __ampl_full,
|
||||
rms_V2_1000: __rms_V2_1000,
|
||||
rms_V10_1000: __rms_V10_1000,
|
||||
rms_S2_200: __rms_S2_200,
|
||||
kurt_full: __kurt_full,
|
||||
kurt_2_5k: __kurt_2_5k,
|
||||
kurt_5_10k: __kurt_5_10k,
|
||||
kurt_10_20k: __kurt_10_20k,
|
||||
kurt_30_40k: __kurt_30_40k,
|
||||
kurt_40_80k: __kurt_40_80k
|
||||
};
|
||||
|
||||
return __result;
|
||||
|
|
Loading…
Reference in New Issue