【问题标题】:How to downsample values in array?如何对数组中的值进行下采样?
【发布时间】:2014-10-01 09:45:25
【问题描述】:

我有一个长度为 4096 的数组,它包含计算出的 FFT 的结果。 结果应显示在 1024 的窗口长度上 如何将值从 4096 减少到 1024 并且结果仍然正确。

这是个好方法吗?

int index = 0;
for(int i = 0; i < 1024; i++){
                    A = 0;
                    windowOffset = oldLength/1024;    ---> 4096/1024 = 4
                    while(windowOffset > 0){    
                      A += oldArray[index];
                      windowOffset --;
                      index++                        -----> index will go to 4096
                    }
                    newArray[i] =A/(blockSize/1024); ---- summ of 4 values/4

                }

【问题讨论】:

  • 确定数组的限制
  • 限制没问题,但我需要知道下采样的好解决方案。只是。新值 = (旧值[1] + 旧值[2] + 旧值[3] + 旧值[1])/4

标签: java downsampling


【解决方案1】:

您计算四个平均值并显示它的方法当然是有效的。但是,它适用于“平滑”数据,而不适用于具有少量高峰值的数据。

假设您的 FFT 返回的数字大多很小,其中 20 个峰值超过平均值大约十倍。应用您的方法后,峰值将保留,但它们将仅超过平均值 2.5 倍。换句话说,直方图会变得比原本应该平滑得多。

解决此问题的一种方法是选择四个调整后数字的最大值。这可以让您完整地保留峰。

【讨论】:

  • 就是这样!谢谢。我找到了每个间隔的最大值并且画得很好:)
【解决方案2】:

下采样问题足够复杂,有研究论文:Downsampling Time Series for Visual Representation

如果您想要高质量的下采样,请使用a library 并选择最大三角形三桶方法。

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 2014-07-03
    • 2017-09-04
    • 1970-01-01
    • 2013-12-17
    • 2021-01-20
    • 2012-03-10
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多