Re: Noise removal "tinklebells" and how to fix them
Posted: Wed Jul 30, 2014 10:39 pm
I think you just answered a different question from what I asked.
When doing noise removal, not accumulating the profile, I believe it is hazardous to take just one window and compare it to the profile. Look closely at the spectrogram of sound with rectangular window of 2048. Many bands appear to fluctuate rapidly in magnitude from sample to sample, even within a note or a vowel. Now remember that the algorithm only sees every 1024th value in any one of those bands. If you get an unlucky choice, one of these might dip below the noise threshold for that band, causing the naive algorithm to drop out that band for a whole window of 2048.
But take just one other window, and take maximum, and you reduce the probability of these artifacts. The algorithm becomes "insensitive" where it should be. But then it also becomes insensitive where it shouldn't, in the pauses, and so we need other compensations like sensitivity.
Now it needn't be maximum of two, it might be average of two, or midmost of three... those others might work to prevent artifacts in foreground sound, but something must be done that considers one or more neighboring windows, not just considering the center window alone.
Minimum of two -- what existed before -- makes the algorithm TOO "sensitive" and perhaps spreads the artifact over TWO windows of foreground sound (overlapping for 3/2 times 2048 samples).
If the comments in the Wiki about the noise removal algorithm were by Dominic -- and part of it replicates his comments from code -- then it seems he was anxious about the tinkles in the quiet parts, which is well, but his solution introduced these other artifacts in the foreground.
When doing noise removal, not accumulating the profile, I believe it is hazardous to take just one window and compare it to the profile. Look closely at the spectrogram of sound with rectangular window of 2048. Many bands appear to fluctuate rapidly in magnitude from sample to sample, even within a note or a vowel. Now remember that the algorithm only sees every 1024th value in any one of those bands. If you get an unlucky choice, one of these might dip below the noise threshold for that band, causing the naive algorithm to drop out that band for a whole window of 2048.
But take just one other window, and take maximum, and you reduce the probability of these artifacts. The algorithm becomes "insensitive" where it should be. But then it also becomes insensitive where it shouldn't, in the pauses, and so we need other compensations like sensitivity.
Now it needn't be maximum of two, it might be average of two, or midmost of three... those others might work to prevent artifacts in foreground sound, but something must be done that considers one or more neighboring windows, not just considering the center window alone.
Minimum of two -- what existed before -- makes the algorithm TOO "sensitive" and perhaps spreads the artifact over TWO windows of foreground sound (overlapping for 3/2 times 2048 samples).
If the comments in the Wiki about the noise removal algorithm were by Dominic -- and part of it replicates his comments from code -- then it seems he was anxious about the tinkles in the quiet parts, which is well, but his solution introduced these other artifacts in the foreground.