首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过滤器给出负值(SciPy过滤器)

过滤器给出负值(SciPy过滤器)
EN

Stack Overflow用户
提问于 2018-06-07 13:47:50
回答 1查看 1.4K关注 0票数 0

我在用scipy.signal.butter (或ellip)过滤数据集(np数组)时有一个问题。我的数据只有正值,但是过滤后,输出数组中有负值。代码和图形如下所示。问:,为什么会出现负值,我该如何修正呢?,谢谢!

加载数据:

代码语言:javascript
复制
 data_s = pd.read_csv('C:/Users/HP/Desktop/Python and programming/Jupyter/Filter/320_Hz.dat', header=None, squeeze=True)
    data = data_s.values
    #"turn over" the negative parts
    for i in range(len(data)): 
        if data[i] < 0:
            data[i] = abs(data[i]) * 2

Filt:

代码语言:javascript
复制
F_rate = 320.0
sample_time = 1 / F_rate

low = 79.9
high = 80.1
low_d = low / (0.5 * F_rate)
high_d = high / (0.5 * F_rate)

Wn = [low_d,high_d] 
#b, a = signal.ellip(4, 3, 40, Wn, 'bandpass', analog=False) 
b,a = signal.butter(6, Wn, 'bandpass', analog=False)

output = signal.filtfilt(b, a, data) 
print(output)
plt.magnitude_spectrum(output, Fs=F_rate)

退出:

代码语言:javascript
复制
[  7.93572645e-12   1.82355646e-12  -8.99759647e-11 ...,  -5.01622276e+03
   1.18142432e+04   4.98038137e+03]

输出数据的频谱:

输入数据:

输出数据(负值):

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 15:11:39

为什么会出现负值

过滤通常会产生超出输入范围的值。特别是,用带通过滤数据可以消除低频成分.你能想象到的最低频的成分是平均值,它被完全去除了。换句话说:是一种带通滤波器,它将数据中心设为零。只有当数据同时包含正值和负值时,这才有可能。

我怎么才能修好它?

这件事很棘手。要说明如何“修复”它,需要了解为什么对数据进行过滤,以及为什么输出应该是正的。实际上没有什么要修复的,因为过滤器正在做它可以做的事情。

以下是一些可供选择的办法:

  • 修正你的期望值,接受你得到的负面价值。
  • 也许你不需要乐队通行证?使用只移除高频但不触及低频的高通滤波器.
  • np.min(output)或其他偏移量添加到输出中
  • 对输入的输出应用相同的转换:if data[i] < 0: data[i] = abs(data[i]) * 2 (尽管从信号处理的角度来看,这感觉很奇怪)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50742920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档