假设我有两个输入信号f1
和f2
。我可以添加这些信号来产生第三个信号f3 = f1 + f2
。然后我将计算f3
的谱图为log(|stft(f3)|^2)
。两个音频文件的频谱图(加在一起)
很抱歉,我还没有原始信号f1
和f2
。然而,我有他们的光谱图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)
。所以我的问题是:是否有更好的近似值?
任何想法?谢谢。
平方运算不是线性的,因此你将得到一个不可分的交叉项(就像你发现的那样)。 – SleuthEye
所以没有办法?你知道任何聪明的近似吗?或者我可以使用的东西,因为我正在处理真实世界的音频文件? – user667804
如果两个输入不相关,则交叉项将消失。 – SleuthEye