过滤“平滑”C中的数字数组

时间:2014-07-27 16:31:32

标签: c arrays filter smoothing

我正在用X代码编写应用程序。它正在收集传感器数据(陀螺仪),然后将其转换为FFTW。最后,我得到一个数组的结果。在应用程序中。我正在绘制图形,但是有很多峰值(见红色图表),我想平滑它。

enter image description here

我的阵列:

double magnitude[S];
    ...
    magnitude[i]=sqrt((fft_result[i][0])*(fft_result[i][0])+ (fft_result[i][1])*(fft_result[i][1]) );

示例数组(30个样本,通常我使用256个样本): " 0.9261901713034604&#34 ;,     " 2.436272348237486&#34 ;,     " 1.618854900218465&#34 ;,     " 1.849221286218342&#34 ;,     " 0.8495016887742839&#34 ;,     " 0.5716796354304043&#34 ;,     " 0.4229791869017677&#34 ;,     " 0.3731843430827401&#34 ;,     " 0.3254446111798023&#34 ;,     " 0.2542702545675339&#34 ;,     " 0.25237940627189&#34 ;,     " 0.2273716541964159&#34 ;,     " 0.2012780334451323&#34 ;,     " 0.2116151847259499&#34 ;,     " 0.1921943719520009&#34 ;,     " 0.1982429400169304&#34 ;,     " 0.18001770452247&#34 ;,     " 0.1982429400169304&#34 ;,     " 0.1921943719520009&#34 ;,     " 0.2116151847259499&#34 ;,     " 0.2012780334451323&#34 ;,     " 0.2273716541964159&#34 ;,     " 0.25237940627189&#34 ;,     " 0.2542702545675339&#34 ;,     " 0.3254446111798023&#34 ;,     " 0.3731843430827401&#34 ;,     " 0.4229791869017677&#34 ;,     " 0.5716796354304043&#34 ;,     " 0.8495016887742839&#34 ;,     " 1.849221286218342"

如何过滤/平滑?关于高斯的什么?知道如何开始甚至给我一个示例代码。 谢谢你的帮助!

最好的问候

约瑟夫

2 个答案:

答案 0 :(得分:1)

最简单的平滑方法是用每个样本及其2个邻居的平均值替换每个样本。

答案 1 :(得分:1)

最简单的想法是取平均2分并将它们放入数组中。像

这样的东西
double smooth_array[S];

for (i = 0; i<S-2; i++)
    smooth_array[i]=(magnitude[i] + magnitude[i+1])/2;

smooth_array[S-1]=magnitude[S-1];

这不是最好的,但我认为应该没问题。

如果您需要科学方法 - 使用某种近似/近似算法。像最小二乘函数近似甚至完整的SE13 / SE35等算法。