@thi.ng/dsp
Version:
Composable signal generators, oscillators, filters, FFT, spectrum, windowing & related DSP utils
47 lines (46 loc) • 1.41 kB
JavaScript
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
};