Forums

ANC with wrong reference signal

Started by AudioPhil July 23, 2008
Hi Guys, 

I work with a ANC for my studies, and I have the following problem:

Algorithm: FxLMS with two weight factors scaling sine and cosine
oscillators in order to synthesize an 'anti-vibration' to eliminate higher
orders of a known reference signal which consists of pulses (like those
that come from a tachometer) in a slightly coloured noise. (You see, this
is an adaptive notch filter, Filter lenght is 1)


The reference oscillation is created from the pulses mentioned above by
calculation a phase increment (from pulse length and 2*pi and the sample
rate) every computation cycle and sending the increment (added tho the sum
of the increments of the proceeding computation cycle)to a sine and a
cosine lookup table. By doing so, I get normal sine and cosine
oscillations.
I MUST use the FxLMS and thus I can' use FFT for (reference and / or
disturbance signal) identification. 

Everything works nearly perfect as long as the reference signal fits to
the disturbance frequency. If the reference signal is wrong by some Hertz,
there's no damping of the vibration I aim at. 

I tried several ways of identifying the frequency difference for
disturbances buried in noise, but to no avail. 
As said, I'm bound to the FxLMS and can't use FFT AND I have to implement
the algorithm with a repeat rate of at least 8 kHz (!).... 

I'm stuck, because everything I came across (for adapting the correct
reference frequency) works fine with damping single-frequency disturbances,
but doesn't work at all with disturbances covered in noise (with nearly
equal magnitude). 

Anyone has a good idea? 
 



You are doing the strange things in the strange way. Why do you expect 
it to work?

VLV



AudioPhil wrote:
> Hi Guys, > > I work with a ANC for my studies, and I have the following problem: > > Algorithm: FxLMS with two weight factors scaling sine and cosine > oscillators in order to synthesize an 'anti-vibration' to eliminate higher > orders of a known reference signal which consists of pulses (like those > that come from a tachometer) in a slightly coloured noise. (You see, this > is an adaptive notch filter, Filter lenght is 1) > > > The reference oscillation is created from the pulses mentioned above by > calculation a phase increment (from pulse length and 2*pi and the sample > rate) every computation cycle and sending the increment (added tho the sum > of the increments of the proceeding computation cycle)to a sine and a > cosine lookup table. By doing so, I get normal sine and cosine > oscillations. > I MUST use the FxLMS and thus I can' use FFT for (reference and / or > disturbance signal) identification. > > Everything works nearly perfect as long as the reference signal fits to > the disturbance frequency. If the reference signal is wrong by some Hertz, > there's no damping of the vibration I aim at. > > I tried several ways of identifying the frequency difference for > disturbances buried in noise, but to no avail. > As said, I'm bound to the FxLMS and can't use FFT AND I have to implement > the algorithm with a repeat rate of at least 8 kHz (!).... > > I'm stuck, because everything I came across (for adapting the correct > reference frequency) works fine with damping single-frequency disturbances, > but doesn't work at all with disturbances covered in noise (with nearly > equal magnitude). > > Anyone has a good idea? > > > >
Vladimir Vassilevsky wrote:
> > You are doing the strange things in the strange way. Why do you expect > it to work?
Strangeist of all is a filter length of one. Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
I admit, everything is strange. 
I get up to 40dB attenuation at the disturbance frequency(s) I want to
eliminate at a repeat rate of 12 kHz. So let's conclude that my 'strange
thing' perfectly works so far.

Anyone has a comment that maybe can help me with my problem?


AudioPhil wrote:
> I admit, everything is strange. > I get up to 40dB attenuation at the disturbance frequency(s) I want to > eliminate at a repeat rate of 12 kHz. So let's conclude that my 'strange > thing' perfectly works so far. > > Anyone has a comment that maybe can help me with my problem?
You need to describe your problem in words the reader understands. I doubt that you mean what I think you said. You get 40 dB attenuation with a one-tap filter? Does the filter discriminate among frequencies? Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
I use an adaptive notch filter, 
the algorithm is the following:


x0(n) = sin(k*omega*n)
x1(n) = cos(k*omega*n)

w0(n) = w0(n-1)-µ(n)*e(n)*x0(n)
w1(n) = w1(n-1)-µ(n)*e(n)*x1(n)

x0p(n) = sin(k*omega*n + delta_p)
x1p(n) = cos(k*omega*n + delta_p)

y(n) = w0(n)*x0p(n) + w1(n)*x1p(n)

µ is the 'step size'
omega is the reference frequency
k is the order of omega I want to attenuate
n is the current timestep of the discrete system.
e is the residual error.
d is the disturbance (broad-band noise)
delta_p is the phaseshift caused by the secondary path of the vibrating
system

where e(n) = d(n) + y(n)

so the adaptive notch filter is tuned by omega and k.
works fine, except when the reference frequency ist wrong, that means
(omega*k) is not exactly the frequency I want to eliminate from the
disturbance. Let's say I want to eliminate a narrow band of the broadband
disturbance d, let it be 1.42kHz. Given the case that omega is 100Hz and k
is 14.2, everything is fine. As soon as k (or omega) differ from these
values, the algorithm attenuates not the frequency I want it to.  

I can't measure d(n), i cannot make a fft of any of the signals, yet I
need to correct the frequency eliminated to the correct value.

I can't alter the algorithm either. 


How to ifentify a discrepancy between desired k*omega and real k*omega?
I already tried tracking w0(n), w1(0) (they start to oscillate in that
case) which works fine for single-frequency disturbances, but not for
broad-band d.


tricky, eh?



 
AudioPhil wrote:
> I use an adaptive notch filter, > the algorithm is the following: > > > x0(n) = sin(k*omega*n) > x1(n) = cos(k*omega*n) > > w0(n) = w0(n-1)-�(n)*e(n)*x0(n) > w1(n) = w1(n-1)-�(n)*e(n)*x1(n) > > x0p(n) = sin(k*omega*n + delta_p) > x1p(n) = cos(k*omega*n + delta_p) > > y(n) = w0(n)*x0p(n) + w1(n)*x1p(n) > > � is the 'step size' > omega is the reference frequency > k is the order of omega I want to attenuate > n is the current timestep of the discrete system. > e is the residual error. > d is the disturbance (broad-band noise) > delta_p is the phaseshift caused by the secondary path of the vibrating > system > > where e(n) = d(n) + y(n) > > so the adaptive notch filter is tuned by omega and k. > works fine, except when the reference frequency ist wrong, that means > (omega*k) is not exactly the frequency I want to eliminate from the > disturbance. Let's say I want to eliminate a narrow band of the broadband > disturbance d, let it be 1.42kHz. Given the case that omega is 100Hz and k > is 14.2, everything is fine. As soon as k (or omega) differ from these > values, the algorithm attenuates not the frequency I want it to. > > I can't measure d(n), i cannot make a fft of any of the signals, yet I > need to correct the frequency eliminated to the correct value. > > I can't alter the algorithm either.
Once, I almost lost my job at RCA Labs. The man I worked for had designed an automatic aligner for TV yokes (purity, convergence, and all that) that almost worked. (It had almost worked for the better part of two years.) His group was absorbed into the Labs organization and he became my boss. It became my job to complete the system. There were two problems: whenever I proposed a change, he thought it was "too radical"; whenever I showed why a particular feature couldn't work, I was "too negative." I asked to be given another assignment, so he fired me. *His* boss unfired me. Two weeks later, he was gone. Who told you that you can't alter the algorithm despite its unsuitability?
> How to ifentify a discrepancy between desired k*omega and real k*omega? > I already tried tracking w0(n), w1(0) (they start to oscillate in that > case) which works fine for single-frequency disturbances, but not for > broad-band d. > > > tricky, eh?
Yes. Maybe not possible. Twice I was told that a goal was not possible and reached it anyway. One of those times led to an Outstanding Achievement award. Keep trying. Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
> >Who told you that you can't alter the algorithm despite its
unsuitability? There have been three diploma thesises on this particular algorithm (not only the algorithm itself, but also all the stuff around it and so on) and I will surely propose to alter it like giving it more coefficients etc., but I don't have time to go through the whole process again. I only work on a tiny addition to all that stuff and I have three weeks left until I must present the results.
>> tricky, eh? > >Yes. Maybe not possible. Twice I was told that a goal was not possible >and reached it anyway. One of those times led to an Outstanding >Achievement award. Keep trying. >
I DO keep trying, never wanted to give up, all I'm doing is asking for some ideas... Phil
On Jul 28, 1:12 am, "AudioPhil" <p.oef...@web.de> wrote:
> >Who told you that you can't alter the algorithm despite its > > unsuitability? > > There have been three diploma thesises on this particular algorithm (not > only the algorithm itself, but also all the stuff around it and so on) and > I will surely propose to alter it like giving it more coefficients etc., > but I don't have time to go through the whole process again. > > I only work on a tiny addition to all that stuff and I have three weeks > left until I must present the results. > > >> tricky, eh? > > >Yes. Maybe not possible. Twice I was told that a goal was not possible > >and reached it anyway. One of those times led to an Outstanding > >Achievement award. Keep trying. > > I DO keep trying, never wanted to give up, all I'm doing is asking for > some ideas... > > Phil
Seems to me that your problem is related to the fact that you're trying to suppress harmonics of a known reference signal that is actually unknown. The technique that you're using might work great if you do have knowledge of the reference frequency, but it seems to me that at best you're designing a filter that tracks and cancels a noisy estimate of a reference signal that should be close to the disturbance of interest. I'm not really clear from your description of your situation what your disturbance actually is. At first, you said it was "higher orders" of a tonal interferer, but later on you referred to it as broadband noise. Which is it? As you know, your current approach is an adaptive notch, which will do best at removing a tonal signal. However, you can only notch out a frequency that you can identify. I've not seen the exact technique that you describe, so I'm not sure how it's supposed to work. However, I know that a "typical" LMS adaptive notch filter (or line enhancer) works best in white noise, exploiting the fact that the noise samples are jointly independent, in contrast to the highly correlated signal of interest. Off the top of my head, I would suggest trying a noise-whitening technique to see if that can help you identify the reference signal more accurately. Of course, this is easiest if you can characterize how your noise is colored, but hey, nothing comes for free. Jason
Jason,

thanks for the reply. 
The disturbance consists of a broadband signal which contains several
peaks. These peaks are tonal signals of higher orders of the reference
signal. When you do a spectral analysis, said peaks stick out by three or
four dB.  I want to remove these harmonics.
Every LMS 'aims' at only one of the harmonics.
The problem is that, by several reasons, the peak frequency/ies is/are
instationary (I can track that by the reference signal so far) and the
order(s) vary/ies. Suppose the initial order is 12.8, with time it may be
12.0 or 13.5 (these are only numbers to point out what the problem is). 
Given that, the attenuation varies also, and becomes weaker as the real
order and the estimated order differ... This is what I need to avoid. 

Thanks for the whitening hint anyway, I'll have a close look at that.



Phil