我正在爲iOS構建一個音頻應用程序,我需要從麥克風捕獲音頻並將其可視化。我使用AudioKit每0.1秒接收一次振幅數據(來自AKAmplitudeTracker)並將其存儲到一個數組中。這導致很好的精確度,但是這會導致600個值/分鐘被存儲在數組中。我從存儲在這個數組中的數據構建波形圖,並且不可能用數千個波形保持需要的外觀。我正在尋找一種方法來減少數組中元素的數量,將信息損失降低到給定的特定數字,比如256或512.我不熟悉這個領域的術語,所以我們不勝感激任何幫助。如何在給定長度的情況下減少數組的陣列數量並減少信息損失
0
A
回答
1
您需要通過選擇均勻間隔的採樣重新採樣數組。這裏是一個小的通用程序,做的是:
func resample<T>(array: [T], toSize newSize: Int) -> [T] {
let size = array.count
return (0 ..< newSize).map { array[$0 * size/newSize] }
}
下采樣例如:
// Create array [0, 1, 2, ..., 98, 99, 100]
let arr = (0...100).map { $0 }
// Downsample it to 15 items
let sampled = resample(array: arr, toSize: 15)
print(sampled)
[0, 6, 13, 20, 26, 33, 40, 47, 53, 60, 67, 74, 80, 87, 94]
上採樣例如:
// Create array [0, 1, 2, 3, 4]
let arr2 = (0...4).map { $0 }
// Upsample it to 15 items
let sampled2 = resample(array: arr2, toSize: 15)
print(sampled2)
[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
+2
值得指出的是,特別是由於OP正在處理數字音頻,因此如果不首先應用適當的濾波器(例如低通濾波器)而直接進行下采樣可能會導致混疊(直接下采樣將無法實現[Nyquist-Shannon採樣定理] ://en.wikipedia.org/wiki/Nyquist-Shannon_sampling_theorem))。 – dfri
+1
雖然在這種情況下,他不再真正處理音頻,因爲它已經被下采樣到10hz採樣率。 –
相關問題
- 1. 減少數組長度
- 2. 減少數組信息
- 3. 如何在不丟失數據的情況下減少整數數組的長度(二進制數據[0,1])?
- 4. 減少字符數組的長度
- 5. 減少JavaScript函數長度
- 6. 如何減少散列值的長度?
- 7. 減少數組
- 8. Tensorflow - 損失不會減少
- 9. 減少和合並陣列
- 10. JavaScript減少日期值數組陣列
- 11. 表的數據長度沒有減少
- 12. 減少在軌URL長度
- 13. 如何提高或數組的長度減少
- 14. 如何減少字符串的長度?
- 15. 如何在Rails上減少這種情況下的查詢數量
- 16. 如何在不創建新的情況下減少數組大小?
- 17. 減少行序列在該R長度
- 18. 如何減少numpy數組的維數?
- 19. 經紗洗牌,以減少任何長度的陣列
- 20. 如何在不減少fps的情況下減慢AS3中的動畫
- 21. 減少woocommerce摘錄長度?
- 22. Nodejs減少jsonwebtoken長度
- 23. 錯誤減少VARCHAR長度
- 24. 我要減少數量字段和減少其數量
- 25. CPU上的數組並行減少
- 26. 減少重疊對象組的數量
- 27. 減少多陣列列表
- 28. 在cython並行中減少數組
- 29. 如何通過給定的鍵數組來減少Ruby哈希?
- 30. 如何減少if的數量
該技術使用是'downsampling'。 – paulvs