Extract intervalToIntensities

This commit is contained in:
Rene Saarsoo 2020-09-20 15:23:31 +03:00
parent 046bce3f26
commit 5735f07a25
3 changed files with 21 additions and 26 deletions

View File

@ -1,19 +1,9 @@
import { chain, pipe, sum } from "ramda";
import { pipe, sum } 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;
};
import { intervalsToIntensities } from "./intervalsToIntensities";
const average = (arr: number[]) => sum(arr) / arr.length;
export const averageIntensity = (intervals: Interval[]): number => {
return pipe(chain(intervalToIntensities), average)(intervals);
return pipe(intervalsToIntensities, average)(intervals);
};

View File

@ -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);

View File

@ -1,16 +1,6 @@
import { chain, pipe, sum } from "ramda";
import { pipe, sum } 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;
};
import { intervalsToIntensities } from "./intervalsToIntensities";
// Starting at the beginning of the data, calculate 30-second rolling average
const windowSize = 30;
@ -37,7 +27,7 @@ const average = (arr: number[]) => sum(arr) / arr.length;
export const normalizedIntensity = (intervals: Interval[]): number => {
return pipe(
chain(intervalToIntensities),
intervalsToIntensities,
rollingAverages,
(averages) => averages.map(fourthPower),
average,