Skip to content
Snippets Groups Projects
Signal.py 651 B
Newer Older
from GEODE.Functional import curry
import math

@curry
def orientedIntersection(l, sNew, sOld):
    left = max(sNew*l[0], sOld*l[1])
    right = min((sNew+1)*l[0], (sOld+1)*l[1])
    return max(right-left, 0)

@curry
def resample(newSize, distribution):
    oldSize = len(distribution)
    lcm = math.lcm(newSize, oldSize)
    intersection = orientedIntersection((lcm/newSize, lcm/oldSize))
    ratio = oldSize / newSize
    for i in range(newSize):
        yield oldSize/lcm*sum([distribution[j]*intersection(i, j)
                               for j in range(math.floor(i*ratio),
                                              round((i+1)*ratio))])