【发布时间】:2026-02-06 17:45:02
【问题描述】:
假设我有两个输入信号f1 和f2。我可以添加这些信号来产生第三个信号f3 = f1 + f2。然后我会将f3 的频谱图计算为log(|stft(f3)|^2)。
很遗憾,我没有原始信号 f1 和 f2。然而,我有他们的频谱图A = log(|stft(f1)|^2) 和B = log(|stft(f2)|^2)。我正在寻找的是一种使用A 和B 尽可能接近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) 上绘制频谱图?
标签: audio fft spectrogram