如何对数组中的值进行下采样?

时间:2014-10-01 09:45:26

标签: java downsampling

我有一个长度为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

                }

2 个答案:

答案 0 :(得分:2)

计算平均四个并显示它的方法肯定是有效的。但是,这对于平滑的&#34;数据,对于具有少量高峰的数据不太好。

考虑一种情况,当您的FFT返回大多数小数字时,20个峰值超过平均值大约十次。在应用您的方法后,峰值将保持不变,但它们将超过平均值仅2.5倍。换句话说,直方图将变得比它应该更平滑。

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

答案 1 :(得分:0)

下采样的问题非常复杂,以至于有关于它的研究论文: Downsampling Time Series for Visual Representation

如果您要进行质量下采样,请使用a library并选择最大三角三个存储桶方法。