自製foobar插件: Auto Integer Resampl … - 喇叭音響

Table of Contents

※ 引述《wahaha99 (此方不可長)》之銘言:
: 嗯...本著小白不怕死的實驗精神,做了幾項實驗,順便跑了RMAA
: ....這個結果有夠歡樂的:
: http://biotoxicity.0fees.net/RMAA2/Comparison.htm
: Original 96K: 原生96K檔案
: 96K by PPHS: PPHS 從 48K 升頻到 96K (Ultra mode)
: 96K by AIR no-int: AIR(本人惡搞SRC) 從48K升頻到96K (不含插補)
: 96K by AIR: AIR(本人惡搞SRC) 從48K升頻到96K (含插補)
: 嗯...被AIR惡搞過後Noise level竟然勝過原生的!? 不可能啊XD 計算出了什麼問題吧?
: 不過除了頻率響應以外....失真是 AIR插補 < AIR不補 < PPHS
: 嗯,這太豪洨了,沒有演算法可言的東西也能有神效嗎?
: 當然不用高興的太早, 頻率響應.... AIR 很.慘.....
: 放大看就根本是個半圓 XD (原因不明 有請高手解釋)
: 而且因為沒有LPF, 過24k後面一整個歡樂.... 出現了傳說中的頻譜鏡射......
: (好了,這下子真的驗證為什麼oversampling 都要放digital LPF)
: 某首歌的截圖: http://biotoxicity.0fees.net/RMAA2/mirror.gif
: (這是AIR不含插補的圖,插補後好一點點....)
: ...這是什麼東東 = =;;;; 感覺像是方波引起的,請高手解釋吧
: 結論:
: 1.天下沒有白吃的午餐...(我朋友說用牛頓曲線可以逼到很近啦 多近不知道)
: 2.聽起來怎樣不知道...我只知道這很惡搞.....
: 3.下次要惡搞前應該要先去K一K訊號原理....(數學啊...orz)

從 DFT 的定義開始(http://en.wikipedia.org/wiki/Discrete_Fourier_transform

N-1
X_k = Σ x_n exp(-2πi k n/N)
n=0

x_n 為時域資料,n = 0,1,2,...,N-1
X_k 為頻域資料,k = 0,1,2,...,N-1

我要偷懶只算不含補差,只有昇頻的部分
|假設原來的數據:0, 1, 2 ... (x_n ←→X_k )
|昇頻後變成這樣:0, 0, 1, 1, 2, 2... (x'_n←→X'_k)

2N-1
X'_k = Σ x'_n exp(-2πi k n/2N)
n=0
N-1 N-1
= Σ x'_2n exp(-2πi k 2n/2N) + Σ x'_2n+1 exp(-2πi k (2n+1)/2N)
n=0 n=0
N-1
= Σ x_n exp(-2πi k n/N) * [ 1 + exp(-2πi k/2N) ]
n=0

= X_k * [ 1 + exp(-2πi k/2N) ]


這個多出來的係數 abs[ 1 + exp(-2πi k/2N) ] 隨 k 遞減,當 0 < k < N


---
補上線性內插的結果
|假設原來的數據:0, 1, 2, ... (x_n ←→X_k )
|昇頻後變成這樣:0, 0.5, 1, 1.5, 2, ... (x'_n←→X'_k)

X'_k = (過程省略,再省略一兩個多餘項)

= X_k * [ 1 + 0.5 exp(-2πi k/2N) + 0.5 exp(2πi k/N) ]



--

All Comments

Steve avatarSteve2010-06-26
高手QQ 看不太懂,這是在說為什麼頻響不平的原因嗎 XD
Kelly avatarKelly2010-06-27
不過照理說不插補時DAC的輸出不是應該一樣?(NOS DAC)
Tom avatarTom2010-06-28
我不確定不補差訊號會變成怎樣,不過再補上線性內插的結果
Doris avatarDoris2010-06-29
我很懶得寫清楚 XD 反正就是這兩招會在頻域數據上增加一個係數,這個係數大致會隨頻率上升而變小...
Oliver avatarOliver2010-06-29
當k=N/2時,abs[ 1 + exp(-2πi k/2N) ]=√2,也就是說
Odelette avatarOdelette2010-06-30
頻率在24kHz時會少3dB,還算符合你的數據,不過我還是希望
Agatha avatarAgatha2010-07-01
可以實際把這兩條畫出來看看,不過住處沒有數學軟體 XD
Faithe avatarFaithe2010-07-02
看到這 以前上DSP時不好回憶浮上心頭... 還好最後有pass
Iris avatarIris2010-07-03
沒看到毛毛蟲是比較不嚇嚇 :p exp / π 轉成電腦 expression
Ophelia avatarOphelia2010-07-03
後加 loop / recursion 也還好 可是 Var def. 跟 SDK 超難的飆淚 :::> <::: 嗯 W 還是拜託你了 也再度拜託 y 兄了 XDDDD
George avatarGeorge2010-07-04
要看誤差(noise)要從原本連續的信號開始才行
Carolina Franco avatarCarolina Franco2010-07-05
假設某個信號在frequency domain都是小於22.05khz轉回去time domain 做sampling 然後再看DA怎麼做的
Daph Bay avatarDaph Bay2010-07-06
算出來DA的輸出 跟原本的相減 就是誤差了
Dorothy avatarDorothy2010-07-06
誤差總量在某種度量下是不變的 但是oversampling可以
Elma avatarElma2010-07-07
讓他更高頻的部分變多 較低頻的部分變少 LPF就可以濾掉
Anonymous avatarAnonymous2010-07-08
real time src的演算法我沒有研究 不過應該不是取一小段
Tracy avatarTracy2010-07-09
時間做FFT/IFFT這麼簡單 銜接的地方會出問題
Caroline avatarCaroline2010-07-10
最後上視波器看時,發現無插補的upsampling反而越高頻gain比較大,跟軟體預測的可以說是相反...太玄妙了
Tracy avatarTracy2010-07-10
作圖的結果是線性內插的衰減較快...