Type : 1-pole/1-zero DC filter
References : Posted by andy[DOT]rossol[AT]bluewin[DOT]ch
This is based on code found in the document:
"Introduction to Digital Filters (DRAFT)"
Julius O. Smith III (firstname.lastname@example.org)
Some audio algorithms (asymmetric waveshaping, cascaded filters, ...) can produce DC offset. This offset can accumulate and reduce the signal/noise ratio.
So, how to fix it? The example code from Julius O. Smith's document is:
y(n) = x(n) - x(n-1) + R * y(n-1)
// "R" between 0.9 .. 1
// n=current (n-1)=previous in/out value
"R" depends on sampling rate and the low frequency point. Do not set "R" to a fixed value (e.g. 0.99) if you don't know the sample rate. Instead set R to:
(-3dB @ 40Hz): R = 1-(250/samplerate)
(-3dB @ 30Hz): R = 1-(190/samplerate)
(-3dB @ 20Hz): R = 1-(126/samplerate)
from : andy[DOT]rossol[AT]bluewin[DOT]ch
comment : I just received a mail from a musicdsp reader:
'How to calculate "R" for a given (-3dB) low frequency point?'
R = 1 - (pi*2 * frequency /samplerate)
from : rbj[AT]surfglobal[DOT]net
comment : particularly if fixed-point arithmetic is used, this simple high-pass filter can create it's own DC offset because of limit-cycles. to cure that look at
this trick uses the concept of "noise-shaping" to prevent DC in any limit-cycles.