这种平滑信号的简单方法是否有技术术语?

信息处理 fft 平滑 术语
2021-12-29 22:31:43

首先,我是 DSP 新手,没有受过真正的教育,但我正在开发一个音频可视化程序,我将 FFT 阵列表示为垂直条,就像在典型的频谱可视化中一样。

我遇到的问题是,如果我直接映射 FFT 值,音频信号值变化太快而无法产生令人愉悦的视觉输出:

在此处输入图像描述

因此,我对这些值应用了一个简单的函数,以“平滑”结果:

// pseudo-code
delta = fftValue - smoothedFftValue;
smoothedFftValue += delta * 0.2; 
// 0.2 is arbitrary - the lower the number, the more "smoothing"

换句话说,我正在获取当前值并将其与最后一个值进行比较,然后将该增量的一部分添加到最后一个值。结果如下所示:

在此处输入图像描述

所以我的问题是:

  1. 这是一个成熟的模式或功能已经存在的术语吗?是这样,是什么术语?我在上面使用“平滑”,但我知道这意味着 DSP 中非常具体的东西,可能不正确。除此之外,它似乎可能与音量包络有关,但也不完全相同。

  2. 是否有更好的方法或进一步研究我应该研究的解决方案?

如果这是一个愚蠢的问题,感谢您的时间和道歉(阅读此处的其他讨论,我知道我的知识远低于看起来的平均水平)。

4个回答

您实现的是单极低通滤波器,有时称为泄漏积分器您的信号具有差分方程:

y[n]=0.8y[n1]+0.2x[n]

在哪里x[n]是输入(未平滑的 bin 值)和y[n]是平滑的 bin 值。这是实现简单、低复杂度低通滤波器的常用方法。我之前在之前的答案中已经写过好几次了;[1] [2] [3]

警告:包括一些历史、旧文件(我喜欢它们)和打孔卡!

你用过a=0.2形式: 有时写为:

y(n)=y(n1)+a[x(n)y(n1)],
y(n)=ax(n)+(1a)y(n1).

上面的第一个版本不太自然,但它避免了一个乘法,并且在某种程度上更有效。这两个公式都产生了一个线性的、因果的和无限的脉冲响应滤波器故事可以追溯到 Poisson、Kolmogorov-Zurbenko 自适应滤波器、Brown(库存控制的统计预测。McGraw-Hill,1959 年)、Holt(1957 年)和 Winters(1960 年)。它被实现为一种递归过滤方案,在文献中以不同的名称闻名:

  • 一阶指数平均低通滤波器,
  • 指数平均器,
  • 指数平滑
  • 指数移动平均线(EMA),
  • 指数加权移动平均线(EWMA),
  • 布朗的简单(线性)指数平滑(有时称为 SES),
  • ARIMA(0,1,1)模型。

名称中的“指数”与几何级数的脉冲响应有关,它对指数衰减进行采样:h[n]=(1a)u[n]an

作为历史记录,Robert G. Brown 和 Arthur D. Little 在 1956 年的指数平滑中使用了这种方法来预测需求,显然是针对烟草业的。更多的历史和解释可以在Holt-Winters Forecasting for Dummies (or Developers) - Part I中找到。Peter Zehna 在1966 年关于指数平滑的一些评论中提供了批判性评论。R. Brown 在运筹学和管理科学百科全书(谷歌书籍)中的一章可以追溯到 1944 年,可读的页面在此处复制:

指数平滑,p。 205、运筹学与管理科学百科全书

指数平滑,p。 206、运筹学与管理科学百科全书

许多方法扩展了这种平滑,当数据具有趋势或季节性时,它缺乏有效性。其中一些被称为双指数或三指数平滑,以及Holt-Winters 滤波器

您还可以查看:这个“简单过滤器”是如何工作的?

是否有更好的方法或进一步研究我应该研究的解决方案?

音频表的正常方法是“有损峰值检测器”。

if new_value > current_value
  current_value = new_value;
else
 current_value = current_value * decay;  

这会立即对信号中的任何新的或峰值或瞬态作出反应,但它会持续一段时间,因此它会创建一个不那么忙碌的画面。衰减应该是一个介于 0 和 1 之间的常数。它控制条形的完成速度,其中 0 是瞬时的,1 是从不的。

在美国国防部承包商圈子中,这种特殊的过滤器经常被称为“阿尔法过滤器”,因为它可以用一个传统上称为“阿尔法”的参数来表征。

它直接类似于简单的模拟 RC 低通滤波器。

它们非常简单,有严重的局限性,但它们比更复杂(和复杂!)的过滤器具有不可否认的优势,如果你避开它们的问题区域,它们就能完成工作。