Python 中的滤波器设计和频率提取

2024-03-12

我正在开展一个项目,用 Python 查找多分量音频信号的瞬时频率。我目前正在使用巴特沃斯带通滤波器结合scipy.signal.lfilter提取我想要的频率区域。然后我使用分析信号(来自scipy.signal.hilbert)以获得瞬时相位,可以将其展开以给出频率。

作为信号处理的新手,我有两个主要问题:

  1. 我读到在许多应用程序中,最好使用scipy.signal.filtfilt over scipy.signal.lfilter。当然当我申请的时候filtfilt根据我的数据,我得到了看起来明显更平滑的瞬时频率信号。我想知道两者之间的主要区别,同时记住我希望获得尽可能接近“真实”瞬时频率的输出。

  2. 瞬时频率数据是非平稳的,这意味着在某些情况下我必须使用更宽的带通滤波器来捕获所有所需的数据。这似乎会给我的信号带来额外的噪音和偶尔的不稳定。有没有办法解决这类问题,例如使用设计更好的过滤器?

EDIT

In response to flebool, below are some images of the data I am looking at. First, a comparison of filt and filtfilt: Comparison of <code>filt</code> and <code>filtfilt</code> Both the above signals have had the same Butterworth filter applied (although the filter function is different), followed by extraction of instantaneous frequency (which is what is plotted, as a function of time). filtfilt seems to shift and smooth the data. Is one of these signals a better approximation of the "true" signal?

请注意,该图仅显示特定信号的子集。

Second, the effect of increasing the Butterworth filter size: Widening the filter This is for the same subset of data as figure 1. The legend shows the lower and upper bound for the filter, respectively (the red trace is the filt version of the data in figure 1).

尽管这里可能不清楚为什么我会使用更大的通带,但在某些情况下,数据可能位于 600 到 800Hz 之间的各个点。正是在这里,我需要更广泛的滤波器设计。您可以看到,随着滤波器变宽,额外的噪声进入迹线;我想知道是否有办法优化/改进我的过滤器设计。


一些稀疏的评论:

1)上图:我无法评论 filtfilt 和 filtfilt 之间最好的是什么,尽管 filtfilt 频率的变化令人担忧。您可以通过对滤波信号应用低通滤波器来获得类似的结果。

2) 不存在“真正的”瞬时频率,除非信号是用特定音调专门生成的。不过,根据我的经验,在许多情况下,展开希尔伯特变换的相位效果很好。随着噪声与信号强度之比的增加,它变得越来越不可靠。

3)关于下图,你说有时你需要一个大的带通滤波器。这是因为信号很长,并且瞬时频率在 500 到 800 Hz 之间移动吗?如果是这样,您可能需要对信号进行加窗,使其达到滤波信号在傅立叶频谱中具有明显峰值的长度,提取该峰值,根据该峰值定制带通滤波器,将希尔伯特应用于加窗信号,提取相位,过滤相位。

如果您确定信号除了噪声和您感兴趣的谐波之外还有其他谐波,那么这是值得做的,并且需要一段时间。在这样做之前,我想确保我获得的数据是错误的。

如果只是1次谐波+噪声,我会在瞬时相位上再次低通+希尔伯特+提取瞬时相位+低通

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

Python 中的滤波器设计和频率提取 的相关文章

  • 使用 JPype - 如何访问 JDBC 元数据函数

    我在用着杰 德贝API https launchpad net jaydebeapi它使用 JPype 加载 FileMaker 的 JDBC 驱动程序并提取数据 但我也希望能够获取所有表的列表在数据库中 In the JDBC 文档 ht
  • Python:如果满足条件,则循环遍历一个字典并在新字典中创建键/值对

    我想将一个字典的值与第二个字典的值进行比较 如果值满足特定条件 我想创建第三个字典 其中的键和值对将根据匹配情况而变化 这是一个显示我的问题的人为示例 编辑 对所有返回感到抱歉 但堆栈溢出无法识别单个返回 并且在一行上运行 3 4 行 使代
  • Native TF 与 Keras TF 性能比较

    我使用本机和后端张量流创建了完全相同的网络 但在使用多个不同参数进行了多个小时的测试后 仍然无法弄清楚为什么 keras 优于本机张量流并产生更好 稍微但更好 的结果 Keras 是否实现了不同的权重初始化方法 或者执行除 tf train
  • NLTK:包错误?朋克和泡菜?

    基本上 我不知道为什么会收到此错误 只是为了获得更多图像 这里有一个代码格式的类似消息 由于是最新的 该帖子的答案已经在消息中提到 Preprocessing raw texts LookupError Traceback most rec
  • 如何使用 django Rest 框架保存多对多字段对象

    我有博客 发布 标签三个模型 在博客模型中 我将字段 postedin 作为发布模型的外键 将 标签 作为标签模型的许多字段 模型 py class Posted models Model name models CharField Pos
  • python:numpy 运行脚本两次

    当我将 numpy 导入到 python 脚本中时 该脚本会执行两次 有人可以告诉我如何阻止这种情况 因为我的脚本中的所有内容都需要两倍的时间 这是一个例子 usr bin python2 from numpy import print t
  • 在 Python 中倾斜数组

    我有一个 2D 数组 我将使用它保存为灰度图像scipy misc toimage 在此之前 我想将图像倾斜给定角度 像这样进行插值scipy ndimage interpolation rotate 上图只是为了说明倾斜过程 我知道我必须
  • ipython/jupyter 中的 tk 问题

    我正在尝试编写一个用于从 ipython jupyter 笔记本启动的 gui 但在笔记本中使用 tkinter 时遇到了麻烦 特别是在让 tk gui 窗口正常关闭方面 如何从 jupyter 制作 启动 tkinter gui 然后在不
  • 在Python中整齐地绘制PMF

    有没有一个库可以帮助我在 python 中整齐地绘制样本的概率质量函数 如下所示 通过matplotlib pyplot的stem模块 matplotlib pyplot stem args kwargs from matplotlib p
  • R.scale() 和 sklearn.preprocessing.scale() 之间的区别

    我目前正在将数据分析从 R 转移到 Python 当在 R 中缩放数据集时 我将使用 R scale 根据我的理解 它将执行以下操作 x mean x sd x 为了替换该函数 我尝试使用 sklearn preprocessing sca
  • 将具有多个时区的 pandas 列转换为单个时区

    Problem 我在 pandas DataFrame 中有一个列 其中包含带有时区的时间戳 此列中有两个不同的时区 我需要确保只有一个 这是该列末尾的输出 260003 2019 05 21 12 00 00 06 00 260004 2
  • 在 Python 中通过网络发送对象的最佳方式是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要通过网络发送对象 我将使用 Twisted 并且我刚刚开始查看它的文档 据我所知 python实现套接字的唯一方式是通过文本 那么我如何使
  • 在python中检测按下了哪些键

    我需要知道现在按下的是哪个键 我不想捕获一些特定的按键来触发事件或类似的事情 我想知道现在按下了哪些键并显示它们的列表 我还需要捕获特殊键 如 F1 F12 shift alt home windows 等 基本上是键盘上的所有键 我如何在
  • 在解析器/子解析器的开头使用 argparse.REMAINDER

    我想实现一个 arg 解析器 它允许我将单元测试作为子命令之一运行 盲目地将参数传递给 unittest main 例如 foo py unittest args to pass to unittest main 以及其他子命令 foo p
  • 启动客户端时,代码要求提供电话/机器人令牌

    使用 Telethon 库运行我的第一个代码时 它要求提供机器人令牌 这是实际的代码 from telethon import TelegramClient events sync api id 1234567 api hash xxxxx
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 如何将 Django 数据库中的模板标签解释/渲染为 HTML

    我正在尝试添加带有来自 Django 管理站点的图像的帖子 但安全 自动转义关闭过滤器无法解释 Django 的模板标签 My input and page look like 复制图像地址 给出http 127 0 0 1 8000 7B
  • Python struct.pack() 'struct.error: bad char in struct format' 尝试保存字节顺序时

    我正在尝试打包一个字符串和字符串的长度 fmt
  • Pandas 数据框可对多列和要列出的值进行字典

    我有一个数据框 id key a1 1 a2 1 a3 1 a4 2 a5 2 a6 3 我想创建一本字典key作为机器号 并且id列作为列表 like 1 a1 a2 a3 2 a4 a5 3 a6 我可以先使用 groupby 然后再使
  • 在不同进程之间共享列表?

    我有以下问题 我编写了一个函数 它将列表作为输入 并为列表中的每个元素创建一个字典 然后我想将这本字典附加到一个新列表中 这样我就得到了一个字典列表 我正在尝试为此生成多个进程 我的问题是 我希望不同的进程访问由其他进程更新的字典列表 例如

随机推荐