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