2014-10-01 84 views
2

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

       } 
+0

确保数组的限制 – 2014-10-01 09:49:27

+0

限制是可以的,但我需要知道的是下采样的好方法。只是。 新值=(旧值[1] +旧值[2] +旧值[3] +旧值[1])/ 4 – vragolan 2014-10-01 09:52:07

回答

1

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

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

解决此问题的一种方法是选取四个调整数字的最大值。这会让你完整保留峰。

+0

就是这样!谢谢。我发现每个间隔的最大值,并绘制好:) – vragolan 2014-10-01 10:13:58