gpt4 book ai didi

numpy - 使用 scipy.sosfilt 过滤多维数据

转载 作者:行者123 更新时间:2023-12-05 03:25:51 27 4
gpt4 key购买 nike

我正在尝试使用“scipy.sosfilt”过滤维度为 19 channel x 10,000 个样本的二维数组,但收到有关我的初始过滤器形状的错误。我阅读了发布的解决方案 herehere但我正在寻找比 2 channel 解决方案更通用的东西,以及不涉及在每个 channel 上循环的东西。

这是我尝试过的:

import numpy as np
import scipy
from scipy import signal

# data
# 19 channels x 10,000 samples
data = np.random.rand(19, 10000)

# sampling rate (Hz)
sampling_rate = 500

# filters
nyq = sampling_rate / 2

# create bandpass filter
band_low = 0.01
band_lowcut = band_low / nyq
band_high = 50.0
band_highcut = band_high / nyq
band_sos = scipy.signal.butter(N = 3, Wn = [band_lowcut, band_highcut], btype = 'bandpass', fs = sampling_rate, output = 'sos')
band_z = scipy.signal.sosfilt_zi(band_sos)

# apply bandpass filter across the columns i.e. each of 19 channels bandpassed individually
bandpassed_data, band_z = scipy.signal.sosfilt(sos = band_sos, x = data, zi = band_z, axis = 1)

我收到以下错误:

ValueError: Invalid zi shape. With axis=1, an input with shape (19, 10000), and an sos array with 3 sections, zi must have shape (3, 19, 2), got (3, 2).
  • 我应该如何着手 reshape 我的初始过滤器或我的数据以避免此错误?
  • 最简单的方法是遍历 19 个 channel 中的每一个,然后分别过滤每个 channel 。但我希望我可以在没有任何循环的情况下过滤整个 19x10000 数组。

谢谢!

最佳答案

reshape 为 (3, 19, 2) 可以像这样完成,假设您希望所有 19 个 channel 都相同:

band_z = np.repeat(np.expand_dims(band_z, axis=1), 19, axis=1)

我在最新的 scipy 版本中尝试过它,这很有效。

干杯

关于numpy - 使用 scipy.sosfilt 过滤多维数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71905355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com