我正在为iOS构建一个音频应用程序,我需要从麦克风中捕获音频并将其可视化。我每隔0.1秒使用AudioKit接收振幅数据(来自AKAmplitudeTracker)并将其存储到数组中。这样可以获得很好的精度,但这会导致600个值/分钟存储在数组中。我正在根据存储在此阵列中的数据构建波形图,并且无法使用数千个波形保持所需的外观。我正在寻找一种方法来减少数组中元素的数量,信息丢失率低到给定的特定数字,如256或512.我不熟悉这个领域的术语,所以任何帮助都是值得赞赏的。
答案 0 :(得分:1)
您需要通过选择均匀间隔的样本来重新采样阵列。这是一个通用的例程:
=COUNTIF('Usernames and emails'!$A$5:$A$1450;$A7)>0
下采样示例:
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)