ADAU1467 as de-click and denoise/dnr filter for audio
Hi there,
I'm working on a project where I need to implement a real-time de-noise filter with externally controlled strength, and a de-click/de-pop filter with externally controlled strength.
Up to now I've been using the TI DSP TAS3204 - however it's currently not recommended for new designs, and the engineering support team for that chip no longer exists. BUT I have access to writing my own instruction code and modules, so I can potentially do what I want with it. But, it's old, unsupported and, while powerful, not ideal.
Am I realistically going to be able to implement what I want on the ADAU1467 or any other DSP using Sigma Studio? I've done some tests doing de-noise with a slew-indexed-filter and an externally controlled blend, to a certain amount of success, but the de-click in mind I'd likely want to either have a slight delay and jump to a previous bit of audio as replacement (for a few samples), however it seems doing this with a switch will cause a click or the slew rate will make it impossible to achieve in any imperceptible way at that fine level of detail - or interpolate the data across the click-range (as determined by a sensitivity selection).
Any and all thoughts welcomed on this please.
Audio Signal Processors
declick
adau1467
denoise
SigmaDSP Audio Processors
dnr
Show More
Hello David,
Since you're into coding algorithms, SigmaStudio's pre-coded modules may feel limiting. Yet it's a fine place to start with SigmaDSPs. It won't take long for you to discern whether SigmaStudio programming proves sufficient or else you need to look at Cross Core Embedded Studio. If you haven't already seen the threads linked below, you may find some ideas for your application:
Multiband DNR -- Fill Up a ADAU1452 and Make It Do Something
Vinyl Click Remover -- ADAU1701 RIAA
Bert regards,
Bob
Ahoy,
Thanks Bob. I'm just starting to see your influence peppered around and all over these forums - I suspect I will find what I'm looking for within. I'll also give CCES a look, but if I can get a good enough result with SS, then I will. Time, as always, is the enemy. Well, that and noise. Much obliged. I may have some more questions another time, thanks for taking the time to answer this one.
~David
Hello David,
Yes, Bob is "The Man" around the forum for sure!
I had drawn up a program for removing gunshots from headphones. It simply works by quickly lowering the gain based on a threshold. I think this might work for removing clicks and pops? It is worth a try and you may have to make some modifications. Also, this program is written for the ADAU1761 which is a Sigma200 core. A quick glance at the program and I think you will not need to change anything due to the number format difference. You will have to "copy" this manually to enter it into your project for the ADAU1467.
Dave T
ADAU1761 Gunshot Suppression.zip
Ahoy there,
I have manually implemented the declick project that Bob linked to, using the blocks for the 1467, I think the number formats are different, 8.24 instead of 5.23, and 32.0 instead of 28.0, but all that aside I tried it out, and it certainly detected some clicks but a lot of the low threshold static clicks didn't really have an effect. and the replaced audio via the mixer wasn't really fast enough to remove the click sound so much as dull it a bit - not significantly though.. I shall continue to experiment - At any rate, it's a starting point.
Weirdly enough I had 144 errors in the compiler related to unexpected tokens on a few of the blocks, but after I deleted and re-placed them the errors went away, so I'll assume it was something to do with how the gui sometimes places multiple blocks with a single click.
Thanks for the gunshot suppression - I'll give it a look and see if it's useful to me.
Hello David,
You had me thinking that if the clicks are within the level of the desired audio you will hear the clicks and any level based removal system would not detect it since the clicks are lower or equal to the level of the desired audio. Unfortunately our ears/brain is good at hearing clicks within the audio signal. So this begs for a system that also looks at the crest factor of the signal. That is much more difficult to do. I will give it some thought. So I predict my gunshot detection program will have a similar problem. It will only remove high level clicks. See how it works.
Thanks!
Dave T
I was thinking of including an implementation of an average filter to catch the large ones, or perhaps a system that is more sensitive to the actual nature of clicks, the fast rise and fall within a few samples, or some combination of the two. A fast rise and fall compared to the average signal, and adjust strength according to how much you can cope with transient removal.
Also thought about click removal by interpolating instead of delay/replacement, tricker but still doable I think, and also finding a better way to detect clicks than just L-R - not all clicks are out of phase completely, or have equal level in both channels, maybe normalising incoming audio on each channel separately, purely for the detection part of the system would help improve detection.
Definitely going to change the slew rate volume blocks for multipliers in the declick filter though and see what the results are like, the slew volume is just not quick enough, the fastest response seems to be around 6.25ms, and so many clicks are barely 1 or 2.
Cheers
~David A
Also, combined with a multi band noise gate filter might help mitigate some of the click noise as well, especially if it's after the declick stage. I do like experimenting.
Well straight multiplication with strong detection just causes dsp chatter, no real surprise there I suppose, but I found the slew rate vol control works with a short 10 sample delay in the output signal, just enough to quieten it down. I'm finding the vinyl noise simulation isn't really a good example of real-world vinyl noise, so I'm using a recording from a moderately noisy vinyl as my source. Time to dig in.
Please log in to reply.