假设我有两个输入信号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)
。所以我的问题是:这有更好的近似值吗?
有什么想法吗?感谢。
答案 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 和 f2 的频谱图是相同的。
现在考虑两个可能的组合信号。
仅从 f1 和 f2 的频谱图(完全相同),您无法知道您处于这些非常不同的情况中的哪一种。而且这不仅适用于纯音。任何信号及其关于轴的反射都会遇到同样的问题。进一步概括,根本无法知道您的潜在信号抵消了多少以及它们相互加强了多少。也就是说,有限制。如果对于特定频率,您的基础信号的振幅为 A1 和 A2,则可能的最大振幅为 A1+A2,最小可能为 abs(A1-A2)。