首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数字数组缩减为具有低信息损失的给定长度的数组

如何将数字数组缩减为具有低信息损失的给定长度的数组
EN

Stack Overflow用户
提问于 2017-04-02 14:46:53
回答 1查看 660关注 0票数 1

我正在为iOS构建一个音频应用程序,我需要从麦克风捕捉音频并将其可视化。我使用AudioKit每0.1秒接收一次振幅数据(来自AKAmplitudeTracker),并将其存储到数组中。这会带来很好的精度,但是这会导致600个值/分钟存储在数组中。我正在从存储在这个数组中的数据构建一个波形图,它不可能用数千个波形来保持所需的外观。我正在寻找一种方法,以减少数组中的元素数量与低信息损失到一个给定的特定数字,如256或512。我不熟悉这个领域的术语,所以任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-02 15:18:41

您需要通过选择均匀间隔的样本对数组进行重采样。下面是一个小的通用例程,可以做到这一点:

代码语言:javascript
复制
func resample<T>(array: [T], toSize newSize: Int) -> [T] {
    let size = array.count
    return (0 ..< newSize).map { array[$0 * size / newSize] }
}

下样例:

代码语言:javascript
复制
// 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

高级示例:

代码语言:javascript
复制
// 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43169661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档