UNPKG

dsp-collection

Version:

A collection of JavaScript modules for digital signal processing (written in TypeScript)

54 lines 2.01 kB
import * as WindowFunctions from "./WindowFunctions.js"; import * as ArrayUtils from "../utils/ArrayUtils.js"; function autocorrelationKernel(x, distance, n) { let sum = 0; for (let i = 0; i < n; i++) { sum += x[i] * x[i + distance]; } return sum; } export function nonPeriodicAutocorrelationSingle(x, distance, compensate) { const n = x.length - distance; let sum = autocorrelationKernel(x, distance, n); if (compensate && n > 0) { sum *= x.length / n; } return sum; } export function findNonPeriodicAutocorrelationMaximum(x, minDistance, maxDistance, fixedOverlapWidth) { let maxVal = -Infinity; let maxPos = minDistance; for (let distance = minDistance; distance < maxDistance; distance++) { const val = fixedOverlapWidth ? autocorrelationKernel(x, distance, x.length - maxDistance) : nonPeriodicAutocorrelationSingle(x, distance, true); if (val > maxVal) { maxVal = val; maxPos = distance; } } return maxPos; } export function nonPeriodicAutocorrelation(x, normalize) { const n = x.length; const r = new Float64Array(n); for (let distance = 0; distance < n; distance++) { r[distance] = nonPeriodicAutocorrelationSingle(x, distance, true); } if (normalize && n > 0 && r[0] != 0) { const max = r[0]; for (let distance = 0; distance < n; distance++) { r[distance] /= max; } } return r; } export function windowedNonPeriodicAutocorrelation(x, windowFunction, normalize) { const windowed = WindowFunctions.applyWindow(x, windowFunction); const autoCorr = nonPeriodicAutocorrelation(windowed, normalize); const window = WindowFunctions.getWindowTable(windowFunction, x.length); const windowAutoCorr = nonPeriodicAutocorrelation(window, true); const compensated = ArrayUtils.divide(autoCorr, windowAutoCorr); return compensated; } //# sourceMappingURL=Autocorrelation.js.map