I have looked at your implementation of the perlin distribution. Except for for the conditional for creating a LowPass mask.
I feel kind of stupid using 0 and 1 constants when creating a mask.
The way to implement such a mask is:
LowPass(variable, Upper value) == HardStep(Upper value, variable)
HighPass(variable, Low value) == HardStep(variable, Low value)
BandPass(variable, Low value, High value) == product of above.