[SciPy-User] Low pass filter

Ivo Maljevic ivo.maljevic at gmail.com
Fri Sep 18 08:00:21 EDT 2009


Kaan,
If your signal is sampled at 5 Gsamples/second, why do you want to filter
out everything abouve 5 Hz? Make sure you understand what you are doing.
And your filter order N=4 is still low, but that is a different problem, you
cannot make a filter that narrow, and that is your problem.
Ivo

2009/9/18 Kaan AKŞİT <kunguz at gmail.com>

> Dear Ivo,
>
> Thank you very much for examples and debugging. I had this problem with
> tuning of Wn. My sample rate is pretty high f_s = 5000000000. When I
> configure it as below:
>
> f_s = 5000000000
> [b,a]=butter(4,5./(f_s/2))
>
> It warns me about bad coefficient:
>
> /usr/lib/python2.6/site-packages/scipy/signal/filter_design.py:221:
> BadCoefficients: Badly conditionned filter coefficients (numerator): the
> results may be meaningless
>   "results may be meaningless", BadCoefficients)
> /usr/lib/python2.6/site-packages/scipy/signal/filter_design.py:221:
> BadCoefficients: Badly conditionned filter coefficients (numerator): the
> results may be meaningless
>   "results may be meaningless", BadCoefficients)
>
> Best regards,
> Kaan
>
>
> 17 Eylül 2009 17:33 tarihinde Ivo Maljevic <ivo.maljevic at gmail.com> yazdı:
>
> Do you know what is the sampling rate of your data? Your Wn = 5/(f_s/2),
>> where f_s is the data sampling rate.
>> Also, I meant "I cannot comment on the frequency *content* of the signal
>> you are trying to LPF".
>>
>> Hope this helps.
>>
>> Ivo
>>
>>
>> 2009/9/17 Ivo Maljevic <ivo.maljevic at gmail.com>
>>
>>> Kaan,
>>> If you have two consecutive plot calls, you need to call figure in
>>> between, or you will plot over the first one. See the modified code below
>>> (blue). Also, put the time on the proper place (red).
>>> I cannot comment on the frequency comment of the signal you are trying to
>>> LPF.
>>>
>>> Notes:
>>>
>>> 1. Your butterworth filter is too short: N=2?
>>> 2. Your Wn should be normalized and < 1, I think.
>>>
>>> Ivo
>>>
>>>
>>> #!/usr/bin/python
>>> # -*- coding: utf-8 -*-
>>> import time, array, datetime
>>> import matplotlib
>>> import matplotlib.pyplot as plt
>>> from scipy import *
>>> from scipy.signal import butter, lfilter
>>>
>>> input = 0
>>> timing = []
>>> voltage  = []
>>> values = []
>>>
>>> input = 0
>>> infile = open('measurements/' + "data.csv", "r")
>>> for line in infile.readlines():
>>>     values = line.split(',')
>>>     voltage.insert(input,float(
>>>
>>>>  values[0]))
>>>>     timing.insert(input,float(values[1]))
>>>>     input = input + 1
>>>> plt.xlabel('Time steps')
>>>> plt.ylabel('Voltage')
>>>> plt.title('Measurments from Oscilloscope')
>>>> plt.grid(True)
>>>> plt.plot(timing, voltage)
>>>>
>>>
>>>    plt.figure()
>>>
>>> [b,a]=butter(2,5)
>>> voltagelowp=lfilter(b,a,
>>>
>>>> voltage)
>>>> plt.plot(timing, voltagelowp)
>>>> plt.show()
>>>> plt.close()
>>>>
>>>
>>>
>>>
>>> 2009/9/17 Kaan AKŞİT <kunguz at gmail.com>
>>>
>>>> Thanks Ivo, The problem is after filtering I got the same signal. I
>>>> wanted to clear the frequencies higher then 5 Hz. My code is similar to
>>>> yours but the output doesn't seem logical:
>>>>
>>>> #!/usr/bin/python
>>>> # -*- coding: utf-8 -*-
>>>> import time, array, datetime
>>>> import matplotlib
>>>> import matplotlib.pyplot as plt
>>>> from scipy import *
>>>> from scipy.signal import butter, lfilter
>>>>
>>>> input = 0
>>>> timing = []
>>>> voltage  = []
>>>> values = []
>>>>
>>>> input = 0
>>>> infile = open('measurements/' + "data.csv", "r")
>>>> for line in infile.readlines():
>>>>     values = line.split(',')
>>>>     voltage.insert(input,float(values[0]))
>>>>     timing.insert(input,float(values[1]))
>>>>     input = input + 1
>>>> plt.xlabel('Time steps')
>>>> plt.ylabel('Voltage')
>>>> plt.title('Measurments from Oscilloscope')
>>>> plt.grid(True)
>>>> plt.plot(timing, voltage)
>>>>
>>>
>>>    plt.figure()
>>>
>>>
>>>>  [b,a]=butter(2,5)
>>>> voltagelowp=lfilter(b,a,voltage)
>>>> plt.plot(timing, voltagelowp)
>>>>
>>>> plt.show()
>>>> plt.close()
>>>>
>>>> 2009/9/17 Ivo Maljevic <ivo.maljevic at gmail.com>
>>>>
>>>> Does the following:
>>>>>
>>>>> plt.plot(timing, voltage)
>>>>> plt.show()
>>>>>
>>>>> work before filtering? (Suggestion, you may want to put time on x-axis,
>>>>> see the line above)
>>>>>
>>>>> I just wrote a small test program, and it works:
>>>>>
>>>>>
>>>>> #!/usr/bin/python
>>>>>
>>>>> # import
>>>>> import pylab as plt
>>>>> from scipy import *
>>>>> from scipy.signal import butter, lfilter
>>>>>
>>>>> t=linspace(0,1,100)
>>>>> v=sin(2*pi*t)
>>>>>
>>>>> (b,a)=butter(2,5,btype='low')
>>>>> v=lfilter(b,a,v)
>>>>> plt.plot(t,v)
>>>>> plt.show()
>>>>>
>>>>>
>>>>> 2009/9/17 Kaan AKŞİT <kunguz at gmail.com>
>>>>>
>>>>>>  Hi all,
>>>>>>
>>>>>> This is my first time that I use Scipy. I have two arrays both of them
>>>>>> one dimensional. One of them is filled with voltage values and one of them
>>>>>> is filled with time values. I want to apply low pass filter to clear the
>>>>>> noise from the data. Can you please help me? I already wrote something but
>>>>>> it is not working:
>>>>>>
>>>>>> (b,a)=butter(2,5,btype='low')
>>>>>> voltage=lfilter(b,a,voltage)
>>>>>> plt.plot(voltage,timing)
>>>>>>
>>>>>> Best regards,
>>>>>> Kaan
>>>>>>
>>>>>> _______________________________________________
>>>>>> SciPy-User mailing list
>>>>>> SciPy-User at scipy.org
>>>>>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> SciPy-User mailing list
>>>>> SciPy-User at scipy.org
>>>>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> SciPy-User mailing list
>>>> SciPy-User at scipy.org
>>>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>>>
>>>>
>>>
>>
>> _______________________________________________
>> SciPy-User mailing list
>> SciPy-User at scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>
>>
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20090918/13ea8d08/attachment.html>


More information about the SciPy-User mailing list