2016-04-23 156 views
1

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

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

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

任何想法?谢谢。

+1

平方运算不是线性的,因此你将得到一个不可分的交叉项(就像你发现的那样)。 – SleuthEye

+0

所以没有办法?你知道任何聪明的近似吗?或者我可以使用的东西,因为我正在处理真实世界的音频文件? – user667804

+0

如果两个输入不相关,则交叉项将消失。 – SleuthEye

回答

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) 
+0

我重写了我的问题,使其更清楚我的问题所在。我认为你正确理解了我的问题,但你的最后一行似乎是错误的。绝对算子不是线性的,对吗? – user667804

0

乘坐2米日志大小的EXP(),添加它们,然后采取总和的日志。

+0

我现在正在这样做,但它不正确。我错过了交叉项2 *(x1 * x2 + y1 * y2)。我认为近似值可能足够好,但是如果你有更接近真相的东西,我想知道。 – user667804