[music-dsp] Re: Declipping

James Chandler Jr jchandjr at bellsouth.net
Mon Feb 21 12:34:05 EST 2005


Some dumb ideas--

Given a third-generation cassette copy of a clipped live recording, which 
someone had already processed with EQ and Compression, the distortion would be 
easy to identify by ear, but perhaps nearly impossible to fix with a de-clipper 
alogorithm?

However, even a less-ambitious de-clipper which only aspires to repair D-A 
overload hard clips on a 'fresh' disk file, could still be useful. If you just 
recorded that perfect sax take, but unfortunately there were hard-clip overloads 
on a few notes...

For a less-ambitious de-clipper which doesn't pretend to fix all cases, perhaps 
it is safe to make some assumptions?

If this is a nonrealtime disk-based declipper tool, perhaps we can assume the 
user wouldn't have invoked the plugin unless there is high probability of 
clipping in the file?

Given this assumption, we could pre-scan the entire file for max positive and 
negative values. Even if the track had been gain-scaled after the original 
recording, we might safely infer that the audio max positive and max negative 
values which are found in the file, are the hard-clip rails?

If the track has been otherwise processed (other than gain scaling), this simple 
scheme probably wouldn't be reliable.

Anyway, one could identify likely hard-clips by looking for samples at the 
positive and negative 'clip rails'.

If using float samples for processing, we don't have to worry about a max 
amplitude until we convert back to a possibly integer file format. After the 
clips have been repaired, we could 'normalize' down the entire repaired file so 
that the new max values will comfortably fit in the output sample format.

To 'fix' a single sample that hits the rail, perhaps set that sample to zero, 
and then center a sinc FIR on the zero sample. Use a kernel with steep 
attenuation right below nyquist? Shouldn't the FIR pretty accurately guess the 
value of that single missing sample? Each single sample clip, could be repaired 
with a single FIR calculation, to recover the value of that missing sample which 
would 'fit within nyquist'?

Similarly, if there are two consecutive samples 'on the rail', use a sinc FIR 
set for quarter-band, to guestimate the two consecutive missing samples?

With clips of progressively longer lengths, more high frequency info would be 
lost by this process, but perhaps whatever info that survives the FIR at least 
would't sound as obnoxious as hard-clipping?

This approach might work fairly well for sparse short-duration clipping? It 
might not work very well for sustained sections of clipping, a long chain of 
heavy-clipped wave cycles.

Perhaps on long clips, rather than setting clips to zero before filtering, one 
might first use a Hermite interpolator to guess the missing samples? Then FIR to 
smooth out whatever 'errors' are in the Hermite interpolation? Maybe something 
like that would sound better on a long chain of heavy-clipped wave cycles?

Perhaps multiple passes would help? First scan the file and fix any 
single-sample clips. Then scan the file and fix any two-sample clips, etc? Or 
perhaps it would be better to first attempt fixing the longer clips, and work 
down to the single-clip instances?

JCJR 




More information about the music-dsp mailing list