FFTW 3.3.3实际数据的基本用法
FFTW 3.3.3 basic usage with real datas
我是FFT的新手,我被要求找到一种方法来分析/处理石油钻机收集的一组特定数据。由于钻机的运动(例如潮汐和波浪的上升和下降),收集的数据中有很多噪音。我被要求用FFT=>滤波=>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"answers"out"作为fftw_complex(对于每个数据,我的in_data数组的复杂元素都设置为1,我真的不知道为什么,但教程说要这样做)。
这段代码是基于互联网上的一个例子,但我缺乏知识/理解是一个很大的拖累,我想知道这里是否有人可以为我提供如何实现这一点的解释/工作流程/见解/链接。
我正处于新工作的试用期,我真的很想为我的老板实现这一功能,即使这意味着四处寻求帮助,我在这里看到了很多FFTW熟练的职位。。。
对于对DSP完全陌生的人来说,这是一个非常雄心勃勃的项目,但您可以从阅读重叠相加方法开始,该方法本质上是FFT滤波器IFFT方法清理这些数据所需的方法。您还应该查看DSP StackExchange网站DSP.StackExchange.com,其中的几个类似问题/答案涵盖了频域滤波的理论背景和应用。
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- 不同的数据包,联合 - 正确的用法\验证?
- 将 PIMPL 习惯用法与成员函数模板一起使用(无需预先了解所有可能的数据类型)
- C++树数据结构的实际用法示例
- FFTW 3.3.3实际数据的基本用法
- C++中常量数据成员的用法
- C++析构函数删除包含动态数组作为数据成员的对象时的用法