Show HN: Resonate – 低延迟高分辨率频谱分析

Hacker News Top 工具

摘要

Resonate 是一种低延迟、低内存的算法,用于对音频信号进行感知相关的频谱分析,采用带有指数加权移动平均的谐振器模型。

去年四月我在这里分享了关于 Resonate 项目的信息(<a href="https://news.ycombinator.com/item?id=43694157">https://news.ycombinator.com/item?id=43694157</a>)<p>此后发生了很多变化:我在去年六月的国际计算机音乐会议(ICMC)上更详细地展示的工作获得了最佳论文奖。去年十一月我还在布里斯托尔的音频开发者大会上发表了一次演讲,视频已在 YouTube 上发布。<p>今年的工作是我最近在今年的 ICMC 上展示的,它借鉴了相位声码器文献中的已知技术,构建了自调谐滤波器组,能够非常高效地提取输入信号中实际存在的频率分量。项目网站上有概述,论文中有更多细节,包括超分辨率频谱图和重合成实验的应用。<p>正如许多人指出的那样,我使用的技术都不是新的(有些甚至在不同领域有不同的名称),但我没有见过它们以这种方式组合在一起,而对我来说,结果非常令人满意,有时甚至看起来神奇。例如,请参见此演示:<a href="https://youtu.be/LasdoIJJkw8" rel="nofollow">https://youtu.be/LasdoIJJkw8</a><p>当然,亲身体验的最佳方式是通过免费演示应用程序:<a href="https://alexandrefrancois.org/Oscillators" rel="nofollow">https://alexandrefrancois.org/Oscillators</a><p>期待社区的反馈!
查看原文
查看缓存全文

缓存时间: 2026/06/10 00:22

# Resonate 来源:https://alexandrefrancois.org/Resonate/ ResonateResonate 是一种低延迟、低内存占用、低计算成本的算法,用于评估音频(及其他)信号中与感知相关的频谱信息。## 概述 Resonate 模型历经多年开发,首次正式提出于 (François, 2025) (https://alexandrefrancois.org/Resonate/#icmc25),并在 (François, 2026) (https://alexandrefrancois.org/Resonate/#icmc26)中进行了扩展。 Resonate 基于一个谐振器模型,该模型在时域中使用指数加权移动平均(EWMA)(在信号处理中亦称为低通滤波器)累积其共振频率周围的信号贡献。与在线感知信号分析一致,EWMA 赋予较新输入值更高的权重,而较旧值的贡献则呈指数衰减。该模型的紧凑迭代公式允许在每个信号输入样本处进行一次更新,无需缓冲,仅涉及少量算术运算。 每个谐振器(索引 \\(k\\)),以其自然共振频率和瞬时共振频率 \\(f_k(t) = \frac{\omega_k(t)}{2\pi}\\) 为特征,由一个复数 \\(R_k(t)\\) 描述,其振幅捕获了频率 \\(f_k(t)\\) 附近输入信号分量的贡献。以下公式展示了通过相量 \\(P_k(t)\\) 对 \\(R_k(t)\\) 的递归更新公式,用于每个实值输入信号 \\(x(t) \in [-1,1]\\) 的采样点,采样率为 \\(sr\\)。\\(\Delta t = 1/sr\\) 为样本持续时间。 \\[P_k(t) = P_k(t-\Delta t) e^{-i \omega \Delta t}\\] \\[R_k(t) = (1-\alpha_k) R_k(t-\Delta t) + \alpha_k x(t) P_k(t)\\] 参数 \\(\alpha_k \in [0,1]\\) 决定了每个新测量值对累积值的影响程度;它可表示为系统时间常数的函数,该时间常数根据共振频率 \\(f\\) 启发式设定(直观上与频率成反比)。对于音频应用感兴趣的频率范围(20–20000 Hz),\\(\alpha_k = 1 - e^{-\Delta t \frac{f_k}{\log(1+f_k)}}\\) 是一个合理的启发式值。 平滑后的状态 \\(\tilde{R}_k\\) 通过对 \\(R_k\\) 应用参数为 \\(\beta_k\\) 的 EWMA 得到,以抑制功率和相位振荡。 \\[\tilde{R}_k(t) = (1-\beta_k) \tilde{R}_k(t-\Delta t) + \beta_k R_k(t)\\] 该公式与 Dolson 在其 1986 年论文《The Phase Vocoder: A Tutorial》中描述的相声码分析滤波器组解释的前几步一致,即外差混频后接低通滤波。 复数 \\(P_k(t)\\)、\\(R_k(t)\\) 和 \\(\tilde{R}_k(t)\\) 捕捉了谐振器 \\(k\\) 的完整状态。在每个输入信号样本处更新状态仅需少量算术运算。计算功率和/或幅度并非更新所必需,仅在应用需要时才进行,且效率相对较高。 谐振器组独立调谐至与感知相关的频率尺度,能实时计算输入信号频谱内容的瞬时感知相关估计。该组的存储和每样本计算复杂度均与谐振器数量成线性关系,且与处理的输入样本数量或信号时长无关。此外,由于谐振器相互独立,其共振频率或时间常数的调谐没有约束,所有每样本计算可在谐振器间并行化。在离线处理情境下,给定时长的累积计算成本随处理的输入样本数量线性增长。 最初在 (François, 2025) (https://alexandrefrancois.org/Resonate/#icmc25)中提出的模型保持谐振器的共振频率固定,与快速傅里叶变换(FFT)类似。然而,Resonate 谐振器并无此类限制。 在 (François, 2026) (https://alexandrefrancois.org/Resonate/#icmc26)中提出的频率跟踪模型中,谐振器的共振频率允许随时间变化:当缺乏显著信息时(即 \\(R_k(t)\\) 的幅度低于设定阈值),共振频率保持恒定,等于谐振器的自然共振频率。然而,当存在显著响应时,共振频率会跟踪估计的瞬时频率。 在每个时间步,\\(\tilde{R}_k(t)\\) 当前值与前一值之间的相位差 \\(\Delta \phi_k(t)\\) 提供了相位时间导数的估计,用于计算相应的瞬时频率。 \\[f_k(t) = f_k(t-\Delta t) + \frac{\Delta \phi_k(t)}{2\pi \Delta T}\\] 利用复数的相位与其共轭复数的相位差等于二者相位差的特性,可推导出 \\(\Delta \phi_k(t)\\) 的公式,该公式仅需一次主值参数计算。 \\[D_k(t) = \tilde{R}_k(t) \overline{\tilde{R}_k}(t-\Delta t)\\] \\[\Delta \phi_k(t) = \text{Arg}(D_k(t)) \tag{1}\\] 由于 \\(\Delta \phi_k(t)\\) 是对每个输入样本计算的,因此无需担心相位解缠绕问题——这是基于 FFT 的声码器分析中当跳距大于 1 时(或显式计算并减去相位时)的关键步骤。 角速度变化通过应用时间常数为 \\(\gamma_k\\) 的 EWMA 加以稳定。 \\[\omega_k(t) = \omega_k(t-\Delta t) + \gamma_k \frac{\Delta \phi_k(t)}{\Delta T}\\] 相量 \\(P_k(t)\\) 的更新规则变为: \\[P_k(t) = P_k(t-\Delta t) e^{-i \omega_k(t) \Delta t}\\] 通过构造,当受到频率接近谐振器自然共振频率、振幅变化的输入正弦信号作用时,系统的共振频率会跟踪估计的输入频率。因此,谐振器的幅度与信号的振幅成正比。 一个由频率跟踪谐振器组成的谐振器组会不断自调谐至输入信号的内容。谐振器组中谐振器的实际调谐(自然频率)并不重要,只要该组对感兴趣的频率范围提供适当的覆盖即可。谐振器组持续自调谐至输入信号的内容。自然频率的最佳密度和分布可能因不同应用而异。 扩展模型公式建立在相同的紧凑迭代方法之上,该方法允许在每个信号输入样本处进行更新,无需缓冲,仅涉及少量算术运算,并为每个谐振器增加一次超越函数计算。直接的参考实现在现代硬件上表现出实时性能,而利用 SIMD 架构的向量化并行实现则可进一步减少计算时间,从而降低延迟。开源 Swift 包 Oscillators (https://github.com/alexandrefrancois/Oscillators) 包含了 Swift 和 C++ 的参考实现。 自调谐谐振器组构成了一种分析技术的基础,该技术能够实时地为每个输入样本生成一个列表,列出输入信号中唯一识别且精确跟踪的频率分量及其正确振幅。 ## 频谱图 频谱信息随时间的变化通常以频谱图的形式呈现给人类,其中横轴代表时间,纵轴代表频率。每个点的值表示该时间切片中该频率在输入信号中的功率。这些值通常通过信号的最大值进行归一化,并映射到对数颜色尺度,以生成如下所示的图像。这些图在 Python 环境中离线计算,并使用 Librosa (https://librosa.org/) 的 `specshow` 函数渲染。 ### 经典频谱图 一个具有适当调谐谐振器的 Resonate 谐振器组能够直接且高效地计算任意频率尺度的频谱图,与基于 FFT 的方法相比,具有更相关的频率分辨率和更高的时间分辨率。此处展示的对数频率功率频谱图可直接与基于常数 Q 变换(CQT)的经典频谱图进行对比。谐振器的共振频率固定,并在感兴趣范围内呈几何分布。 对数频率尺度频谱图 *来自 Librosa (https://librosa.org/) 的 vibeace 音乐示例的对数频率功率频谱图,分别通过常数 Q 变换(CQT)和 Resonate 实现计算得出(频谱图显示和 CQT 来自 Librosa,采样率:22050Hz,跳距:512 样本,100 个频率 bin,范围 32.7Hz 至 9955.1Hz,每倍频程 12 个 bin)。* 梅尔频率尺度频谱图 *来自 Librosa (https://librosa.org/) 的 Libri3 语音样本的梅尔频率功率频谱图,分别通过常数 Q 变换(CQT)和 Resonate 实现计算得出(频谱图显示和 CQT 来自 Librosa,采样率:22050Hz,跳距:32 样本,128 个频率 bin,范围 0 至 8000Hz)。* ### 跟踪频谱图 此视频 (https://youtu.be/bnvK5Nll4Sg) 展示了使用频率跟踪谐振器组实时计算的真实信号频谱图的屏幕录像。输入信号以 44.1 kHz 采样。纵轴代表频率(对数尺度),由 112 个谐振器计算得出,以 336 个频率带的显示分辨率呈现,这些频率带从底部的 32.7 Hz 到顶部的 19910 Hz 呈几何分布。每 64 个样本(即 1.46 毫秒)实时渲染一个垂直切片。频谱数据的实际时间分辨率极限与输入信号相同。 梅尔频率尺度频谱图 (https://youtu.be/bnvK5Nll4Sg) ## 合成 通过 Resonate 跟踪谐振器组处理会产生每个输入样本的幅度和相位。这些密集的信息可用于合成音频信号。将逆相量 \\(P_k^{-1}(t)\\) 应用于各个跟踪谐振器 \\(\tilde{R}_k(t)\\),得到复数 \\(S_k(t)\\),由此可生成与输入信号分量相对应的音频信号。逆相量可选地引入频率偏移比 \\(fs\\) 和不同的目标采样率 \\(sr_s = 1 / \Delta t_s\\)(时间操作)。频率比为 1 时保持频率不变,大于或小于 1 的值分别导致频率升高或降低。采样率等于输入采样率时保持时间/速度,大于或小于输入采样率的采样率分别导致输出信号时长缩短或延长。 \\[P_k^{-1}(t) = P_k^{-1}(t-\Delta t_s) e^{i \omega_k(t) fs \Delta t_s}\\] \\[S_k(t) = \tilde{R}_k(t) P_k^{-1}(t)\\] 将实际跟踪且自然频率最接近跟踪频率的谐振器的 \\(S_k(t)\\) 求和,并仅取实部,得到音频信号 \\(s(t)\\),该信号捕获了输入信号的主要特征。 \\[s(t) = K \text{Re}( \sum S_k(t) )\\] ### 合成示例 #### 《Who's Loving You》(Jackson 5) 原版: 您的浏览器不支持音频元素。 速度 | 无频移 | 降 2 半音 | 升 2 半音 --- | --- | --- | --- 100% | 您的浏览器不支持音频元素。 | 您的浏览器不支持音频元素。 | 您的浏览器不支持音频元素。 80% | 您的浏览器不支持音频元素。 | 您的浏览器不支持音频元素。 | 您的浏览器不支持音频元素。 120% | 您的浏览器不支持音频元素。 | 您的浏览器不支持音频元素。 | 您的浏览器不支持音频元素。 #### 《Une Simple Melodie》(Michel Polnareff) 原版: 您的浏览器不支持音频元素。 速度 | 无频移 | 降 2 半音 | 升 2 半音 --- | --- | --- | --- 100% | 您的浏览器不支持音频元素。 | 您的浏览器不支持音频元素。 | 您的浏览器不支持音频元素。 50% | 您的浏览器不支持音频元素。 | | 75% | 您的浏览器不支持音频元素。 | | 150% | 您的浏览器不支持音频元素。 | | 200% | 您的浏览器不支持音频元素。 | | ## 出版物 Alexandre R.J. François,“Real-Time, Low-Latency, High Resolution Audio Spectral Analysis: Phase Matters”,将刊于《International Computer Music Conference 2026 会议论文集》,德国汉堡,2026 年 5 月 10–16 日。 **最佳论文奖** | Alexandre R.J. François,“Resonate: Efficient Low Latency Spectral Analysis of Audio Signals”,载于《50th Anniversary of the International Computer Music Conference 2025 (https://icmc2025.sites.northeastern.edu/) 会议论文集》,第 251–258 页,美国马萨诸塞州波士顿,2025 年 6 月 8–14 日。 [pdf (https://alexandrefrancois.org/assets/publications/FrancoisARJ-ICMC2025.pdf)] ## 演讲 Alexandre R.J. François,“Real-time, low latency and high temporal resolution spectrograms”,Audio Developer Conference (ADC25) (https://audio.dev/conference/),布里斯托尔,11 月 10–12 日。 [pdf (https://alexandrefrancois.org/assets/publications/FrancoisARJ-ADC25.pdf)] [YouTube 视频 (https://youtu.be/QbNPA5QJ6OU)] Alexandre R.J. François,“Real-time low latency audio features with Resonate”(Late-Breaking Demo Paper),First AES International Conference on Artificial Intelligence and Machine Learning for Audio (AIMLA 2025) (https://aes2.org/event-extra/2025-aes-international-conference-on-artificial-intelligence-and-machine-learning-for-audio/),伦敦,2025 年 9 月 8–10 日。 [pdf (https://drive.google.com/file/d/1qTtUrwRJytMeSnqb56ETZqIj2erSgWTO/view)] ## 资源 - 开源 Python 模块 noFFT (https://github.com/alexandrefrancois/noFFT) 提供了 Resonate 函数的 Python 和 C++ 实现,以及说明其在离线环境下使用的 Jupyter notebook。 - 开源 Swift 包 Oscillators (https://github.com/alexandrefrancois/Oscillators) 包含了 Swift 和 C++ 的参考实现。Oscillators 应用 (https://alexandrefrancois.org/Oscillators/) 演示了实时频谱图及衍生的音频特征。 - Resonate YouTube 播放列表 (https://www.youtube.com/playlist?list=PLVcB_ABiKC_cbemxXUUJXHAQsHEHxPOP1) 包含实时演示的视频捕捉。 - Resonate 商店 (https://resonate.myspreadshop.co.uk/)

相似文章

Rezonant

Product Hunt

Rezonant 是一个帮助团队将产品创意通过讨论、规格制定和发布推向生产环境的平台。

Show HN: Breathe CLI – 在 macOS 终端中进行共振呼吸训练

Hacker News Top

Breathe CLI 是一款基于终端的工具,用于以每分钟 6 次的速度进行共振呼吸训练,旨在通过呼吸性窦性心律不齐改善心脏迷走神经张力。它提供多种预设方案和安全约束,旨在形成日常习惯,以进行迷走神经训练。