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

时间:2016-04-23 22:35:08

标签: audio fft spectrogram

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

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

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)。所以我的问题是:这有更好的近似值吗?

有什么想法吗?感谢。

3 个答案:

答案 0 :(得分:0)

我不是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)

答案 1 :(得分:0)

取2个对数量级的exp(),加上它们,然后取总和的对数。

答案 2 :(得分:0)

从数学上退一步,我们可以看到,在基本层面上,这是不可能的。

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

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

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

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

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