Hi, I'm using an off-the-shelf DSP package to apply an FFT-based highpass filter to a time-domain signal. This causes 'ringing' in the output, where a sine wave appears from nowhere having the same frequency as the high pass cut-off frequency. The DSP package does not provide much information about how the filter works, only that it is FFT-based. Working solely within the time domain, can anyone suggest what sort of filter or filter settings I should be using so I don't see the rinning artifacts? Many thanks, John
High Pass Filter Ringing - Time Domain
Started by ●April 12, 2010
Reply by ●April 12, 20102010-04-12
>Hi, > >I'm using an off-the-shelf DSP package to apply an FFT-based highpass >filter to a time-domain signal. This causes 'ringing' in the output,where>a sine wave appears from nowhere having the same frequency as the highpass>cut-off frequency. The DSP package does not provide much informationabout>how the filter works, only that it is FFT-based. > >Working solely within the time domain, can anyone suggest what sort of >filter or filter settings I should be using so I don't see the rinning >artifacts?"FFT-based" doesn't say very much. It could just apply to a filter design phase, or it could relate to the real time execution of the filter. If you have ringing, I expect you are trying to achieve a sharp cutoff with just a few filter elements. At its heart, time domain filtering is a resonant process. If you want a sharp cutoff you need to use a few sharply resonant elements, or a larger number of elements with a more damped resonance. I think it should be obvious which of those two approaches will yield the filter with the most ringing issues. Now, how you get from where you are to where you want to be is going to take a bit more knowledge of your filter software and how it is controlled. Steve
Reply by ●April 12, 20102010-04-12
On 12 apr, 10:02, "FatScouser" <john.hague@n_o_s_p_a_m.truebit.co.uk> wrote:> Hi, > > I'm using an off-the-shelf DSP package to apply an FFT-based highpass > filter to a time-domain signal. This causes 'ringing' in the output, where > a sine wave appears from nowhere having the same frequency as the high pass > cut-off frequency. The DSP package does not provide much information about > how the filter works, only that it is FFT-based. > > Working solely within the time domain, can anyone suggest what sort of > filter or filter settings I should be using so I don't see the rinning > artifacts?Ringing is part of the filter response. There is nothing you can do to prevent it from happening. What remains is to control it so that it stays within acceptable limits. There are several factors that influence ringing, like the width of stop-bands, notches and transition bands. A lot of amateurs don't understand these things, and write an FFT-based routine that zeros an arbitrary set of DFT coefficients. This is a certain way to intropduce these kinds of artifacts. To get a working filter, 1) Come up with a specification. Not for what you want (everybody want all the benefits without all the drawbacks), but for what you need (the benefit you can't do without and the drawbacks you can live with). 2) Use a filter design package to find the filter that satisfies the spec from 1). Rune
Reply by ●April 12, 20102010-04-12
Hi, Thanks a lot for your feedback. Specification details include: 1. High-pass filter with cut-off at 0.5 Hz. Cut-off precision is not critical: a cut-off between 0.2 -> 0.8 Hz is fine. 2. This is a non-realtime calculation, so large computation time is no problem. 3. A typical signal is a 25 second sample comprising 10000 points sampled at 400 Hz. Any help much appreciated! John On 12 apr, 10:02, "FatScouser" <john.hague@n_o_s_p_a_m.truebit.co.uk>>wrote: >> Hi, >> >> I'm using an off-the-shelf DSP package to apply an FFT-based highpass >> filter to a time-domain signal. This causes 'ringing' in the output,where>> a sine wave appears from nowhere having the same frequency as the highpass>> cut-off frequency. The DSP package does not provide much informationabout>> how the filter works, only that it is FFT-based. >> >> Working solely within the time domain, can anyone suggest what sort of >> filter or filter settings I should be using so I don't see the rinning >> artifacts? > >Ringing is part of the filter response. There is nothing >you can do to prevent it from happening. > >What remains is to control it so that it stays within >acceptable limits. There are several factors that influence >ringing, like the width of stop-bands, notches and transition >bands. > >A lot of amateurs don't understand these things, and write >an FFT-based routine that zeros an arbitrary set of DFT >coefficients. This is a certain way to intropduce these kinds >of artifacts. > >To get a working filter, > >1) Come up with a specification. Not for what you want (everybody > want all the benefits without all the drawbacks), but for what > you need (the benefit you can't do without and the drawbacks > you can live with). > >2) Use a filter design package to find the filter that satisfies > the spec from 1). > >Rune >
Reply by ●April 12, 20102010-04-12
On 12 apr, 11:46, "FatScouser" <john.hague@n_o_s_p_a_m.truebit.co.uk> wrote:> Hi, > > Thanks a lot for your feedback. Specification details include: > > 1. High-pass filter with cut-off at 0.5 Hz. Cut-off precision is not > critical: a cut-off between 0.2 -> 0.8 Hz is fine. > > 2. This is a non-realtime calculation, so large computation time is no > problem. > > 3. A typical signal is a 25 second sample comprising 10000 points sampled > at 400 Hz.There is a lot to be desired here. How much ripple can you accept in the pass band? What attenuation at what frequency determines the stop-band? One needs such information to be able come up with useful answers: http://www.bores.com/courses/intro/filters/4_spec.htm Rune
Reply by ●April 12, 20102010-04-12
>Hi, > >Thanks a lot for your feedback. Specification details include: > >1. High-pass filter with cut-off at 0.5 Hz. Cut-off precision is not >critical: a cut-off between 0.2 -> 0.8 Hz is fine. > >2. This is a non-realtime calculation, so large computation time is no >problem. > >3. A typical signal is a 25 second sample comprising 10000 points sampled >at 400 Hz. > >Any help much appreciated! > >JohnThat sounds like your goal is merely to eliminate a DC component. If that is the case, and you are always working with discrete chunks of some seconds of data, you'd probably be better off with a 2 pass approach. In pass 1 you find the average of all the samples. In pass 2 you subtract this from every sample. Steve
Reply by ●April 12, 20102010-04-12
On Mon, 12 Apr 2010 05:20:50 -0500, "steveu" <steveu@n_o_s_p_a_m.coppice.org> wrote:>>Hi, >> >>Thanks a lot for your feedback. Specification details include: >> >>1. High-pass filter with cut-off at 0.5 Hz. Cut-off precision is not >>critical: a cut-off between 0.2 -> 0.8 Hz is fine. >> >>2. This is a non-realtime calculation, so large computation time is no >>problem. >> >>3. A typical signal is a 25 second sample comprising 10000 points sampled >>at 400 Hz. >> >>Any help much appreciated! >> >>John > >That sounds like your goal is merely to eliminate a DC component. If that >is the case, and you are always working with discrete chunks of some >seconds of data, you'd probably be better off with a 2 pass approach. In >pass 1 you find the average of all the samples. In pass 2 you subtract this >from every sample. > >SteveHello Steve, If you are correct about the goal being "DC removal", maybe the material at: http://www.dsprelated.com/showarticle/58.phpFatScouser would be useful to FatScouser. See Ya', [-Rick-]
Reply by ●April 12, 20102010-04-12
Hi, Am afraid I can't give you figures for acceptable passband ripple and attenuation. All I can say is that I'm using this DSP package to set a highpass filter at 0.2 Hz, and the output shows a significant ripple at the same frequency when there is no signal in the input. Should I apply a Blackman window function as well? I'm not trying to remove a DC component; I am trying to show the time-domain signal with frequencies < 0.5 Hz removed. Sorry I can't be more specific. In terms of relative amplitudes, however, the resultant ringing artifacts are about 30% of the desired high-frequency signal. Thanks, John>On Mon, 12 Apr 2010 05:20:50 -0500, "steveu" ><steveu@n_o_s_p_a_m.coppice.org> wrote: > >>>Hi, >>> >>>Thanks a lot for your feedback. Specification details include: >>> >>>1. High-pass filter with cut-off at 0.5 Hz. Cut-off precision is not >>>critical: a cut-off between 0.2 -> 0.8 Hz is fine. >>> >>>2. This is a non-realtime calculation, so large computation time is no >>>problem. >>> >>>3. A typical signal is a 25 second sample comprising 10000 pointssampled>>>at 400 Hz. >>> >>>Any help much appreciated! >>> >>>John >> >>That sounds like your goal is merely to eliminate a DC component. Ifthat>>is the case, and you are always working with discrete chunks of some >>seconds of data, you'd probably be better off with a 2 pass approach. In >>pass 1 you find the average of all the samples. In pass 2 you subtractthis>>from every sample. >> >>Steve > >Hello Steve, > If you are correct about the goal being >"DC removal", maybe the material at: > >http://www.dsprelated.com/showarticle/58.phpFatScouser > >would be useful to FatScouser. > >See Ya', >[-Rick-] > >
Reply by ●April 12, 20102010-04-12
On 12 apr, 14:17, "FatScouser" <john.hague@n_o_s_p_a_m.truebit.co.uk> wrote:> Hi, > > Am afraid I can't give you figures for acceptable passband ripple and > attenuation. All I can say is that I'm using this DSP package to set a > highpass filter at 0.2 Hz, and the output shows a significant ripple at the > same frequency when there is no signal in the input.That's related to the impulse response of the filter. Depending on exactky what you are doing, it might be the impulse response itself. Either way, that ringing is related to the narrow bandwidths mentioned.> Should I apply a Blackman window function as well?Not unless you understand why you would want to apply the window.> I'm not trying to remove a DC component; I am trying to show the > time-domain signal with frequencies < 0.5 Hz removed.You shouldn't use the term 'removed'. You should show the signal with the band *attenuated*. This is not a semantic quibble but rather the key to obtaining a useful result. As I said previously, the idea is to not specify a *perfect* solution (which would only be approximated, causing all kinds of misery and mayhem), but rather to specify an *acceptable* solution. In order to do that, you need to specify a lower limit to the pass band. Or alternatively, re-state the problem as a DC-blocking notch filter. You might obtain an acceptable result by playing with notch widths etc. Rune
Reply by ●April 12, 20102010-04-12
FatScouser wrote: (top posting fixed)> On 12 apr, 10:02, "FatScouser" <john.hague@n_o_s_p_a_m.truebit.co.uk> >> wrote: >>> Hi, >>> >>> I'm using an off-the-shelf DSP package to apply an FFT-based highpass >>> filter to a time-domain signal. This causes 'ringing' in the output, > where >>> a sine wave appears from nowhere having the same frequency as the high > pass >>> cut-off frequency. The DSP package does not provide much information > about >>> how the filter works, only that it is FFT-based. >>> >>> Working solely within the time domain, can anyone suggest what sort of >>> filter or filter settings I should be using so I don't see the rinning >>> artifacts? >> Ringing is part of the filter response. There is nothing >> you can do to prevent it from happening. >> >> What remains is to control it so that it stays within >> acceptable limits. There are several factors that influence >> ringing, like the width of stop-bands, notches and transition >> bands. >> >> A lot of amateurs don't understand these things, and write >> an FFT-based routine that zeros an arbitrary set of DFT >> coefficients. This is a certain way to intropduce these kinds >> of artifacts. >> >> To get a working filter, >> >> 1) Come up with a specification. Not for what you want (everybody >> want all the benefits without all the drawbacks), but for what >> you need (the benefit you can't do without and the drawbacks >> you can live with). >> >> 2) Use a filter design package to find the filter that satisfies >> the spec from 1). >> >> Rune >>> Hi, > > Thanks a lot for your feedback. Specification details include: > > 1. High-pass filter with cut-off at 0.5 Hz. Cut-off precision is not > critical: a cut-off between 0.2 -> 0.8 Hz is fine. > > 2. This is a non-realtime calculation, so large computation time is no > problem. > > 3. A typical signal is a 25 second sample comprising 10000 points sampled > at 400 Hz. > > Any help much appreciated! My knee-jerk reaction with this specification would be to try a filter with a raised-sine cutoff that starts at 0.2Hz and runs 0.8Hz. You'll get ringing, but it'll be much attenuated over a filter that just hits a brick wall at 0.2Hz. But without knowing the details of your DSP packages I'm not sure if you can specify this. And without knowing what you really need I'm not sure if this will be satisfactory. You can always give it a whirl, and see. What Rune was trying to point out is that _any_ filter that takes the response all the way to zero at any frequency other than DC will suffer from ringing to a greater or lesser extent -- you don't get to control the existence of ringing, you just get some control over the extent. If you're filtering distinct chunks of data then windowing the data will hold down the spurious high-frequency content and therefore the amount of ringing -- but the span over which the windowing function transitions from no to full gain will need to be longer than 5 seconds to make much difference to a filter that rings at 0.2Hz. -- Tim Wescott Control system and signal processing consulting www.wescottdesign.com






