4

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

                }
4

2 回答 2

3

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

考虑这样一种情况,您的 FFT 返回的数字大多很小,有 20 个峰值超过平均值大约十倍。应用您的方法后,峰值将保留,但它们将仅超过平均值 2.5 倍。换句话说,直方图会变得比原本应该平滑得多。

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

于 2014-10-01T09:56:36.163 回答
2

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

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

于 2018-09-07T04:58:16.890 回答