FCWT 您所在的位置:网站首页 cwt男明星 FCWT

FCWT

2024-06-22 12:31| 来源: 网络整理| 查看: 265

Github链接icon-default.png?t=N7T8https://github.com/fastlib/fCWT最近课业需要,试图在C++上实现CWT(小波变换),从网上查询,发现了这个库,但是苦于文档是英文且网络上暂无安装教程。今天独自折腾了好久,也是四处碰壁,但现在似乎把库安装迁移好了?于是记录于此。

1、背景介绍

根据原仓库所述:

“快速连续小波变换 (fCWT) 是一个高度优化的 C++ 库,用于在 C++、Matlab 和 Python 中非常快速地计算 CWT。

fCWT已登上2022年1月《自然计算科学》杂志封面。在本文中,将fCWT与八种竞争算法进行了比较,测试了抗噪性,并在合成脑电图和体内细胞外局部场电位数据上进行了验证。”

2、安装要求

原文档给出的安装依赖如下:

依赖 Cmake >=3.10C++17编译器(GCC 10+,Clang或Microsoft Visual C++ 15.7+);FFTW >=3.3(如果您选择使用自己的 FFTW 安装)OpenMP >=5

构建时的设置依据自己的需求来根据原文档配置,这里就不再赘述了。

3、在 Microsoft Windows 上安装

笔者是在win平台使用的,故此文主要记录win平台。

在开始处,选择并运行 Visual Studio 的开发人员命令提示,依次键入以下命令:

> git clone https://github.com/fastlib/fCWT.git > cd fCWT > mkdir -p build > cd build > cmake -G "Visual Studio 17 2022" .. %根据自己的VS版本确定% > cmake --build .

一个 Visual Studio .SLN 文件现已在 build-folder 中创建。此处我的目录为:“D:\Microsoft\Visual Studio\2022\Community\fCWT\build”

此项目包括多个生成目标。要构建 fCWT 的共享/静态库,请构建“fCWT”目标。若要运行示例代码,请将“fCWT_example”目标设置为启动项目,并将代码设置为“release”。

要安装 fCWT,请在 build-folder 中运行提升的命令提示符(即具有管理员权限的命令提示符),然后键入:

> cmake -P cmake_install.cmake

要使已安装的 DLL 可用于依赖于它的任何应用程序,应指向创建的 fcwt.dll:

在 %SYSTEMROOT%\System32 中,用于 64 位主机上的 64 位 DLL(或 32 位主机上的 32 位 DLL);在 %SYSTEMROOT%\SysWOW64 中,用于 64 位主机上的 32 位 DLL。 4、配置项目

vs项目配置说明:

笔者的项目中单独建立了bin、include、lib、code等文件夹,所以此处先给出一般的配置方法。

选中VS项目,右键选择属性进行配置。bin对应常规下的输出目录和调试下的工作目录,include对应C/C++的附加包含目录,lib对应链接器的附加库目录。lib目录设置好后,还需要在链接器——》输入的附加依赖项里添加你引用的lib名称。

现在打开步骤3的项目,并开始构建操作,接着在复制以下文件:

“.\fCWT\src\fcwt”中的fcwt.cpp、fcwt.h“.\fCWT\libs”中的fftw3.h、fftw3f.dll、fftw3f.lib(如果先前项目已配置fftw库,这步可省略)“.\fCWT\build\Release”中的fCWT.dll、fCWT.lib接着按照一般的配置方法将其配置到项目中即可。 5、检验配置

运行以下代码,检验是否配置项目成功。

#include #include #include #include int main(int argc, char * argv[]) { int n = 1000; //signal length const int fs = 1000; //sampling frequency float twopi = 2.0*3.1415; //3000 frequencies spread logartihmically between 1 and 32 Hz const float f0 = 0.1; const float f1 = 20; const int fn = 200; //Define number of threads for multithreaded use const int nthreads = 8; //input: n real numbers std::vector sig(n); //input: n complex numbers std::vector sigc(n); //output: n x scales x 2 (complex numbers consist of two parts) std::vector tfm(n*fn); //initialize with 1 Hz cosine wave for(auto& el : sig) { el = cos(twopi*((float)(&el - &sig[0])/(float)fs)); } //initialize with 1 Hz cosine wave for(auto& el : sigc) { el = complex(cos(twopi*((float)(&el - &sigc[0])/(float)fs)), 0.0f); } //Start timing auto start = chrono::high_resolution_clock::now(); //Create a wavelet object Wavelet *wavelet; //Initialize a Morlet wavelet having sigma=1.0; Morlet morl(1.0f); wavelet = &morl; //Other wavelets are also possible //DOG dog(int order); //Paul paul(int order); //Create the continuous wavelet transform object //constructor(wavelet, nthreads, optplan) // //Arguments //wavelet - pointer to wavelet object //nthreads - number of threads to use //optplan - use FFTW optimization plans if true FCWT fcwt(wavelet, nthreads, true, false); //Generate frequencies //constructor(wavelet, dist, fs, f0, f1, fn) // //Arguments //wavelet - pointer to wavelet object //dist - FCWT_LOGSCALES | FCWT_LINSCALES for logarithmic or linear distribution of scales across frequency range //fs - sample frequency //f0 - beginning of frequency range //f1 - end of frequency range //fn - number of wavelets to generate across frequency range Scales scs(wavelet, FCWT_LINFREQS, fs, f0, f1, fn); //Perform a CWT //cwt(input, length, output, scales) // //Arguments: //input - floating pointer to input array //length - integer signal length //output - floating pointer to output array //scales - pointer to scales object fcwt.cwt(&sigc[0], n, &tfm[0], &scs); //End timing auto finish = chrono::high_resolution_clock::now(); //Calculate total duration chrono::duration elapsed = finish - start; cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有