2016-12-07 73 views
1

我有以下csv文件,其中包含来自电生理学的数据。第三列包含使用软件过滤的数据。第二列包含未过滤的数据。在时间序列数据中过滤高频 - python

data = pd.read_csv("trial_filtered.csv") 
datad = np.asarray(data) 

x1 = datad[:100,0] 
y1 = datad[:100,1] 
y2 = datad[:100, 2] 

我想绘制此数据并比较从未过滤的过滤。

plt.subplot(2, 1, 1) 
plt.plot(x1, y1, 'yo-') 
plt.title('BB565 - OD')  
plt.ylabel('raw signal (voltage)') 

plt.subplot(2, 1, 2) 
plt.plot(x1, y2, 'r.-') 
plt.xlabel('time (milliseconds)') 
plt.ylabel('filtered data') 

plt.show() 

另外我想过滤掉第二列40Hz以上的所有东西,然后创建一个额外的列。

我试过以下,但我一直卡住。是否有另一种方法可以在不使用nitime模块的情况下从我的时间序列数据中滤除高频?

y3 = [] 
ts_y1 = nitime.TimeSeries(y1, time_unit='ms', sampling_interval=1.0) 
#let's take out everything above 30 hertz 
filter = nitime.analysis.FilterAnalyzer(ts_y1, lb=0., ub=40.) 
filtered_ts = filter.fir.datad 
y3.append(filtered_ts.copy()) 

回答

1

如果你想在一个图来显示所有的系列, 可以使用plt.plot()调用先后, 最后用plt.show()结束了,这会把所有的他们在一个单一的数字。

关于第二个问题,如果你想要一个“硬”过滤器,你可以尝试使用FFT模块如下:

  1. FFT信号,并计算出相当于角频率为30Hz,

  2. 找到垃圾箱,并将该频率上的所有垃圾箱设置为零。 (请记住在做此之前使用fftshift)

  3. 做一个ifft,并且你有一个低通滤波信号。我会尽快写一个小脚本来说明和上传。

我希望这有助于!