我有以下csv文件,其中包含来自电生理学的数据。第三列包含使用软件的过滤数据。第二列包含未过滤的数据。
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())
答案 0 :(得分:1)
如果要在单个图表中显示所有系列, 你可以连续使用plt.plot()调用, 最后用plt.show()结束它,这将把所有这些都放在一个图中。
对于第二个问题,如果你想要一个“硬”滤波器,你可以尝试使用FFT模块如下:
对信号进行FFT,并计算30Hz的等效角频率,
找到bin,并将该频率以上的所有bin设置为零。 (记得在这之前使用fftshift)
做一个ifft,你有一个低通滤波信号。我会写一个小脚本来说明并尽快上传。
我希望这有帮助!