【问题标题】:Filtering "Smoothing" an array of numbers in C过滤“平滑”C中的数字数组
【发布时间】:2014-07-27 16:31:31
【问题描述】:

我正在用 X-code 编写一个应用程序。它正在收集传感器数据(陀螺仪),然后将其转换为 FFTW。最后,我得到了一个数组中的结果。在应用程序中。我正在绘制图表,但峰值太多(参见红色图表),我想对其进行平滑处理。

我的数组:

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", "2.436272348237486", "1.618854900218465", "1.849221286218342", "0.8495016887742839", "0.5716796354304043", "0.4229791869017677", "0.3731843430827401", "0.3254446111798023", "0.2542702545675339", "0.25237940627189", "0.2273716541964159", "0.2012780334451323", "0.2116151847259499", "0.1921943719520009", "0.1982429400169304", "0.18001770452247", "0.1982429400169304", "0.1921943719520009", "0.2116151847259499", "0.2012780334451323", "0.2273716541964159", "0.25237940627189", "0.2542702545675339", "0.3254446111798023", "0.3731843430827401", "0.4229791869017677", "0.5716796354304043", "0.8495016887742839", "1.849221286218342"

如何过滤/平滑它?高斯呢?知道如何开始,甚至给我一个示例代码。 感谢您的帮助!

最好的问候

约瑟夫

【问题讨论】:

    标签: c arrays filter smoothing


    【解决方案1】:

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

    【讨论】:

    • 高斯呢?不是更有效率吗?
    • 不能比每个样本的 2 加和除法更有效。 Gauss 可能会提供更好的平滑,但可能不会更有效。
    • 你能给我写(编辑你的答案)代码如何使用高斯吗?
    【解决方案2】:

    最简单的想法是取 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 等算法。

    【讨论】:

    • 谢谢Midas,你的第一票投了;)。请阅读我的评论@scott Hunter。
    • 这不是“转移”样本吗?从某种意义上说,您正在计算的值应该具有i+(1/2) 的索引(如果它们表示时间或位置,而不是仅表示序数,则更有意义)。
    • @ScottHunter 我不明白你对 i+(1/2) 的意思!!您能否编辑您的答案并写下我可以接受的正确代码。如果你知道如何用高斯(如果可能的话)也请写出来。非常感谢
    • 如果数据是一个时间序列,其中每个索引代表一个特定的时间点,那么您实际上是在计算时间 i 的平滑值,方法是将其与时间 @987654324 处的值进行平均@,它可以解释为 ii+1 之间的时间值(因此,i+(1/2))。
    • @ScottHunter 我正在计算 FFTW 的结果,所以它不再取决于时间,所以我想我使用它,不是吗?但与:for (i = 0; i&lt;S-1; i++).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2015-12-23
    • 2017-09-09
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多