python - 过滤时间序列数据中的高频 - python

标签 python pandas filter

我有以下 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()) 

最佳答案

如果您想在单个图表中显示所有系列, 您可以连续使用 plt.plot() 调用, 最后用 plt.show() 结束,这会将它们全部放在一个图中。

对于第二个问题,如果您想要一个“硬”滤波器,您可以尝试使用 FFT 模块,如下所示:

  1. 对信号进行 FFT,并计算出 30Hz 的等效角频率,

  2. 找到该 bin,并将高于该频率的所有 bin 设置为零。 (记得在执行此操作之前使用 fftshift)

  3. 进行 ifft,您将获得低通滤波信号。我将编写一个小脚本来说明并很快将其上传到此处。

希望这会有所帮助!

关于python - 过滤时间序列数据中的高频 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41019442/

相关文章:

python - Flask:当用户在执行一个长进程时关闭浏览器时会发生什么?

python - 如何将二级索引更改为 pandas DataFrame 中的二级列?

filter - 在 OU 中使用带有过滤器 "memberof"和空格字符的 ldapsearch

amazon-web-services - aws cli 日志过滤模式排除

css - 如何使模糊效果在 IE 中工作

python - 为什么 refs 在 Python 中每个新对象都会增加 2?

python - 将日期时间列拆分为单独的日期和时间列

python - 为什么这种递归回溯函数比非递归函数慢,用于计算 python 中找零硬币的最小数量?

python - 在 Pandas 数据框中的特定时间之间选择数据

python - 根据索引列合并两个数据框