In the documentation about BandstopFilter it says that the cutoff-frequencies w1
and w2
in BandstopFilter[data,{w1,w2}]
should be values between 0 and Pi. I am certain that this is helpful information for someone more knowledgeable than me, but I cannot figure out how to apply it to my specific problem.
I have time-series data acquired at fixed sampling rate (1 kHz) of a certain duration (let's say 20.000 data points). The data is contaminated with 50Hz line noise. How do I properly set up w1
and w2
, as a function of the sampling rate and the length of the data, to properly reduce the 50Hz contamination?
Incidentally, it would be nice to have an appropriate example in the documentation.
Answer
You'd need to convert your analog frequencies to digital. Using the relation $\frac{F_s}{2 \pi} = \frac{f_1}{\omega_1}$ where $F_s$ is the sampling frequency in Hz, $f_1$ is one of your cutoff frequencies in Hz, and solve for $\omega_1$ which comes out to be
$$\omega_1=2\pi \frac{f_1}{F_s}$$
So, in your case, lets use $f_1=49$ hz and $f_2=51$ hz for example (you can try different band, larger or narrower, then
{w1, w2} = 2 Pi #/1000 & /@ {49, 51}
So now you can do
BandstopFilter[data,{w1,w2}]
See if this works. I never tried this function myself.
Edit
For completeness, one can also use
{w1,w2} = 2 Pi {49,51};
BandstopFilter[data,{w1,w2},SampleRate->1000]
But, as already noted in my comment below, for my particular data, this had basically no noticeable effect on the data. Increasing the window size helped for me:
windowsize=1000; (* or at least something larger than 500 *)
{w1,w2} = 2 Pi {49,51};
BandstopFilter[data,{w1,w2},windowsize,SampleRate->1000]
or
{w1,w2} = 2/1000 Pi {49,51};
BandstopFilter[data,{w1,w2},windowsize]
Comments
Post a Comment