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

Audio 两个音频文件的频谱图(加在一起),audio,fft,spectrogram,Audio,Fft,Spectrogram,假设我有两个输入信号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) 快速

假设我有两个输入信号
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

…=日志(x1+i*y1+x2+i*y2)

…=日志((x1+x2)^2+(y1+y2)^2)

…=日志(x1^2+x2^2+y1^2+y2^2+2*(x1*x2+y1*y2))

…=日志(| 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)
。所以我的问题是:有更好的近似方法吗


有什么想法吗?谢谢。

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

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

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

  • 考虑第一个信号f1,它是频率F和振幅a处的纯音
  • 考虑第二个信号f2,它是频率F和振幅a的纯音,但与f1完全不同步
在这种情况下,f1和f2的光谱图是相同的

现在考虑两种可能的组合信号。</P>
  • f1加在自身上是频率为F、振幅为2A的纯音
  • f1添加到f2是完全静音

仅从f1和f2的光谱图(它们是相同的),你无法知道你处于这些非常不同的情况中。这不仅仅适用于纯音。任何信号及其在轴上的反射都会遇到同样的问题。更进一步地说,根本没有办法知道你的潜在信号有多大程度上相互抵消,它们又有多大程度上相互加强。也就是说,这是有限度的。对于特定频率,如果基础信号的振幅为A1和A2,则最大可能的振幅为A1+A2,最小可能的振幅为abs(A1-A2)。

我重写了我的问题,以便更清楚地说明问题所在。我想你正确地理解了我的问题,但你的最后一行似乎错了。绝对运算符不是线性的,对吗?我在dsp.stackexchange()上有一个问题,你也许可以回答。平方大小运算不是线性的,因此你会得到一个不可分离的交叉项(正如你所发现的)。所以没有办法了?你知道什么巧妙的近似吗?或者我可以使用的东西,因为我处理的是真实世界的音频文件?如果两个输入不相关,交叉项就会消失。我想没有。一个是特定事件的音频记录,另一个是背景声音的音频记录。因为它们都是真实世界的录音,所以至少应该有一些相关性。但也许我可以试着忽略整个交叉项(x1*x2+y1*y2),看看框架的其余部分是否仍然表现良好。我宁愿用某种线性近似,但似乎很难找到。我真的不明白实际的问题是什么。你有两个信号(时间上的真实振幅),你有总和,是什么阻止你在所有三个(f1,f2,f1+f2)上绘制光谱图?我现在正在做,但这是不正确的。我缺少交叉项2*(x1*x2+y1*y2)。我认为近似值可能足够好,但如果你有更接近事实的东西,我想知道。