freq_responce/scripts/Передаточная_функция_(older...

432 lines
22 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
var signals = gtl.options.record.signalsModel;
var options = gtl.options;
var record = gtl.options.record;
var point = gtl.options.point;
var fnc = gtl.import("user-functions.js"); // используемые функции
var plot_0 = gtl.plots.add("Спектр ускорения (канал 0)"); // спектр ускорения канала 0
var plot_1 = gtl.plots.add("Спектр ускорения (канал 1)"); // спектр ускорения канала 1
var plot_2 = gtl.plots.add("Спектр ускорения (канал 2)"); // спектр ускорения канала 2
var plot_3 = gtl.plots.add("Спектр силы (канал 3)"); // спектр ускорения канала 3
var plot_0_3 = gtl.plots.add("Перекрёстный спектр (каналы 0 и 3)"); // перекрёстный спектр каналов 0 и 3
var plot_1_3 = gtl.plots.add("Перекрёстный спектр (каналы 1 и 3)"); // перекрёстный спектр каналов 1 и 3
var plot_2_3 = gtl.plots.add("Перекрёстный спектр (каналы 2 и 3)"); // перекрёстный спектр каналов 2 и 3
var plotSpecTransfer_0_3 = gtl.plots.add("Спектр передаточной функции (каналы 0 и 3)"); // спектр передаточной функции каналов 0 и 3
var plotSpecTransfer_1_3 = gtl.plots.add("Спектр передаточной функции (каналы 1 и 3)"); // спектр передаточной функции каналов 1 и 3
var plotSpecTransfer_2_3 = gtl.plots.add("Спектр передаточной функции (каналы 2 и 3)"); // спектр передаточной функции каналов 2 и 3
var plotTransfer_0_3 = gtl.plots.add("Передаточная функция (каналы 0 и 3)"); // передаточная функция каналов 0 и 3
var plotTransfer_1_3 = gtl.plots.add("Передаточная функция (каналы 1 и 3)"); // передаточная функция каналов 1 и 3
var plotTransfer_2_3 = gtl.plots.add("Передаточная функция (каналы 2 и 3)");; // передаточная функция каналов 2 и 3
// ***************************************************************
// ********** ВЫЧИСЛЕНИЕ ПЕРЕДАТОЧНОЙ ФУНКЦИИ (ВНИИЖТ) ***********
// ***************************************************************
// Алгоритм
// 1. Получить спектры ускорения и силы (вибропреобразователь и молоток).
// 2. Вычислить среднее значение по амплитудам (по обоим спектрам).
// 3. Поочерёдно вычесть из каждого элемента амплитудного спектра соответствующее среднее значение,
// записать массивы разниц.
// 4. Перемножить значения массивов разниц, записать массив произведений.
// 5. Разделить значения массива произведений на массив амплитудного спектра силы,
// записать массив передаточной функции.
// ОБРАБОТКА СИГНАЛОВ
// ФИЛЬТРЫ
// Входной сигнал - виброускорение
// Файл импорта функций
// var imp = gtl.import("...");
// ПАРАМЕТРЫ и их ПОРОГОВЫЕ ЗНАЧЕНИЯ (уставки)
// Настройки спектров
// Цвета
// #ff0000 - красный
// #00ff00 - зелёный
// #0000ff - синий
// #00ddff - голубой
// #ff3dcc - фиолетовый
// #ffff00 - жёлтый
// Пороги и прочие изменяемые параметры
var ausp_frequency = 1000; // граничная частота спектра
var ausp_average = 1; // количество усреднений спектра
var ausp_lines = 4; // множитель количества линий спектра (на 1 Гц)
var ausp_smoothing_factor = 100; // усреднение средней линии
var ausp_peak_level = 0.001 // порог обнаружения гармоник РЕДАКТИРОВАТЬ НА РЕАЛЬНЫХ СИГНАЛАХ
var ausp_tolerance = 1; // диапазон поиска гармоники по ширине +/- Гц
var average = 6; // количество усреднений объекта АФЧХ (когерентность и разница фаз)
// var ausp_unit = gtl.spec.db; // отображение амплитуды в дБ
var ausp_unit = gtl.spec.unit; // отображение амплитуды в м/с^2
// *** Формирование спектров сигналов ***
// Спектры каналов ускорения (каналы датчиков вибрации)
// Канал_0
var ausp_acсel_0 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); // объявление переменной спектра
ausp_acсel_0.color = 0x04ff00; // цвет спектра
ausp_acсel_0.name = "Спектр ускорения (канал 0)"; // имя спектра
ausp_acсel_0.color = 0x000000ff; // синий цвет спектра
ausp_acсel_0.frequency = ausp_frequency;
ausp_acсel_0.lines = ausp_frequency * ausp_lines;
ausp_acсel_0.average = ausp_average;
ausp_acсel_0.unit = ausp_unit; // отображение амплитуды
ausp_acсel_0.smoothing_factor = ausp_smoothing_factor;
ausp_acсel_0.smoothed_line_color = 0xff004dff; // цвет средней линии
ausp_acсel_0.peak_level = ausp_peak_level;
ausp_acсel_0.tolerance = ausp_tolerance; // диапазон поиска гармоник +/-
// Канал_1
var ausp_acсel_1 = gtl.add_ausp(gtl.analog_inputs[signals[1].portNumber]); // объявление переменной спектра
ausp_acсel_1.color = 0xcad714; // цвет спектра
ausp_acсel_1.name = "Спектр ускорения (канал 1)"; // имя спектра
ausp_acсel_1.color = 0x000000ff; // синий цвет спектра
ausp_acсel_1.frequency = ausp_frequency;
ausp_acсel_1.lines = ausp_frequency * ausp_lines;
ausp_acсel_1.average = ausp_average;
ausp_acсel_1.unit = ausp_unit; // отображение амплитуды
ausp_acсel_1.smoothing_factor = ausp_smoothing_factor;
ausp_acсel_1.smoothed_line_color = 0xff004dff; // цвет средней линии
ausp_acсel_1.peak_level = ausp_peak_level;
ausp_acсel_1.tolerance = ausp_tolerance; // диапазон поиска гармоник +/-
// Канал_2
var ausp_acсel_2 = gtl.add_ausp(gtl.analog_inputs[signals[2].portNumber]); // объявление переменной спектра
ausp_acсel_2.color = 0xff8800; // цвет спектра
ausp_acсel_2.name = "Спектр ускорения (канал 2)"; // имя спектра
ausp_acсel_2.color = 0x000000ff; // синий цвет спектра
ausp_acсel_2.frequency = ausp_frequency;
ausp_acсel_2.lines = ausp_frequency * ausp_lines;
ausp_acсel_2.average = ausp_average;
ausp_acсel_2.unit = ausp_unit; // отображение амплитуды
ausp_acсel_2.smoothing_factor = ausp_smoothing_factor;
ausp_acсel_2.smoothed_line_color = 0xff004dff; // цвет средней линии
ausp_acсel_2.peak_level = ausp_peak_level;
ausp_acсel_2.tolerance = ausp_tolerance; // диапазон поиска гармоник +/-
// Спектр силы (канал сигнала молотка)
// Канал_3
var ausp_force_3 = gtl.add_ausp(gtl.analog_inputs[signals[3].portNumber]); // объявление переменной спектра
ausp_force_3.color = 0x000000ff; // цвет спектра
ausp_force_3.name = "Спектр силы (канал 3)"; // имя спектра
ausp_force_3.color = 0x00ff0000; // красный цвет спектра
ausp_force_3.frequency = ausp_frequency;
ausp_force_3.lines = ausp_frequency * ausp_lines;
ausp_force_3.average = ausp_average;
ausp_force_3.unit = ausp_unit; // отображение амплитуды
ausp_force_3.smoothing_factor = ausp_smoothing_factor;
ausp_force_3.smoothed_line_color = 0xff004dff; // цвет средней линии
ausp_force_3.peak_level = ausp_peak_level;
ausp_force_3.tolerance = ausp_tolerance; // диапазон поиска гармоник +/-
//*******************ДИАГНОСТИКА*********************
//***************************************************
// Задаем период проведения диагностики в секундах
var acq_time = Math.max(ausp_acсel_0.acq_time, ausp_acсel_1.acq_time, ausp_acсel_2.acq_time, ausp_force_3.acq_time) + 0.1;
gtl.diagnostic.interval = acq_time;
// gtl.diagnostic.interval = 20; // время в секундах (константа)
// примечание: наблюдается зависимость результатов АФЧХ от времени диагностики
function diagnose() {
// Массивы значений
var ausp_accel_0_data = ausp_acсel_0.data; // массив уровней спектра ускорения 0
var ausp_accel_1_data = ausp_acсel_1.data; // массив уровней спектра ускорения 1
var ausp_accel_2_data = ausp_acсel_2.data; // массив уровней спектра ускорения 2
var ausp_force_3_data = ausp_force_3.data; // массив уровней спектра силы 3
gtl.log.info("ausp_data.length", ausp_force_3_data.length);
gtl.log.info("Минимально необходимая длительность сигнала", gtl.diagnostic.interval);
gtl.log.info("ausp_frequency", ausp_frequency);
gtl.log.info("ausp_lines", ausp_lines);
gtl.log.info("-", "-");
// // Пример вычисления среднего по значениям массива
// var arr = [1, 1, 1, 1, 1, 2];
// var average = 0; // среднее значение массива
// let sum = 0; // сумма всех чисел массива
// for (let i = 0; i < arr.length; i += 1)
// {
// sum += arr[i]; // на каждой итерации прибавляем к сумме значение текущего элемента массива
// }
// average = sum / arr.length; // возвращаем среднее арифметическое
// gtl.log.info("average test array", average);
// gtl.log.info("summ test array", sum);
// gtl.log.info("length test array", arr.length);
// Получение массивов для формулы передаточной функции
// Канал_0 (ausp_accel_0_data)
// среднее и сумма
var aver_ausp_accel_0_data = 0; // среднее значение массива
var sum_ausp_accel_0_data = 0; // сумма всех чисел массива
for (let i = 0; i < ausp_accel_0_data.length; i += 1)
{
sum_ausp_accel_0_data += ausp_accel_0_data[i]; // на каждой итерации прибавляем к сумме значение текущего элемента массива
}
aver_ausp_accel_0_data = sum_ausp_accel_0_data / ausp_accel_0_data.length;
// запись массивов (Y_i - Y_average)
var delta_y_aver_ausp_accel_0_data = []; // массив
for (let i = 0; i < ausp_accel_0_data.length; i++)
{
delta_y_aver_ausp_accel_0_data.push(ausp_accel_0_data[i] - aver_ausp_accel_0_data);
}
// Канал_1 (ausp_accel_1_data)
// среднее и сумма
var aver_ausp_accel_1_data = 0; // среднее значение массива
var sum_ausp_accel_1_data = 0; // сумма всех чисел массива
for (let i = 0; i < ausp_accel_1_data.length; i += 1)
{
sum_ausp_accel_1_data += ausp_accel_1_data[i]; // на каждой итерации прибавляем к сумме значение текущего элемента массива
}
aver_ausp_accel_1_data = sum_ausp_accel_1_data / ausp_accel_1_data.length;
// запись массивов (Y_i - Y_average)
var delta_y_aver_ausp_accel_1_data = []; // массив
for (let i = 0; i < ausp_accel_1_data.length; i++)
{
delta_y_aver_ausp_accel_1_data.push(ausp_accel_1_data[i] - aver_ausp_accel_1_data);
}
// Канал_2 (ausp_accel_2_data)
// среднее и сумма
var aver_ausp_accel_2_data = 0; // среднее значение массива
var sum_ausp_accel_2_data = 0; // сумма всех чисел массива
for (let i = 0; i < ausp_accel_2_data.length; i += 1)
{
sum_ausp_accel_2_data += ausp_accel_2_data[i]; // на каждой итерации прибавляем к сумме значение текущего элемента массива
}
aver_ausp_accel_2_data = sum_ausp_accel_2_data / ausp_accel_2_data.length;
// запись массивов (Y_i - Y_average)
var delta_y_aver_ausp_accel_2_data = []; // массив
for (let i = 0; i < ausp_accel_2_data.length; i++)
{
delta_y_aver_ausp_accel_2_data.push(ausp_accel_2_data[i] - aver_ausp_accel_2_data);
}
// Канал_3 (ausp_force_3_data)
// среднее и сумма
var aver_ausp_force_3_data = 0; // среднее значение массива
var sum_ausp_force_3_data = 0; // сумма всех чисел массива
for (let i = 0; i < ausp_force_3_data.length; i += 1)
{
sum_ausp_force_3_data += ausp_force_3_data[i]; // на каждой итерации прибавляем к сумме значение текущего элемента массива
}
aver_ausp_force_3_data = sum_ausp_force_3_data / ausp_force_3_data.length;
// запись массивов (Y_i - Y_average)
var delta_y_aver_ausp_force_3_data = []; // массив
for (let i = 0; i < ausp_force_3_data.length; i++)
{
delta_y_aver_ausp_force_3_data.push(ausp_force_3_data[i] - aver_ausp_force_3_data);
}
// Получение передаточной функции (спектра передаточной функции)
// Канал_0 & Канал_3
var Saf_0_3 = []; // массив перекрёстного спектра ускорения каналов 0 и 3
for (let i = 0; i < ausp_accel_0_data.length; i++)
{
Saf_0_3.push(delta_y_aver_ausp_accel_0_data[i] * delta_y_aver_ausp_force_3_data[i]);
}
var sum_Saf_0_3 = 0; // сумма всех чисел массива перекрёстного спектра Saf_0_3
for (let i = 0; i < Saf_0_3.length; i += 1)
{
sum_Saf_0_3 += Saf_0_3[i]; // на каждой итерации прибавляем к сумме значение текущего элемента массива
}
var HaF_0_3 = []; // массив спектра передаточной функции
for (let i = 0; i < Saf_0_3.length; i++)
{
HaF_0_3.push(Saf_0_3[i] / ausp_force_3_data[i]);
}
var HaF_0_3_sum = []; // массив спектра передаточной функции
for (let i = 0; i < Saf_0_3.length; i++)
{
HaF_0_3_sum.push(sum_Saf_0_3 / ausp_force_3_data[i]);
}
// Канал_1 & Канал_3
var Saf_1_3 = []; // массив перекрёстного спектра ускорения каналов 1 и 3
for (let i = 0; i < ausp_accel_1_data.length; i++)
{
Saf_1_3.push(delta_y_aver_ausp_accel_1_data[i] * delta_y_aver_ausp_force_3_data[i]);
}
var sum_Saf_1_3 = 0; // сумма всех чисел массива перекрёстного спектра Saf_1_3
for (let i = 0; i < Saf_1_3.length; i += 1)
{
sum_Saf_1_3 += Saf_1_3[i]; // на каждой итерации прибавляем к сумме значение текущего элемента массива
}
var HaF_1_3 = []; // массив спектра передаточной функции
for (let i = 0; i < Saf_1_3.length; i++)
{
HaF_1_3.push(Saf_1_3[i] / ausp_force_3_data[i]);
}
var HaF_1_3_sum = []; // массив спектра передаточной функции
for (let i = 0; i < Saf_1_3.length; i++)
{
HaF_1_3_sum.push(sum_Saf_1_3 / ausp_force_3_data[i]);
}
// Канал_2 & Канал_3
var Saf_2_3 = []; // массив перекрёстного спектра ускорения каналов 2 и 3
for (let i = 0; i < ausp_accel_2_data.length; i++)
{
Saf_2_3.push(delta_y_aver_ausp_accel_2_data[i] * delta_y_aver_ausp_force_3_data[i]);
}
var sum_Saf_2_3 = 0; // сумма всех чисел массива перекрёстного спектра Saf_2_3
for (let i = 0; i < Saf_2_3.length; i += 1)
{
sum_Saf_2_3 += Saf_2_3[i]; // на каждой итерации прибавляем к сумме значение текущего элемента массива
}
var HaF_2_3 = []; // массив спектра передаточной функции
for (let i = 0; i < Saf_2_3.length; i++)
{
HaF_2_3.push(Saf_2_3[i] / ausp_force_3_data[i]);
}
var HaF_2_3_sum = []; // массив спектра передаточной функции
for (let i = 0; i < Saf_2_3.length; i++)
{
HaF_2_3_sum.push(sum_Saf_2_3 / ausp_force_3_data[i]);
}
gtl.log.info("---", "---");
gtl.log.info("average ausp_force_3_data", aver_ausp_force_3_data);
gtl.log.info("summ ausp_force_3_data", sum_ausp_force_3_data);
gtl.log.info("length ausp_force_3_data", ausp_force_3_data.length);
gtl.log.info("sum_Saf_0_3", sum_Saf_0_3);
gtl.log.info("---", "---");
gtl.log.info("average ausp_accel_2_data", aver_ausp_accel_2_data);
gtl.log.info("summ ausp_accel_2_data", sum_ausp_accel_2_data);
gtl.log.info("length ausp_accel_2_data", ausp_accel_2_data.length);
gtl.log.info("---", "---");
gtl.log.info("average ausp_accel_1_data", aver_ausp_accel_1_data);
gtl.log.info("summ ausp_accel_1_data", sum_ausp_accel_1_data);
gtl.log.info("length ausp_accel_1_data", ausp_accel_1_data.length);
gtl.log.info("---", "---");
gtl.log.info("average ausp_accel_0_data", aver_ausp_accel_0_data);
gtl.log.info("summ ausp_accel_0_data", sum_ausp_accel_0_data);
gtl.log.info("length ausp_accel_0_data", ausp_accel_0_data.length);
// Построение пользовательских графиков
plot_0.add(
{
color: 0x04ff00,
name: "Спектр ускорения (канал 0)",
x: 1/ausp_lines,
y: ausp_accel_0_data
});
plot_1.add(
{
color: 0xcad714,
name: "Спектр ускорения (канал 1)",
x: 1/ausp_lines,
y: ausp_accel_1_data
});
plot_2.add(
{
color: 0xff8800,
name: "Спектр ускорения (канал 2)",
x: 1/ausp_lines,
y: ausp_accel_2_data
});
plot_3.add(
{
color: 0xff00f7,
name: "Спектр силы (канал 3)",
x: 1/ausp_lines,
y: ausp_force_3_data
});
plot_0_3.add(
{
color: 0xff00ff,
name: "Перекрёстный спектр (каналы 0 и 3)",
x: 1/ausp_lines,
y: Saf_0_3
});
plot_1_3.add(
{
color: 0xED3CCA,
name: "Перекрёстный спектр (каналы 1 и 3)",
x: 1/ausp_lines,
y: Saf_1_3
});
plot_2_3.add(
{
color: 0x9966CC,
name: "Перекрёстный спектр (каналы 2 и 3)",
x: 1/ausp_lines,
y: Saf_2_3
});
plotSpecTransfer_0_3.add(
{
color: 0x78DBE2,
name: "Спектр передаточной функции (каналы 0 и 3)",
x: 1/ausp_lines,
y: HaF_0_3
});
plotSpecTransfer_1_3.add(
{
color: 0x349a32,
name: "Спектр передаточной функции (каналы 1 и 3)",
x: 1/ausp_lines,
y: HaF_1_3
});
plotSpecTransfer_2_3.add(
{
color: 0x6dd08c,
name: "Спектр передаточной функции (каналы 2 и 3)",
x: 1/ausp_lines,
y: HaF_2_3
});
plotTransfer_0_3.add(
{
color: 0xedc887,
name: "Передаточная функция (каналы 0 и 3)",
x: 1/ausp_lines,
y: HaF_0_3_sum
});
plotTransfer_1_3.add(
{
color: 0x99f0b7,
name: "Передаточная функция (каналы 1 и 3)",
x: 1/ausp_lines,
y: HaF_1_3_sum
});
plotTransfer_2_3.add(
{
color: 0xe8e463,
name: "Передаточная функция (каналы 2 и 3)",
x: 1/ausp_lines,
y: HaF_2_3_sum
});
gtl.diagnostic.stop();
}