两个音频文件的频谱图(加在一起)

Posted

技术标签:

【中文标题】两个音频文件的频谱图(加在一起)【英文标题】:Spectrogram of two audio files (Added together) 【发布时间】:2016-04-23 22:35:08 【问题描述】:

假设我有两个输入信号f1f2。我可以添加这些信号来产生第三个信号f3 = f1 + f2。然后我会将f3 的频谱图计算为log(|stft(f3)|^2)

很遗憾,我没有原始信号 f1f2。然而,我有他们的频谱图A = log(|stft(f1)|^2)B = log(|stft(f2)|^2)。我正在寻找的是一种使用AB 尽可能接近log(|stft(f3)|^2) 的方法。如果我们做一些数学运算,我们可以得出:

log(|stft(f1 + f2)|^2) = log(|stft(f1) + stft(f2)|^2)

表达stft(f1) = x1 + i * y1&stft(f2) = x2 + i * y2来写

... = log(|x1 + i * y1 + x2 + i * y2|^2)

... = log((x1 + x2)^2 + (y1 + y2)^2)

... = log(x1^2 + x2^2 + y1^2 + y2^2 + 2 * (x1 * x2 + y1 * y2))

... = log(|stft(f1)|^2 + |stft(f2)|^2 + 2 * (x1 * x2 + y1 * y2))

所以此时我可以使用近似值:

log(|stft(f3)|^2) ~ log(exp(A) + exp(B))

但我会忽略最后一部分2 * (x1 * x2 + y1 * y2)。所以我的问题是:有没有更好的近似值?

有什么想法吗?谢谢。

【问题讨论】:

平方幅度运算不是线性的,因此您将得到一个不可分离的交叉项(正如您所发现的那样)。 所以没有办法了?你知道任何巧妙的近似吗?或者我可以使用的东西,因为我正在处理现实世界的音频文件? 如果两个输入不相关,交叉项就会消失。 我猜没有。一种是特定事件的录音,一种是背景声音的录音。由于它们都是真实世界的录音,因此至少应该有一些相关性。但也许我可以尝试忽略整个交叉项 (x1*x2 + y1*y2),看看框架的其余部分是否仍然表现良好。我宁愿有某种线性近似,但似乎很难找到。 我真的不明白实际的问题是什么。你有 2 个信号(时间上的真实幅度),你有总和,是什么让你无法在所有三个 (f1,f2,f1+f2) 上绘制频谱图? 【参考方案1】:

我不是 100% 理解你的符号,但我会试一试。时域中的加法对应于频域中的加法。将两个时域信号 x1 和 x2 相加会产生第三时域信号 x3。 x1、x2 和 x3 都有一个频域频谱,即 F(x1)、F(x2) 和 F(x3)。 F(x3) 也等于 F(x1) + F(x2),其中通过将 F(x1) 的实部与 F(x2) 的实部相加并加上 F(x1) 的虚部来执行加法) 到 F(x2) 的虚部。因此,如果 x1[0] 为 1+0j 且 x2[0] 为 0.5+0.5j,则总和为 1.5+0.5j。从您的符号来看,您正在尝试添加幅度,在此示例中为 |1+0j| + |0.5+0.5j| = sqrt(1*1) + sqrt(0.5*0.5+0.5*0.5) = sqrt(2) + sqrt(0.5)。显然不是一回事。我想你想要这样的东西:

log((|stft(a) + stft(b)|)^2) = log(|stft(a)|^2) + log(|stft(b)|^2)

【讨论】:

我重写了我的问题,以便更清楚地说明我的问题所在。我认为您正确理解了我的问题,但您的最后一行似乎是错误的。绝对算子不是线性的,对吧? 我有一个关于 dsp.stackexchange (dsp.stackexchange.com/questions/62645/…) 的问题,您或许可以回答。【参考方案2】:

取 2 个对数幅度的 exp(),将它们相加,然后取总和的对数。

【讨论】:

我现在正在这样做,但它不正确。我错过了交叉项 2*(x1*x2 + y1*y2)。我认为近似值可能已经足够好了,但如果你有一些更接近真相的东西,我想知道。【参考方案3】:

从数学中退一步,我们可以看到,从根本上说,这是不可能的。

考虑第一个信号 f1,它是频率 F 和幅度 A 的纯音。 考虑第二个信号 f2,它是频率 F 和幅度 A 的纯音,但与 f1 完全异相。

在这种情况下,f1 和 f2 的频谱图是相同的。

现在考虑两个可能的组合信号。

添加到自身的 f1 是频率 F 和幅度 2A 的纯音。 f1 添加到 f2 是完全静音。

仅从 f1 和 f2 的频谱图(它们是相同的),您无法知道您处于这些非常不同的情况中的哪一种。这不仅适用于纯音。任何信号及其关于轴的反射都会遇到同样的问题。更进一步地概括,没有办法知道你的潜在信号取消了多少以及它们相互加强了多少。也就是说,有限制。如果对于特定频率,您的基础信号的幅度为 A1 和 A2,则可能的最大幅度为 A1+A2,而可能的最小幅度为 abs(A1-A2)。

【讨论】:

以上是关于两个音频文件的频谱图(加在一起)的主要内容,如果未能解决你的问题,请参考以下文章

音频频谱显示-显示音频文件静态频谱图

音频频谱显示-显示音频文件静态频谱图

音频频谱显示-基于fmod设计音乐播放器并动态显示频谱图

音频频谱显示-基于fmod设计音乐播放器并动态显示频谱图

音频频谱显示-基于fmod设计音乐播放器并动态显示频谱图

了解音频文件频谱图值