mask_funk was updated

develop
Aleksey_K 2024-05-20 16:32:42 +09:00
parent 9be2c7aef3
commit 1d0593f72c
1 changed files with 22 additions and 10 deletions

View File

@ -1,5 +1,5 @@
export function spec_model(spec, tol) {
export function spec_model(spec, tol, color) {
let result = {}; //результат
let model = spec.base; //исходный массив точек для построения упрощенной модели спектра
let imin = 0; //левая граница коридора
@ -21,7 +21,7 @@ export function spec_model(spec, tol) {
//отрисовка графика на plot
gtl.plot.add(
{
color: 0x44944A,
color: color,
name: result.name,
x: result.resolution,
y: model
@ -64,33 +64,45 @@ export function mask(obj) {
Y += (a[i] - a_avg) ** 2;
Z += (b[i] - b_avg) ** 2;
};
gtl.log.info("Корреляция гармоники:", X / (Math.sqrt(Y) * Math.sqrt(Z)));
//gtl.log.info("Корреляция гармоники:", X / (Math.sqrt(Y) * Math.sqrt(Z)));
return X / (Math.sqrt(Y) * Math.sqrt(Z));
};
let arr1 = [];
let arr2 = [];
switch (obj.type) {
case 0: //обычный ряд
for (let i = 1; i <= harms; i++) {
let arr1 = [];
let arr2 = [];
xmin = Math.round(i * (obj.freq - obj.freq * 0.5 * obj.tol / 100) / obj.src2.resolution); //определяем индекс левой границы коридора
xmax = Math.round(i * (obj.freq + obj.freq * 0.5 * obj.tol / 100) / obj.src2.resolution); //определяем индекс правой границы коридора
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 }; //записываем значение глубины модуляции для коридора
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
for (let j = xmin - 2; j <= xmax + 2; j++) {
arr1.push(mask[j]);
arr2.push(data[j]);
}; //формируем массивы портретной гармоники и спектра (модели) под портретом
correlation += corr(arr1, arr2); //рассчитываем корреляцию данных из массивов
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
};
break;
case 1: //четные составляющие
for (let i = 1; i < harms; i++) {
for (let i = 1; i <= harms; i++) {
xmin = Math.round(i * (obj.freq - obj.freq * 0.5 * obj.tol / 100) / obj.src2.resolution); //определяем индекс левой границы коридора
xmax = Math.round(i * (obj.freq + obj.freq * 0.5 * obj.tol / 100) / obj.src2.resolution); //определяем индекс правой границы коридора
if (xmax > obj.src2.base.length) { xmax = obj.src2.base.length - 2 }; //проверяем выход границы за размер массива
if (i % 2 > 0) {
for (let j = xmin; j <= xmax; j++) { mask[j] = obj.src2.base[j] + k * dl }; //записываем значение глубины модуляции для коридора (нечетная гармоника)
} else {
for (let j = xmin; j <= xmax; j++) { mask[j] = obj.src2.base[j] + dl }; //записываем значение глубины модуляции для коридора (четная гармоника)
dl = dl - (k * dl); //снижаем глубину модуляции с коэффициентом затухания
};
for (let j = xmin - 2; j <= xmax + 2; j++) {
arr1.push(mask[j]);
arr2.push(data[j]);
}; //формируем массивы портретной гармоники и спектра (модели) под портретом
correlation += corr(arr1, arr2); //рассчитываем корреляцию данных из массивов
};
break;
default:
@ -105,7 +117,7 @@ export function mask(obj) {
//отрисовка графика на plot
gtl.plot.add(
{
color: 0xff0000,
color: obj.color,
name: obj.name,
x: obj.src2.resolution,
y: mask