我正在为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