You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
- #pragma once
-
- /**
- * Outputs a stair-step decimation.
- * So maybe it's the integral or a decimation?
- */
- class Decimator
- {
- public:
-
- /**
- * ret the next sample from the decimator.
- * if (needsInput), then next call must be acceptData.
- */
- float clock(bool& needsInput)
- {
- --phaseAccumulator; // one more sample
- if (phaseAccumulator <= 0) {
- needsInput = true;
- phaseAccumulator += rate;
- } else {
- needsInput = false;
- }
- return memory;
- }
-
- void acceptData(float data)
- {
- memory = data;
- }
-
- /**
- * Rate must be > 1.
- * Fractional rates are fine.
- */
- void setDecimationRate(float r)
- {
- rate = r;
- phaseAccumulator = rate;
- }
-
- private:
- float rate=0;
- float memory=0;
- float phaseAccumulator = 0;
- };
|