We are using a 4th order Bessel bandpass filter on a signal where we want to measure the level of a 4800Hz signal and suppress any other noise. The low F cutoff is 4500Hz and the high F cutoff is 5100Hz. The sampling frequency is 400,000 samples/sec (which I think is overkill but that's another issue).
We are testing the presence of a shield on a photodetector by putting the shielded photodetector in a small aluminum enclosure. We energize the enclosure with a 4800Hz sine wave, or turn the sine wave off and measure the background noise level. We then subtract the background value from the 4800Hz "on" value. We use the RMS value of both signals.
We have an analog 4th order bandpass on an earlier design that does this very well but a new tester design moves the filter into LabView. In the presence of a strong 4800Hz input the Labview filter works fine and gives us a stable signal after a delay. However when the 4800Hz signal on the chamber is off, i.e. the background measurement, we are seeing 'ringing' in the output array of the filter instead of a zero or near zero output. The ringing seems to be excited by transients in the input signal. I input a repetitive 100us pulse instead of the 4800Hz sine wave and the ringing rises and falls following the pulse, with a short delay as expected. This causes out background measurement to be incorrect, or in the case of a very well shielded photodetector, both the background and active signal are unstable so we can't extract a meaningful RMS value. We added a lowpass filter before the bandpass to reduce the high frequency noise and it helped a little but did not eliminate the ringing.
We've also reduced the order of the bandpass filter to 2nd order and it's a little better, but still not the equivalent of the 4th order analog filter which is very stable even in the presence of a lot of external noise.
One thing we don't understand is the INIT/CONT option on the filter VI. We're not sure from the help file how it should be used in our situation. The help file says "The first time this VI runs or if init/cont is FALSE, LabVIEW initializes the internal states to 0." What internal states? A buffer with all zeroes versus "the final states from the previous call to this instance of this VI when init/cont is true." The ringing changes a bit depending on whether this is true or false, but not in any meaningful way.
Our process is to capture a few 10s of milliseconds (several hundred 4800Hz cycles worth) with the signal off, measure the RMS value of the output array, then do the same with the signal on, again getting the RMS value. We then execute other tests, then repeat the process with the next photodetector. Since the amplitude of the bandpass output is not stable, we are not getting consistent RMS values and not matching the results with the analog filter. Not at all sure what the RMS measurement VI is doing with an unstable output array. I'll attach some graphical output tomorrow.