2016-04-23 157 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