我有一個數組,其大小爲256.此數組的元素數在0到1的範圍內。現在,我需要一個數組的大小應該是65536,其中每個元素應該插值或從256值的原始數組縮放。我問在另一個線程,但我不是足夠清晰:(從較小的數組中縮放數值到一個較大的數組
某種映射,其中,可以說,從原始圖像中的10個值應該與更多的數值更大的陣列中。是否可行?
編輯:可以說我有一個數組,這是256浮點數,每個浮點數在0到1範圍內現在,我需要一個新的數組,應該是65536浮動每個浮點數在0到1範圍內。從原來的256輛彩車內插或縮放。
我有一個數組,其大小爲256.此數組的元素數在0到1的範圍內。現在,我需要一個數組的大小應該是65536,其中每個元素應該插值或從256值的原始數組縮放。我問在另一個線程,但我不是足夠清晰:(從較小的數組中縮放數值到一個較大的數組
某種映射,其中,可以說,從原始圖像中的10個值應該與更多的數值更大的陣列中。是否可行?
編輯:可以說我有一個數組,這是256浮點數,每個浮點數在0到1範圍內現在,我需要一個新的數組,應該是65536浮動每個浮點數在0到1範圍內。從原來的256輛彩車內插或縮放。
聲明:我的C++現在並不是那麼棒。這看起來更像Java。我假設你不打算複製和粘貼:知道算法比實現語言更重要。
以下算法不會爲256個條目輸入生成65536個條目。相反,它會產生65281個。原因是你需要將某些東西縮放到其他東西上。考慮一個有256個職位的圍欄。你將只有255個部分的圍欄。每個縮放對應於一段圍欄。對於簡單的數學,我使每個原始樣本之間的樣本數量等於原始樣本的數量。所以如果你輸入一個4入口,你會得到一個13入口輸出。一個100條輸入將會產生一個9901條目輸出。
享受!
std::vector<double> sample(std::vector<double> orig) {
std::vector<double> result(orig.size() * (orig.size() - 1) + 1);
/* for each value, make that many values scaled between this and the last piece */
for(int i = 0; i < orig.size() - 1; i++) {
double last = orig[i];
double curr = orig[i+1];
double diff = curr - last;
double step = diff/orig.size();
int offset = i * orig.size();
for(int j = 0; j < orig.size(); j++) {
result[offset + j] = last + (step * j);
}
}
result[result.size() - 1] = orig[orig.size() - 1];
return result;
}
這聽起來像你問sample rate conversion。如何最有效地做到這一點取決於你的數據的含義。例如,如果你的陣列表示聲波,你米請注意不要引入諧波失真,如果使用線性插值,會發生這種情況。
Wikipedia article on interpolation應該給你一些出發點。
我相信他問的是一個直接/非偏斜的翻譯 –
是的,這是可行的。但直到你讓你的問題更具體,你將不會得到任何答案;按照原樣,這個問題很可能因爲你最後一個原因而被關閉。 – ildjarn
作爲一個想法:對於您的新數組,索引384位於舊數組索引1和2之間的一半,因此它應該包含這兩個數據的相應加權平均值。現在只是概括一下。 –
@你需要箱子嗎? –