Gtld linearInterpolate: различия между версиями
Перейти к навигации
Перейти к поиску
(Новая страница: «== Краткое описание == Функция предназначена для уменьшения количества данных массива методом линейной интерполяции. Функция возвращает массив с указанным количеством элементов. <p style="color: red>Cодержание функции может дополняться!</p> == Синтаксис == Стан...») |
|||
| Строка 32: | Строка 32: | ||
//если мы на последнем элементе исходного массива, то берем его, иначе получается NaN в конце массива | //если мы на последнем элементе исходного массива, то берем его, иначе получается NaN в конце массива | ||
if (i === N - 1) { | if (i === N - 1) { result[j] = arr[i] } | ||
else { result[j] = arr[i] * (1 - frac) + arr[i + 1] * frac } //формула линейной интерполяции | |||
} | } | ||
Версия от 01:53, 12 августа 2026
Краткое описание
Функция предназначена для уменьшения количества данных массива методом линейной интерполяции. Функция возвращает массив с указанным количеством элементов.
Cодержание функции может дополняться!
Синтаксис
Стандартная конструкция выглядит таким образом:
let __inter = linearInterpolate(array, M);
Аргументы
array- исходный массив данных;M- длина целевого массива;
Содержание функции
function linearInterpolate(arr, M) {
//Функция для уменьшения элементов исходного массива методом линейной интерполяции (применяется для обработки аудио оказывается)
//arr - исходный массив данных на низкой частоте
//M - длина целевого массива данных (на высокой частоте)
const result = new Array(M); //результирующий массив ограниченной длины
const N = arr.length; //длина исходного НЧ массива
if (M <= 0) return []; //если целевой массив пустой, то возвращаем пустой
if (M === 1) return [arr[0]]; //если целевой содержит один элемент, то возвращаем первый из исходного
if (arr.length === 1) return new Array(M).fill(arr[0]); //если исходный массив содержит только один элемент, заполняем весь результат этим значением
for (let j = 0; j < M; j++) {
const x = j * (N - 1) / (M - 1); //позиция элемента в исходном массиве
const i = Math.floor(x); //целая часть - индекс левого соседа
const frac = x - i; //дробная часть - вес правого соседа (от 0 до 1): типа расстояние в % до него
//если мы на последнем элементе исходного массива, то берем его, иначе получается NaN в конце массива
if (i === N - 1) { result[j] = arr[i] }
else { result[j] = arr[i] * (1 - frac) + arr[i + 1] * frac } //формула линейной интерполяции
}
return result;
}