UNPKG

@thi.ng/dsp

Version:

Composable signal generators, oscillators, filters, FFT, spectrum, windowing & related DSP utils

47 lines (46 loc) 1.41 kB
import { isNumber } from "@thi.ng/checks/is-number"; import { isComplex } from "./complex.js"; const integralT = (window) => { let sum = 0; for (let i = window.length; i-- > 0; ) { sum += window[i]; } return sum; }; const integralTSquared = (window) => { let sum = 0; for (let i = window.length; i-- > 0; ) { sum += window[i] ** 2; } return sum; }; const integralF = ([real, img]) => { let sum = 0; for (let i = real.length; i-- > 0; ) { sum += Math.hypot(real[i], img[i]); } return sum; }; const integralFSquared = ([real, img]) => { let sum = 0; for (let i = real.length; i-- > 0; ) { sum += real[i] ** 2 + img[i] ** 2; } return sum; }; const powerScale = (scale, base = 1) => isNumber(scale) ? scale : base / integralT(scale); const invPowerScale = (scale, base = 1) => isNumber(scale) ? scale : integralT(scale) / base; const powerSumSquared = (window) => isComplex(window) ? integralFSquared(window) / window[0].length : integralTSquared(window); const powerMeanSquared = (window) => powerSumSquared(window) / (isComplex(window) ? window[0].length : window.length); const powerTimeIntegral = (window, fs) => (isComplex(window) ? integralFSquared(window) : integralTSquared(window)) / fs; export { integralF, integralFSquared, integralT, integralTSquared, invPowerScale, powerMeanSquared, powerScale, powerSumSquared, powerTimeIntegral };