FFTW 3.3.3实际数据的基本用法

时间:2013-12-24 13:20:20

标签: c++ fftw

我是FFT的新手,我被要求找到一种方法来分析/处理石油钻井平台收集的一组特定数据。 由于钻机移动(例如,在潮汐和波浪中向上和向下),所收集的数据中存在大量噪声。 我被要求用FFT => filtering => IFFT清理收集的数据。

我使用C ++和FFTW 3.3.3库。

一个例子比其他任何东西都好:

我有一个DB,例如,泥浆流量(每分钟升数)。泥浆流每5秒收集一次,每次测量都有DB的时间戳(例如1387411235)。

所以我的FFT的IN_data是几个时间戳/泥流(例如1387456630 / 3955.94,1387456635 / 3954.92等......)

显示这些数据实际上看起来像一个嘈杂的声音信号,相关的事件可能会被噪音掩盖。

使用互联网上的示例我可以设法执行FFT,但由于我从未参与过信号处理和傅立叶变换,因此缺乏知识和理解是一个大问题。

我真的不知道如何开始这项工作,使用哪个版本的FFTW例程(c2c,r2c等......),如果有任何预数据处理和/或后期处理要做。 我在互联网上阅读了很多例子和教程,但我是法国人(对不起我的错误)这对我来说并不总是有意义,尤其是OUT_data单位,OUT_data类型,输入和输出数据数组大小,窗口(顺便提一下),简而言之,我迷失了......

我认为我的问题对于习惯于FFTW的人来说非常简单,但对我而言,现在这个问题非常复杂。

所以我的问题:

  • 在两种方式中使用什么FFTW例程(FFT和IFFT)(IN_data和OUT_data的数组的类型,类型和大小)。
  • 如何解释生成的数组(FFTW将返回的单位是什么)。

现在,我所做的简短示例是:

fftw_plan p;
p  = (fftw_plan)fftw_plan_dft_1d(size,in,out,FFTW_FORWARD,FFTW_ESTIMATE);
fftw_execute(p);
fftw_destroy_plan(p);

使用“in”和“out”作为fftw_complex(我的In_data数组的复杂元素对于每个数据都设置为1,不知道原因,但教程说要这样做)。

此代码基于互联网上的一个示例,但我缺乏知识/理解是一个很大的拖累,我想知道是否有人在这里可以给我解释/工作流程/见解/链接如何拉这个出。

我正在试用我的新工作,我真的想为我的老板实现这个功能,即使这意味着寻求帮助,我在这里看到了很多FFTW熟练的帖子......

1 个答案:

答案 0 :(得分:0)

对于那些对DSP完全陌生的人来说,这是一个非常雄心勃勃的项目,但您可以先阅读overlap-add方法,这实际上就是您的FFT-filter-IFFT清洁方法所需的方法这个数据。您还应该查看DSP StackExchange网站dsp.stackexchange.com,其中有几个类似的问题/答案涵盖了频域过滤的理论背景和应用。