Extract intervalToIntensities
This commit is contained in:
parent
046bce3f26
commit
5735f07a25
|
|
@ -1,19 +1,9 @@
|
||||||
import { chain, pipe, sum } from "ramda";
|
import { pipe, sum } from "ramda";
|
||||||
import { Interval } from "./ast";
|
import { Interval } from "./ast";
|
||||||
|
import { intervalsToIntensities } from "./intervalsToIntensities";
|
||||||
// Converts interval to array of intensity values for each second
|
|
||||||
const intervalToIntensities = ({ duration, intensity }: Interval): number[] => {
|
|
||||||
const seconds = [];
|
|
||||||
const { from, to } = intensity;
|
|
||||||
for (let i = 0; i < duration; i++) {
|
|
||||||
// Intensity in a single second
|
|
||||||
seconds.push(from + (to - from) * (i / duration));
|
|
||||||
}
|
|
||||||
return seconds;
|
|
||||||
};
|
|
||||||
|
|
||||||
const average = (arr: number[]) => sum(arr) / arr.length;
|
const average = (arr: number[]) => sum(arr) / arr.length;
|
||||||
|
|
||||||
export const averageIntensity = (intervals: Interval[]): number => {
|
export const averageIntensity = (intervals: Interval[]): number => {
|
||||||
return pipe(chain(intervalToIntensities), average)(intervals);
|
return pipe(intervalsToIntensities, average)(intervals);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
import { chain } from "ramda";
|
||||||
|
import { Interval } from "./ast";
|
||||||
|
|
||||||
|
// Converts interval to array of intensity values for each second
|
||||||
|
const intervalToIntensities = ({ duration, intensity }: Interval): number[] => {
|
||||||
|
const seconds = [];
|
||||||
|
const { from, to } = intensity;
|
||||||
|
for (let i = 0; i < duration; i++) {
|
||||||
|
// Intensity in a single second
|
||||||
|
seconds.push(from + (to - from) * (i / duration));
|
||||||
|
}
|
||||||
|
return seconds;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const intervalsToIntensities = chain(intervalToIntensities);
|
||||||
|
|
@ -1,16 +1,6 @@
|
||||||
import { chain, pipe, sum } from "ramda";
|
import { pipe, sum } from "ramda";
|
||||||
import { Interval } from "./ast";
|
import { Interval } from "./ast";
|
||||||
|
import { intervalsToIntensities } from "./intervalsToIntensities";
|
||||||
// Converts interval to array of intensity values for each second
|
|
||||||
const intervalToIntensities = ({ duration, intensity }: Interval): number[] => {
|
|
||||||
const seconds = [];
|
|
||||||
const { from, to } = intensity;
|
|
||||||
for (let i = 0; i < duration; i++) {
|
|
||||||
// Intensity in a single second
|
|
||||||
seconds.push(from + (to - from) * (i / duration));
|
|
||||||
}
|
|
||||||
return seconds;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Starting at the beginning of the data, calculate 30-second rolling average
|
// Starting at the beginning of the data, calculate 30-second rolling average
|
||||||
const windowSize = 30;
|
const windowSize = 30;
|
||||||
|
|
@ -37,7 +27,7 @@ const average = (arr: number[]) => sum(arr) / arr.length;
|
||||||
|
|
||||||
export const normalizedIntensity = (intervals: Interval[]): number => {
|
export const normalizedIntensity = (intervals: Interval[]): number => {
|
||||||
return pipe(
|
return pipe(
|
||||||
chain(intervalToIntensities),
|
intervalsToIntensities,
|
||||||
rollingAverages,
|
rollingAverages,
|
||||||
(averages) => averages.map(fourthPower),
|
(averages) => averages.map(fourthPower),
|
||||||
average,
|
average,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue