首页 > 编程问答 >识别信号 2 中信号 1 的部分

识别信号 2 中信号 1 的部分

时间:2024-07-27 06:43:30浏览次数:13  
标签:python audio signal-processing

我有两个音频信号,我们称它们为信号 1 和信号 2。信号 1 由信号 2 的不同部分组成。例如,假设信号 1 的长度为 15 秒。信号 1 的前 10 秒来自信号 2 的 00:05-00:15。信号 1 的剩余 5 秒来自信号 2 的 00:30-00:35。

我尝试查找信号 2 中的“感兴趣的部分”,即期望的结果将是 f(signal1,signal2)->{00:05-00:15, 00:30-00:35} 我想知道是否有一种确定性的方法来进行搜索,同时又不会变得太复杂。信号 2 可能很大。

我试图通过注释数据并训练分类器来找到信号 1 中的关节。然后,假设这个分类器足够并且找到这些关节,那么它就变成了一个我可以在 O(n log n) 中解决的搜索问题。有没有更简单(并且希望更便宜的方法)来做到这一点?


面临的问题是音频匹配,特别是查找长音频信号(信号 2)中短音频片段(信号 1)的位置。是对的,蛮力方法很快就会变得计算成本高昂。以下是一些可以考虑的更有效和更复杂的方法:

1. 基于相关性的方法

  • 思路: 使用信号 1 和信号 2 之间的互相关性。当信号 1 出现在信号 2 中时,互相关性将在时域中达到峰值。
  • 优点: 概念上简单,实施良好。
  • 缺点: 可能对噪声敏感,如果信号 1 中存在信号 2 中不存在的任何细微变化,则可能无法很好地执行。
  • 改进:
    • 在计算相关性之前,考虑使用包络对信号进行预处理,以提高对轻微时移和噪声的鲁棒性。
    • 使用快速傅里叶变换 (FFT) 有效地计算相关性。

2. 光谱哈希

  • 思路: 为信号 2 的短片段创建“指纹”,并将信号 1 的片段与它们进行匹配。
  • 优点: 可以非常高效,即使存在一定程度的噪声或失真,也可以很好地工作。
  • 缺点: 需要仔细选择哈希函数,并且可能难以完美地匹配精确的边界。
  • 步骤:
    1. 将信号 2 分成短的时间窗口。
    2. 从每个窗口中提取频谱特征(例如,使用短时傅里叶变换 (STFT)) 并创建一个哈希(例如,使用峰值频率或其他频谱特征)。
    3. 为信号 1 执行相同的操作。
    4. 识别信号 1 和信号 2 数据库中的匹配哈希值,以找到匹配的位置。

3. 动态时间规整 (DTW)

  • 思路: 如果信号 1 的部分在时间上被拉伸或压缩(例如,由于记录条件的变化),DTW 是一种测量两个时间序列之间相似性的强大技术。
  • 优点: 对信号长度的变化具有鲁棒性。
  • 缺点: 计算成本可能很高,尤其是对于长信号。
  • 适用性: 如果预计信号 1 的片段在信号 2 中可能具有不同的速度或持续时间,则 DTW 非常有用。

实施提示

  • Python 库: 使用 librosa scipy.signal numpy 等库来处理音频、计算相关性和实现光谱哈希。
  • 优化: 对于大型数据集,考虑使用索引或近似最近邻搜索技术来加快搜索过程。

最佳方法将取决于的音频数据的具体特征以及愿意接受的复杂程度。如果需要高精度且信号可能失真,则光谱哈希或 DTW 是不错的选择。如果速度是一个主要因素,并且信号相对干净,则基于相关性的方法可能就足够了。

标签:python,audio,signal-processing
From: 76330462

相关文章

  • Python win32serviceutil QueryServiceStatus:返回值是什么意思?
    我正在学习使用pywin32,并尝试在64位Python3.6.4上使用win32serviceutil模块以下代码:importwin32serviceutilasserviceserviceStatus=service.QueryServiceStatus("WinDefend")print(serviceStatus)返回以下元组:(16,4,197,0,0,0,0)我对wind......
  • Python request-html 未下载 Chromium
    importrequestsfrombs4importBeautifulSoupfromrequests_htmlimportHTMLSessionurl="https://dmarket.com/ingame-items/item-list/csgo-skins?title=recoil%20case"sesion=HTMLSession()response=sesion.get(url)response.html.render()soup=B......
  • VS Code 不改变 python 环境
    我正在使用VS-Code和anaconda环境作为python解释器。我通过ctrl+shift+`选择准确的anaconda基础环境,它也反映在vscode的下侧面板中。但是,当我检查python版本时,它显示我系统的默认python环境3.7.9如果您看到下面的截图,anaconda环境是3.......
  • 使用 Python 打开保存为 Parquet 文件中元数据的 R data.table
    使用R,我创建了一个Parquet文件,其中包含一个data.table作为主要数据,另一个data.table作为元数据。library(data.table)library(arrow)dt=data.table(x=c(1,2,3),y=c("a","b","c"))dt2=data.table(a=22222,b=45555)attr(dt,&......
  • Python 需要 Windows 长路径
    我尝试运行此安装:pip3installmsgraph-sdk它给了我这个错误:它说我需要使用此链接启用Windows长路径:https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-versi......
  • Python griddata() 和 Matlab griddata():某些网格点的结果不同
    在将一些(相当大的物理)Matlab代码转换为Python时,我偶然发现了这种情况。当对相同的二维离散数据进行插值时,Python/Scipy的griddata()函数给出的结果与Matlab的对应函数不同。griddata()Matlab示例代码:Python示例代码:%Samplepoints(x,y):7x5=3......
  • Ebay Python SDK 仅在特定项目类别上返回错误
    我在一个项目中使用ebaySDK一段时间了。最近我尝试导入一些商品,例如手表、手机壳等...并且我使用了eBay自己通过eBay返回的英国商店页面上的类别ID他们的“get_category_suggestions”API端点,但eBay似乎有选择地决定拒绝某些项目并引发服务器错误!为了测试,我做了......
  • 使用特定的Python版本(MacOS)制作virtualenv
    我安装了brew,python3(默认和最新版本)和pip3,pyenv。TensorFlow现在不支持python3.7,所以我听说我应该制作一个独立运行3.6或更低版本的virtualenv。我安装了python3.6.7bypyenvinstall3.6.7但无法制作virtualenv-p3.6.7(mydir)因为3.6.7不在P......
  • 使用Python去除图像中的线条
    我正在尝试使用Python和cv2、numpy、skimage等从黑白图像中删除“阴影线”(如果图像中存在“阴影线”)。本质上,我的图像可以有1或2条曲线,如下例所示。但每条线都有一条1-5像素外的阴影线,需要删除。我怎样才能在Python中做到这一点?原始......
  • Python 和 OpenCV:如何裁剪半成形边界框
    我有一个为无网格表创建网格线的脚本:脚本之前:脚本之后:是否有一种简单的方法,使用OpenCV来裁剪“脚本之后”图像,使其仅包含四边边界框?示例输出:编辑:我目前正在研究一种解决方案,该解决方案可以找到垂直/水平方向的第一条/最后一条......