De-emphasise phase-vocoder prediction when amplitude changes up or down
This commit is contained in:
parent
7ca6c8d13c
commit
fddcdb628f
@ -360,6 +360,7 @@ private:
|
|||||||
Sample fracIndex = mapPoint.inputBin - std::floor(mapPoint.inputBin);
|
Sample fracIndex = mapPoint.inputBin - std::floor(mapPoint.inputBin);
|
||||||
|
|
||||||
Prediction &prediction = predictions[b];
|
Prediction &prediction = predictions[b];
|
||||||
|
Sample prevEnergy = prediction.energy;
|
||||||
prediction.energy = getFractional<&Band::inputEnergy>(c, lowIndex, fracIndex);
|
prediction.energy = getFractional<&Band::inputEnergy>(c, lowIndex, fracIndex);
|
||||||
prediction.energy *= std::max<Sample>(0, mapPoint.freqGrad); // scale the energy according to local stretch factor
|
prediction.energy *= std::max<Sample>(0, mapPoint.freqGrad); // scale the energy according to local stretch factor
|
||||||
prediction.input = getFractional<&Band::input>(c, lowIndex, fracIndex);
|
prediction.input = getFractional<&Band::input>(c, lowIndex, fracIndex);
|
||||||
@ -368,7 +369,7 @@ private:
|
|||||||
Complex prevInput = getFractional<&Band::prevInput>(c, lowIndex, fracIndex);
|
Complex prevInput = getFractional<&Band::prevInput>(c, lowIndex, fracIndex);
|
||||||
Complex freqTwist = signalsmith::perf::mul<true>(prediction.input, prevInput);
|
Complex freqTwist = signalsmith::perf::mul<true>(prediction.input, prevInput);
|
||||||
Complex phase = signalsmith::perf::mul(outputBin.prevOutput, freqTwist);
|
Complex phase = signalsmith::perf::mul(outputBin.prevOutput, freqTwist);
|
||||||
outputBin.output = phase/(prediction.energy + noiseFloor);
|
outputBin.output = phase/(std::max(prevEnergy, prediction.energy) + noiseFloor);
|
||||||
|
|
||||||
if (b > 0) {
|
if (b > 0) {
|
||||||
Complex downInput = getFractional<&Band::input>(c, mapPoint.inputBin - timeFactor);
|
Complex downInput = getFractional<&Band::input>(c, mapPoint.inputBin - timeFactor);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user