,我不會把它稱爲「反向插補」爲不存在(我首先想到的是你在談論推!)。你所做的只是插值,只是速度不均勻。
插值:已知值之間找到一個值 推斷:尋找超越已知值
值從恆定速率插值到/比「發現已知值之間的值」的通用任務確實要簡單得多了。我提出2個解決方案。
1)插值到顯著率較高,然後只子樣品到最近的一個(嘗試添加抖動)
2)解決通用的問題:每一個點,你需要使用相鄰的N個點併爲它們擬合一個N-1階多項式。
- N = 2是線性的,並會添加色彩(C0連續性)
- N = 3可以用階梯變化讓你在你的源樣本之間的中間點(比N = 2的泛音可能更糟!)
- N = 4會使您獲得C1連續性(當您更改爲下一個樣本時,斜率將匹配),對於您的應用程序來說肯定足夠了。
讓我解釋一下最後一個。
對於每個輸出樣本使用2前和2以下輸入採樣。在單位時間範圍內調用它們的S0到S3(乘以採樣週期後),並且您將從時間0到1進行插值.Y是您的輸出,Y'是斜率。
ý將從該多項式和其差分(斜率)進行計算
Y(t) = At^3 + Bt^2 + Ct + D
Y'(t) = 3At^2 + 2Bt + C
(在任一側上的值和斜率在端點)的約束
Y(0) = S1
Y'(0) = (S2-S0)/2
Y(1) = S2
Y'(1) = (S3-S1)/2
擴大多項式
Y(0) = D
Y'(0) = C
Y(1) = A+B+C+D
Y'(1) = 3A+2B+C
在樣品堵
D = S1
C = (S2-S0)/2
A + B = S2 - C - D
3A+2B = (S3-S1)/2 - C
最後2是是容易解決方程的系統。從第二個減去第一個。
3A+2B - 2(A+B)= (S3-S1)/2 - C - 2(S2 - C - D)
A = (S3-S1)/2 + C - 2(S2 - D)
則B
B = S2 - A - C - D
一旦你有A,B,C和D,你可以把在時間t的多項式找到你已知樣本之間的樣本值。
重複對於每個輸出採樣,複用A,B,C & d如果下一個輸出樣本仍然是相同的2個輸入樣本之間。計算每個時間t類似於Bresenham直線算法,你只是通過不同數量的每一次進步。
你通過使用FIR做你插值? – Michael