From 9e459c0cce98b7a61e531e6ee910b14d034ea77a Mon Sep 17 00:00:00 2001 From: boblark Date: Tue, 15 Dec 2020 20:31:22 -0800 Subject: [PATCH] AddWDRC2 object and example --- AudioEffectWDRC2_F32.h | 272 +++++++++++++++++++++++++ examples/testWDRC2/WDRC2Transients.gif | Bin 0 -> 42732 bytes examples/testWDRC2/testWDRC2.ino | 203 ++++++++++++++++++ 3 files changed, 475 insertions(+) create mode 100644 AudioEffectWDRC2_F32.h create mode 100644 examples/testWDRC2/WDRC2Transients.gif create mode 100644 examples/testWDRC2/testWDRC2.ino diff --git a/AudioEffectWDRC2_F32.h b/AudioEffectWDRC2_F32.h new file mode 100644 index 0000000..4e1ae08 --- /dev/null +++ b/AudioEffectWDRC2_F32.h @@ -0,0 +1,272 @@ +/* + * AudioEffectCompWDR2_F32: Wide Dynamic Rnage Compressor #2 + * + * Bob Larkin W7PUA 11 December 2020 *********** UNDER DEVELOPMENT SUBJECT TO CHANGE!!!! + * This is an attempt to simplify and further comment the Chip Audette WDRC compressor. + * Derived from: Chip Audette (OpenAudio) Feb 2017 + * Which was derived From: WDRC_circuit from CHAPRO from BTNRC: https://github.com/BTNRH/chapro + * As of Feb 2017, CHAPRO license is listed as "Creative Commons?" + * + * MIT License. Use at your own risk. + */ +/* + * WDRC2 Wide dynamic range compressor #2. Amplifies input signals by a fixed amoount + * when the input is low. Above a first knee, the gain is reduce progressively more as + * the input gets greater. On a dB out vs. dB in curve, this shows as a chnge in the + * original 1:1 slope to a lesser slope of 1:cr1 where cr1 is the first compression ratio. + * Finally there is a second knee where the gain is reduced at an even greater rate. In the + * extreme this becomes a hard limiter, but it can continue to increase slightly at a dB + * rate of 1:cr2, with cr2 the second compression ratio. + + Vout dB + | + | + 0.0| **********# + | ********** + | @********** 1:cr2 + | **** + | *** + | *** + | *** 1:cr1 + | *** + | @*** + | * + | * + | * + | * Vout = Vin + g0 (all in dB) + | * 1:1 + | * + | * * Vout vs. Vin in dB * + |* Knees (breakpoints) are shown with '@' + * Zero, zero intersection shown with '#' + *| Slopes are ratio of: output:input (in dB) + * | + * |________|___________________|____________________________|_________ Vin dB + k1 k2 0.0 + + * The graph shows the changes in gain on a log or dB scale. A 1:1 slope represents + * a constant gain with level. When the slope is less, say cr1:1 where cr1 might be 3, + * the voltage gain is decreasing as the input level increases. + * + * The model here is, I believe, the same as the two references above (Audette and CHAPRO). + * The variable names have been changed to avoid confusion with those of audiologists and + * to be easier to follow for non-audiologists. Here goes: + * gain0DB Gain, in dB of the compressor for low level inputs (g0 on graph) [38 dB] + * knee1dB First knee on the gain curve where the dB gain slope decreases(k1) [-50 dB] + * cr1 Compression ratio on dB curve between knee1dB and knee2dB [3.0] + * knee2dB Second knee on the gain curve where the dB gain slope decreases further (k2) [-20 dB] + * cr2 Compression ratio on dB curve above knee2dB [10.0] + * + * The presets for the above quantities, shown in square brackest, are qite aggressive, + * with a lot of compression (up to 38 dB). This is for demonstration, and each + * situation will have different settings. For the presets, the following data + * was measured, essentiallly as predicted: + * vIn (rel full scale)=0.001 vInDB=-60.05 vOutDB-vInDB=38.00 + * vIn (rel full scale)=0.003 vInDB=-50.47 vOutDB-vInDB=38.00 + * vIn (rel full scale)=0.01 vInDB=-40.00 vOutDB-vInDB=31.38 + * vIn (rel full scale)=0.03 vInDB=-30.45 vOutDB-vInDB=24.97 + * vIn (rel full scale)=0.1 vInDB=-19.98 vOutDB-vInDB=19.98 + * vIn (rel full scale)=0.3 vInDB=-10.45 vOutDB-vInDB= 9.40 + * vIn (rel full scale)=1.0 vInDB= 0.01 vOutDB-vInDB=-0.01 + * + * vInDB refers to the time averaged envelope voltage. + * Needing a zero reference, this has been chosen as full ADC range output. This is ±1.0 + * peak or 0.707 RMS in F32 terminology. If this is fixed, the low-level gain will also be + * determined. This is calculated in the constructor. + * + * The curve is for gainOffsetDB = 0.0. This parameter raises and lowers the entire gain + * curve by this many dB. This is equivalent to a post-compressor gain (or loss). + * + * Note: This is all done in conventional 10 based dB. This ends up with scaling in + * several places that could be eliminated by using 2B instead of dB, i.e., + * use log2() and 2^(). This would seem to be faster, but less "readable." + * + * *********** UNDER DEVELOPMENT SUBJECT TO CHANGE!!!! ********* + */ + +#ifndef _AudioEffectCompWDRC2_F32 +#define _AudioEffectCompWDRC2_F32 + +#include +#include + +class AudioEffectWDRC2_F32 : public AudioStream_F32 +{ +//GUI: inputs:1, outputs:1 //this line used for automatic generation of GUI node +//GUI: shortName: CompressWDRC2 + public: + AudioEffectWDRC2_F32(void): AudioStream_F32(1,inputQueueArray) { + setAttackReleaseSec(0.005f, 0.100f); + setLowLevelGain(); // Not an independent variable, set by knees, cr's and 0,0 intersection + // setSampleRate_Hz(AUDIO_SAMPLE_RATE); + } + + //AudioEffectCompWDRC_F32(AudioSettings_F32 settings): AudioStream_F32(1,inputQueueArray) { + // setSampleRate_Hz(settings.sample_rate_Hz); + //} + + // Here is the method called automatically by the audio library + void update(void) { + float vAbs, vPeak; + float vInDB, vOutDB; + float targetGain; + + // Receive the input audio data + audio_block_f32_t *block = AudioStream_F32::receiveWritable_f32(); + if (!block) return; + // Allocate memory for the output + audio_block_f32_t *out_block = AudioStream_F32::allocate_f32(); + if (!out_block) + { + release(block); + return; + } + + // Find the smoothed envelope, target gain and compressed output + vPeak = vPeakSave; + for (int k=0; klength; k++) { + vAbs = (block->data[k] >= 0.0f) ? block->data[k] : -block->data[k]; + if (vAbs >= vPeak) { // Attack (rising level) + vPeak = alpha * vPeak + (oneMinusAlpha) * vAbs; + } else { // Release (decay for falling level) + vPeak = beta * vPeak; + } + // Convert to dB + // At all levels and quite frequency flat, this under estimates by 1.05 dB + vInDB = v2DB_Approx(vPeak) + 1.05f; + // Convert to desired Vout_DB, this is the compression curve + if(vInDB<=knee1DB) + vOutDB = vInDB + gain0DB; // No compression + else if(vInDBdata[k] = targetGain * delayData[(k + in_index) & delayBufferMask]; + + if(printIO) { + Serial.print(block->data[k],6); + Serial.print("," ); + Serial.print(delayData[(k + in_index) & delayBufferMask],6); + Serial.print("," ); + Serial.println(targetGain); + } + + // Put the new data into the delay line, delaySize positions ahead. + // If delaySize==256, this will be the same location as we just got data from. + delayData[(k + in_index + delaySize) & delayBufferMask] = block->data[k]; + } + vPeakSave = vPeak; // save last vPeak for next time + sampleInputDB = vInDB; // Last values for get...() functions + sampleGainDB = vOutDB - vInDB; + // transmit the block and release memory + AudioStream_F32::release(block); + AudioStream_F32::transmit(out_block); // send the FIR output + AudioStream_F32::release(out_block); + // Update pointer in_index to delay line for next 128 update + in_index = (in_index + block->length) & delayBufferMask; + } + + // gain0DB is the gain at low levels, below compression. Not an independent variable, + // so this should becalled after any change is made to knees and compression ratios. + void setLowLevelGain(void) + { + gain0DB = knee2DB*(1.0f - cr2)/cr2 + (knee2DB - knee1DB)*(cr1 - 1.0f)/cr1; // Low-level gain + } + + void setOutputGainOffsetDB(float _gOff) { gainOffsetDB = _gOff; } + void setKnee1LowDB(float _k1) { knee1DB = _k1; } + void setCompressionRatioMiddleDB(float _cr1) { cr1 = _cr1; } + void setKnee2HighDB(float _k2) { knee2DB = _k2; } + void setCompressionRatioHighDB(float _cr2) { cr2 = _cr2; } + // A delay of 256 samples is 256/44100 = 0.0058 sec = 5.8 mSec + void setDelayBufferSize(int16_t _delaySize) { // Any power of 2, i.e., 256, 128, 64, etc. + delaySize = _delaySize; + delayBufferMask = _delaySize - 1; + in_index = 0; + } + void printOn(bool _printIO) { printIO = _printIO; } // Diagnostics ONLY. Not for general INO + + float getLowLevelGainDB(void) { return gain0DB; } + float getCurrentInputDB(void) { return sampleInputDB; } + float getCurrentGainDB(void) { return sampleGainDB; } + + //convert time constants from seconds to unitless parameters, from CHAPRO, agc_prepare.c + void setAttackReleaseSec(const float atk_sec, const float rel_sec) { + // convert ANSI attack & release times to filter time constants + float ansi_atk = atk_sec * sample_rate_Hz / 2.425f; + float ansi_rel = rel_sec * sample_rate_Hz / 1.782f; + alpha = (float) (ansi_atk / (1.0f + ansi_atk)); + oneMinusAlpha = 1.0f - alpha; + beta = (float) (ansi_rel / (1.0f + ansi_rel)); + } + + // Accelerate the powf(10.0,x) function (from Chip's single slope compressor) + float pow10f(float x) { + //return powf(10.0f,x) //standard, but slower + return expf(2.30258509f*x); //faster: exp(log(10.0f)*x) + } + + /* See https://github.com/Tympan/Tympan_Library/blob/master/src/AudioCalcGainWDRC_F32.h + * Dr Paul Beckmann + * https://community.arm.com/tools/f/discussions/4292/cmsis-dsp-new-functionality-proposal/22621#22621 + * Fast approximation to the log2() function. It uses a two step + * process. First, it decomposes the floating-point number into + * a fractional component F and an exponent E. The fraction component + * is used in a polynomial approximation and then the exponent added + * to the result. A 3rd order polynomial is used and the result + * when computing db20() is accurate to 7.984884e-003 dB. Y is log2(X) + */ + float v2DB_Approx(float volts) { + float Y, F; + int E; + // This is the approximation to log2() + F = frexpf(volts, &E); // first separate power of 2; + // Y = C[0]*F*F*F + C[1]*F*F + C[2]*F + C[3] + E; + Y = 1.23149591; //C[0] + Y *= F; + Y += -4.11852516f; //C[1] + Y *= F; + Y += 6.02197014f; //C[2] + Y *= F; + Y += -3.13396450f; //C[3] + Y += E; + // Convert to dB = 20 Log10(volts) + return 6.020599f * Y; // (20.0f/log2(10.0))*Y; + } + + private: + audio_block_f32_t *inputQueueArray[1]; + + float delayData[256]; // The circular delay line for the signal + uint16_t in_index = 0; // Pointer to next block update entry + // And a mask to make the circular buffer limit to a power of 2 + uint16_t delayBufferMask = 0X00FF; + uint16_t delaySize = 256; + + float sample_rate_Hz = 44100; + float attackSec = 0.005f; // Q: Can this be reduced with the delay line added to the signal path?? + float releaseSec = 0.100f; + // This alpha, beta for 5 ms attack, 100ms release, about 0.07 dB max ripple at 1000 Hz + float alpha = 0.98912216f; + float oneMinusAlpha = 0.01087784f; + float beta = 0.9995961f; + // Presets here should be studied/experimented with for each application + float gain0DB = 38.0f; // Gain, in dB for low level inputs + float gainOffsetDB = 0.0f; // Raise/lower entire gain curve by this amount (post gain) + float knee1DB = -50.0f; // First knee on the gain curve + float cr1 = 3.0f; // Compression ratio on dB curve between knee1dB and knee2dB + float knee2DB = -20.0f; // Second knee on the gain curve + float cr2 = 10.0f; // Compression ratio on dB curve above knee2dB + float vPeakSave = 0.0f; + bool printIO = false; // Diagnostics Only + float sampleInputDB, sampleGainDB; +}; +#endif diff --git a/examples/testWDRC2/WDRC2Transients.gif b/examples/testWDRC2/WDRC2Transients.gif new file mode 100644 index 0000000000000000000000000000000000000000..faed5222b2e792dd5c4d7b7c9a3e5f5bbb23a0dd GIT binary patch literal 42732 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 z