"use strict"; let signals = gtl.options.record.signalsModel; let options = gtl.options; let record = gtl.options.record; let point = gtl.options.point; // let fnc = gtl.import("user-functions.js"); // используемые функции let plot_ausp_vibr = gtl.plots.add("Спектры по каналам"); // спектры по каналам вибрации let plot_FreqResp_ampl_j = gtl.plots.add("Частотный отклик по каналам (амплитуда)"); // амплитудные спектры по каналам вибрации let plot_FreqResp_phase_j = gtl.plots.add("Частотный отклик по каналам (фаза)"); // фазовые спектры по каналам вибрации // Алгоритм // 1. Получить спектры ускорения и силы в комплексном виде (вибропреобразователь и молоток). // 2. Преобразовать спектр силы (молотка) в комплексно-сопряжённый вид. // 3. Получить кросс-спектр (перекрёстный) между ускорением и силой. // 4. Вычислить деление кросс-спектра на спектр силы. // ОБРАБОТКА СИГНАЛОВ // ФИЛЬТРЫ // Входной сигнал - виброускорение // Файл импорта функций // var imp = gtl.import("..."); // ПАРАМЕТРЫ и их ПОРОГОВЫЕ ЗНАЧЕНИЯ (уставки) // Настройки спектров // Цвета // #ff0000 - красный // #00ff00 - зелёный // #0000ff - синий // #00ddff - голубой // #ff3dcc - фиолетовый // #ffff00 - жёлтый // *** Формирование спектров сигналов *** // Настройки для спектров и АФЧХ let frequency = gtl.options.customOptions.frequency; // граничная частота let resolution = gtl.options.customOptions.resolution; // частотное разрешение let lines = 1 / resolution; // количество линий let average = gtl.options.customOptions.average; // количество усреднений let overlap = gtl.options.customOptions.overlap; // наложение let view_ = gtl.options.customOptions.view; // отображение амплитуды спектра db / unit (1 / 0) let view = gtl.spec.unit; // значение view по умолчанию let view_freq_resp = gtl.options.customOptions.view_freq_resp; // отображение амплитуды спектра частотного отклика db / unit (1 / 0) let variant_freq_resp = gtl.options.customOptions.variant_freq_resp; // вариант вычисления: 0 - через кросс, 1 - через автоспектр let ausp_vibr = []; // массив объектов спектров вибрации let ausp_force = []; // массив объектов спектров силы по диапазонам [k] let counter = 1; // счётчик для цикла по каналам вибрации let counter_ranges = 0; // счётчик для цикла по выделенным диапазонам сигналов записи let ausp_cross_real = []; // массив объектов действительной части кросс-спектров канала силы [0] и канала вибрации [j] let ausp_cross_imag = []; // массив объектов мнимой части кросс-спектров канала силы [0] и канала вибрации [j] let freq_resp_real = []; // действительная часть частотного отклика между каналом силы [0] и каналом вибрации [j] let freq_resp_imag = []; // мнимая часть частотного отклика между каналом силы [0] и каналом вибрации [j] let freq_resp_ampl = []; // амплитуда частотного отклика между каналом силы [0] и каналом вибрации [j] let freq_resp_phase = []; // фаза частотного отклика между каналом силы [0] и каналом вибрации [j] // Задание диапазона сигнала для анализа // let ranges = gtl.player.custom_ranges; // ranges.custom_ranges = [{min : 0.0172949, max: 0.4528125}, ranges[0]]; // gtl.player.custom_ranges = [gtl.player.stored_ranges[1,2,3]]; gtl.log.info("Количество выделенных диапазонов", gtl.player.stored_ranges.length); // Спектры каналов ускорения (каналы датчиков вибрации) gtl.log.info("Количество каналов кроме силы", signals.length - 1); // Условие отображения спектров в дБ или линейном виде if (view_ == 1) {view = gtl.spec.db} else if (view_ == 0) {view = gtl.spec.unit} for (let k = 0; k < gtl.player.stored_ranges.length; k++) { // цикл по диапазонам ausp_vibr[k] = []; for (let j = 1; j < signals.length; j++) { // цикл по каналам // Спектр амплитудный для цикла по всем каналам вибрации ausp_vibr.push( gtl.create_ausp( { "src": gtl.analog_inputs[signals[j].portNumber], // сигнал вибрации "frequency": frequency, "resolution": resolution, "average": average, "overlap": overlap, "window": gtl.spec.rectangular, "view": view } ) ); } } for (let k = 0; k < gtl.player.stored_ranges.length; k++) { // цикл по диапазонам // Спектр силы (канал сигнала молотка) канал [0] ausp_force.push( gtl.create_ausp( { "src": gtl.analog_inputs[signals[0].portNumber], // сигнал силы "frequency": frequency, "resolution": resolution, "average": average, "overlap": overlap, "window": gtl.spec.rectangular, "view": view } ) ); } gtl.log.info("Количество спектров вибрации", ausp_vibr.length); gtl.log.info("Количество спектров силы", ausp_force.length); //*******************ДИАГНОСТИКА********************* //*************************************************** // Задаем период проведения диагностики в секундах var acq_time = Math.max(ausp_force[0].acq_time) + 0.3; gtl.diagnostic.interval = acq_time; gtl.log.info("acq_time", acq_time); // gtl.diagnostic.interval = 10; // время в секундах (константа) // примечание: наблюдается зависимость результатов АФЧХ от времени диагностики function diagnose() { // gtl.log.info("ranges", JSON.stringify(ranges)); // gtl.log.info("ranges", JSON.stringify(gtl.player.stored_ranges)); // Графики амплитудных спектров вибрации for (let k = 0; k < gtl.player.stored_ranges.length; k++) { if (counter_ranges > 0) { for (let j = 0; j < ausp_vibr.length; j++) { if (counter > 0) { // plot_ausp_vibr.add( // { // color: 0x34C924, // name: `Спектр канала ${j+1} диапазона ${k}, g`, // x: ausp_vibr[k][j].resolution, // y: ausp_vibr[k][j].data, // tags: ["Амплитудный спектр вибрации, g"] // } // ); } }; counter += 1; gtl.log.info("ausp_force[k].length", ausp_force[0].length); plot_ausp_vibr.add( { color: 0xff00f7, name: "Спектр силы (канал [0]), N", x: 1/lines, y: ausp_force[k].data, tags: ["Спектр силы (канал [0]), N"] }); } }; counter_ranges += 1; gtl.diagnostic.stop(); }