如何使用 scipy 和 lfilter 进行实时过滤?

2024-03-08

免责声明:我可能不太擅长 DSP,因此在使该代码正常工作时遇到的问题比我应有的要多。

我需要在传入信号发生时对其进行过滤。我试图让这段代码工作,但到目前为止我还无法做到。 参考文献scipy.signal.lfilter 文档 https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.signal.lfilter.html

import numpy as np
import scipy.signal
import matplotlib.pyplot as plt
from lib import fnlib

samples = 100
x = np.linspace(0, 7, samples)
y = [] # Unfiltered output
y_filt1 = [] # Real-time filtered

nyq = 0.5 * samples
f1_norm = 0.1 / nyq
f2_norm = 2 / nyq
b, a = scipy.signal.butter(2, [f1_norm, f2_norm], 'band', analog=False)
zi = scipy.signal.lfilter_zi(b,a)
zi = zi*(np.sin(0) + 0.1*np.sin(15*0))

这一套zi as zi*y[0 ]最初,在本例中为 0。我从示例代码中得到了它lfilter文档,但我不确定这是否正确。

然后到了我不知道如何处理最初的几个样本的地步。 系数a and b are len(a) = 5这里。 作为lfilter获取从现在到 n-4 的输入值,我是否用零填充它,或者我是否需要等到 5 个样本过去并将它们作为一个块,然后以相同的方式连续采样每个下一步?

for i in range(0, len(a)-1): # Append 0 as initial values, wrong?
    y.append(0)

step = 0
for i in xrange(0, samples): #x:
    tmp = np.sin(x[i]) + 0.1*np.sin(15*x[i])
    y.append(tmp)

    # What to do with the inital filterings until len(y) ==  len(a) ?

    if (step> len(a)):
        y_filt, zi = scipy.signal.lfilter(b, a, y[-len(a):], axis=-1, zi=zi)
        y_filt1.append(y_filt[4])

print(len(y))
y = y[4:]
print(len(y))
y_filt2 = scipy.signal.lfilter(b, a, y) # Offline filtered

plt.plot(x, y, x, y_filt1, x, y_filt2)
plt.show()

我想我也遇到了同样的问题,并找到了解决方案https://github.com/scipy/scipy/issues/5116 https://github.com/scipy/scipy/issues/5116:

from scipy import zeros, signal, random

def filter_sbs():
    data = random.random(2000)
    b = signal.firwin(150, 0.004)
    z = signal.lfilter_zi(b, 1) * data[0]
    result = zeros(data.size)
    for i, x in enumerate(data):
        result[i], z = signal.lfilter(b, 1, [x], zi=z)
    return result

if __name__ == '__main__':
    result = filter_sbs()

这个想法是通过过滤器状态z在随后的每次调用中lfilter。对于前几个样本,过滤器可能会给出奇怪的结果,但后来(取决于过滤器长度)它开始正常运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 scipy 和 lfilter 进行实时过滤? 的相关文章

随机推荐

  • MongoDB $regex 查询和潜在的漏洞

    我们有一个 REST API 用于查询 MongoDB 中的记录 非常简单 大致如下 GET api items q foo 在开发过程中 允许正则表达式作为查询很方便q 我们只需将查询参数传递给 MongoDB regex运算符并且不进行
  • 为什么每个 Chrome 应用程序窗口都会打开一个新的开发者工具窗口?

    从这个问题继续 如何在同一 Chrome 应用程序的多个窗口之间进行通信 https stackoverflow com questions 20765870 how to communicate between multiple wind
  • 在 Struts 2 中使 ${} 运算符 XSS 安全(与 Tapestry 相同)

    正如中提到的http www disasterarea co uk blog xss vulnerability in web frameworks 2 http www disasterarea co uk blog xss vulner
  • SLURM sacct 显示“batch”和“extern”作业名称

    我已将作业提交到 SLURM 队列 该作业已运行并完成 然后我使用以下命令检查已完成的作业sacct命令 但是查看 sacct 命令的结果 我注意到了我没有预料到的其他结果 JobID JobName State NCPUS Timelim
  • 从 ContentBinding 获取视图中的内容

    我在使用新的 Ember js 1 0 之前 时遇到问题 我得到了一些在 Ember 0 9 8 上有效的东西 但是当我更改这个库的版本时 我注意到无法解决的问题 我不太擅长 Ember 这是示例代码 http jsfiddle net E
  • Symfony2 中基于约定的路由

    我正在尝试学习 Symfony2 中的路由是如何工作的 到目前为止我读过的所有内容都有这样的例子 blog path blog page defaults controller AcmeBlogBundle Blog index page
  • Python 打字:TypedDict 是否允许附加/额外的键?

    Does typing TypedDict允许额外的钥匙吗 如果某个值具有 TypedDict 定义中不存在的键 该值是否会通过类型检查器 这取决于 PEP 589 规范TypedDict https peps python org pep
  • 文件支持的内存映射的 CPU 缓存行为/策略?

    有谁知道哪种类型的CPU缓存行为或策略 例如不可缓存的写组合 被分配给内存映射文件支持现代 x86 系统上的区域 有什么方法可以检测是哪种情况 并可能覆盖默认行为吗 Windows 和 Linux 是人们感兴趣的主要操作系统 编者注 这个问
  • 将 Java 对象转换为 Json,反之亦然?

    我知道 JSON 对象只不过是String 我的问题是我有一个对象映射 我想将其转换为 Json 格式 例子 Java Class gt Class Person private String name private String pas
  • “覆盖”子类中共享成员的方法

    目前我正在尝试在 vb net 中创建一种模型 可用于创建 获取数据库条目 我创建了一个带有共享函数的主类模型来获取数据集 例如模型 find 现在我想创建继承主模型类的类 例如为用户提供单独的一个 UserModel find gt SE
  • 如何停止 js 插件在页面加载时运行。我只想修复 Ajax 请求

    我在用着jquery 节奏插件 https github com HubSpot pace使用进度条主题 一切正常 但我想仅在 ajax 请求时修复此运行 经过大量搜索后 我决定在那里发帖 希望有人能提供解决方案 目前它在 Ajax 和页面
  • 如何以编程方式动态管理 iptables 规则?

    我需要查询现有规则 以及能够轻松添加和删除规则 我还没有找到任何 API 来执行此操作 我缺少什么吗 我最接近的解决方案是使用iptables save iptables xml用于查询并手动调用 iptables 命令本身来添加 删除规则
  • Google Compute Engine - 使用启动脚本启动 tmux

    我试图在启动过程中使用元数据键 startup script 启动 tmux 我正在尝试执行tmux new session d s toto在启动期间 但是当我执行tmux ls之后我没有看到任何 tmux 会话 我在这里缺少什么 您可能
  • 如何在 Keras 中故意过度拟合卷积神经网络以确保模型正常工作?

    我正在尝试诊断训练模型时导致精度低的原因 此时 我只想能够获得高训练精度 我可以稍后担心测试精度 过度拟合问题 如何调整模型以提高训练准确性 我想这样做是为了确保我在预处理步骤 洗牌 分割 标准化等 中没有犯任何错误 PARAMS drop
  • 如何相对于导致更改的点击事件对 ng-repeat 项目进行动画处理

    我正在尝试让用户从不同的项目集中选择项目 该项目应从单击的设置动画到所选项目列表中的新位置 在下面的演示中 将粉色框视为可用项目 将边框框视为所选项目列表 蓝色框 用户可以通过单击任一粉红色框来选择项目 angular module tes
  • 将 mysql 表转储到 CSV(stdout),然后将输出通过隧道传输到另一台服务器

    我正在尝试将数据库表移动到另一台服务器 复杂的是当前运行该表的机器几乎没有剩余空间 所以我正在寻找一个可以通过网络工作的解决方案 我尝试过从 src 机器上 mysqldumping 数据库并将其通过管道传输到目标 mysql 中 但我的数
  • 如何从 pytesseract 获得最佳结果?

    我正在尝试使用 OpenCV 和 Pytesseract 从图像中读取文本 但结果不佳 我有兴趣阅读文本的图像是 https www lubecreostorepratolapeligna it gb img logo png https
  • WPF 可编辑组合框验证

    我想要完成的是能够验证输入到可编辑组合框的新类别或从现有组合框的类别列表中选择一个类别 验证仅适用于 selectedItem 不适用于输入到 Text 的新文本 一旦我添加ValidateOnDataErrors True 对于 Comb
  • Visual Studio:立即窗口中的 IntelliSense 在哪里?

    看起来 立即 窗口需要一些像 IntelliSense 一样的活力 有人同意 不同意吗 这会在 VS2008 2010 中出现吗 如果您没有自动出现智能感知 请立即按 Ctrl 空格键 和乔尔一样 智能感知似乎是从封闭的窗口中进来的
  • 如何使用 scipy 和 lfilter 进行实时过滤?

    免责声明 我可能不太擅长 DSP 因此在使该代码正常工作时遇到的问题比我应有的要多 我需要在传入信号发生时对其进行过滤 我试图让这段代码工作 但到目前为止我还无法做到 参考文献scipy signal lfilter 文档 https do