ΣSigmaStudio Ask AI Русский Log in

Using an NLMS filter for background tones/beeps

SigmaDSP & SigmaStudio Harjo Dec 7, 2021 00:00 6 replies Original on forum ↗
Subscribe
Harjo Question
Dec 7, 2021 00:00

Hi,

We have an application where we have a beep/tone in our audio input that we would like to remove (using ADAU1452).

Currently we are a notch filter to do this with good results. Unfortunately we ran into 2 issues during field tests:

The actual frequency of our tone (600 Hz) varies a bit per location (+/- 15 Hz).

We have harmonics

We can widen the notch filters a bit to accommodate for the offset of the ‘base frequency’, but we would have to double that for every harmonic, effectively harming our audio response a lot > 4 kHz.

Looking at some of the theory and use cases described on this forum I would imagine that we could use the NMLS filter in this situation to get better results. However since we only have 1 signal I’m not sure how to do this. Does anybody have a suggestion for this, or would there be even better filter to accomplish this?

On a sidenote: Sometimes the tones are intermittent (beep-beep-beep), so we should gate the filter learning for that. But we can leave that aside for now.

Audio Signal Processors

adau1452

SigmaDSP Audio Processors

NMLS

SigmaDSP

DaveThib Reply
Dec 7, 2021 00:00

Hello Harjo,

I am working on a solution. I do have a quick question. Can your application tolerate a delay of possibly a few hundred milliseconds?

Also, do you have an audio file to use as an example to try to filter?

Thanks,

Dave T

Harjo Reply
Dec 8, 2021 00:00

Hi Dave,

Thanks.

It depends on whether you mean delay in the actual audio, or delay in enabling the filtering. The second one isn't neccesarily a problem, the first one is.

I'll see If i can arrange a testfile for you.

DaveThib Reply
Dec 8, 2021 00:00

Hello Harjo,

I mean a delay in the audio. Sometimes it is handy to add some delay to be able to allow for sensing of something ahead of the audio that you would hear. To do that you delay the audio so the processing can act on a real time event.

Dave T

Harjo Reply
Dec 9, 2021 00:00

Hi Dave. I understand. However in this case more delay is a bigger problem than a slow response. Since the noise/beep frequencies are not changing in real-time it would be fine if we slowly settle our filters.

I had to 'create' a testfile for you since we're not allowed to use actual recordings. The voice is artificial, be beep is a real recording.

Maybe some additional info that might help understand the first point: The application is a push-to-talk communication system. So our filtering needs to 'work' when somebody is pushing PTT to talk into the system. But we will continously process audio comming form the microphone so most of the times the filters would have settled way before somebody starts using the system.

Play this audio clip

bitmechanic Reply
Jan 26, 2022 00:00

Hello,

See attached project, it uses an NLMS filter with a delay to remove tones from a broadband signal. This is the method used by Adaptive Line Enhancers, it might do what you want.

In the case where signal is narrowband and noise is broadband, or signal is broadband and noise is narrowband, a delayed version of the input signal can be used as the reference input. This is because a broadband signal is not correlated to previous sample values unlike a narrowband signal. We only need to insure that the delay introduced should be greater than the decorrelation-time of the broadband signal and less than the decorrelation-time of the narrowband signal:

&tau;d (BB) < delay < &tau;d (NB)

EZoneToneRemove.dspproj

Harjo Reply
Jan 31, 2022 00:00

Thanks bitmechanic! I will give it a try in the real life system asap. I'll keep you posted!

Just wondering: Since we (approximatly) know the frequencies of our noise, could we improve this setup by filtering off the signal in our noise path (with some relatively wide notch filters as a pass-through for the tones)?