标签: fftw

如何在FFTW库中实现逆实数FFT

我正在尝试使用FFT进行一些过滤.我正在使用r2r_1d计划,我不知道如何进行逆变换...

    void PerformFiltering(double* data, int n)
    {
                    /* FFT */
        double* spectrum = new double[n];

        fftw_plan plan;

        plan = fftw_plan_r2r_1d(n, data, spectrum, FFTW_REDFT00, FFTW_ESTIMATE);

        fftw_execute(plan); // signal to spectrum
        fftw_destroy_plan(plan); 


                    /* some filtering here */


                    /* Inverse FFT */
        plan = fftw_plan_r2r_1d(n, spectrum, data, FFTW_REDFT00, FFTW_ESTIMATE);
        fftw_execute(plan); // spectrum to signal (inverse FFT)
        fftw_destroy_plan(plan);

}
Run Code Online (Sandbox Code Playgroud)

我做的所有事情都正确吗?我很困惑,因为在FFTW复数DFT中你可以用这样的标志设置变换方向:
p = fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_ESTIMATE);

p = fftw_plan_dft_1d(N,in,out,FFTW_BACKWARD,FFTW_ESTIMATE);

c c++ fft inverse fftw

5
推荐指数
1
解决办法
4454
查看次数

归一化FFT数据(FFTW)

使用FFTW我一直在计算归一化.wav文件数据的FFT.然而,我对如何归一化FFT输出感到困惑.我一直在使用这个对我来说很明显的方法,它只是除以最高的FFT幅度.我已经看到除以1/N和N/2,但是(假设N = FFT大小).这些如何作为标准化因素起作用?在我看来,这些因素与实际数据之间没有直观关系 - 所以我错过了什么?

非常感谢您提供任何帮助.

audio signal-processing fft wav fftw

5
推荐指数
1
解决办法
5194
查看次数

用C中的fftw.h计算fft和ifft

大家好我正在使用fftw C库来计算嵌入式系统上某些信号处理应用的频谱.但是,在我的项目中,我遇到了轻微的阻碍.

下面是我编写的一个简单程序,以确保我正确实现fftw函数.基本上我想计算12个数字序列的fft,然后做ifft并再次获得相同的数字序列.如果你安装了fftw3和gcc,那么如果用以下代码编译,这个程序应该可行:

gcc -g -lfftw3 -lm fftw_test.c -o fftw_test
Run Code Online (Sandbox Code Playgroud)

目前我的fft长度与输入数组的大小相同.

#include <stdio.h>
#include <stdlib.h>
#include <sndfile.h>
#include <stdint.h>
#include <math.h>
#include <fftw3.h>

int main(void)
{
double array[] = {0.1, 0.6, 0.1, 0.4, 0.5, 0, 0.8, 0.7, 0.8, 0.6, 0.1,0};
//double array2[] = {1, 6, 1, 4, 5, 0, 8, 7, 8, 6, 1,0};
double *out;
double *err;
int i,size = 12;

fftw_complex *out_cpx;

fftw_plan fft;
fftw_plan ifft;
out_cpx = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*size);
out = (double *) malloc(size*sizeof(double));
err = (double …
Run Code Online (Sandbox Code Playgroud)

c signal-processing fft fftw

5
推荐指数
1
解决办法
1万
查看次数

将FFTW链接到Android NDK应用程序

我目前正在编写一个类型分类应用程序作为我在计算机工程的最后一年项目.我最初在C中编写了特征提取代码(实现FFTW),现在我需要通过NDK在Android上实现它.

这是我的第一个NDK项目,所以我仍然掌握了一些东西,但我根据本指南编译了适用于Android的FFTW3库.我没有做最后一步,因为我认为这不是我需要的.

我的问题是,在编译步骤之后,如何使用调用它的主NDK应用程序中的库?我只是将LOCAL_STATIC_LIBRARIES设置为我刚刚编译的libfftw3.a,在Application.mk中通常做一切吗?然后我不需要像往常那样拥有任何-lfftw3链接器标志?

android static-libraries fftw android-ndk

5
推荐指数
1
解决办法
4554
查看次数

FFTW - 计算真实的2D FFT,特殊要求

我正在使用FFTW3来计算c ++中的2D实数FFT.我已阅读手册但有一些问题.来自手册:http://www.fftw.org/fftw3_doc/One_002dDimensional-DFTs-of-Real-Data.html#One_002dDimensional-DFTs-of-Real-Data

为了换取这些速度和空间优势,用户牺牲了FFTW复杂变换的一些简单性.首先,输入和输出数组具有不同的大小和类型:输入是n个实数,而输出是n/2 + 1个复数(非冗余输出); 这也需要对输入阵列进行轻微的"填充"以进行就地变换.其次,默认情况下,逆变换(复数到实数)具有覆盖其输入数组的副作用.这些不便都不会给用户带来严重问题,但重要的是要了解它们.

  1. 我知道我需要将输入的2D矩阵转换为行级1D向量.但是输出是什么样的?n/2 + 1数字是什么意思?换句话说,如何重新排序输出以获得2D矩阵?

  2. 具体来说,我需要做些什么来创建这个"填充"?

c++ fft fftw

5
推荐指数
1
解决办法
4100
查看次数

如何在ubuntu 12.04中安装R的fftw3包?

我试图通过R控制台安装fftw3包

>install.packages("fftw")
Run Code Online (Sandbox Code Playgroud)

在此命令之后,它要求选择镜面镜.我选择了镜面镜,然后发生以下错误:

Loading Tcl/Tk interface ... done
Warning: unable to access index for repository http://ftp.iitm.ac.in/cran/src/contrib
Warning messages:
1: In open.connection(con, "r") :
unable to connect to 'cran.r-project.org' on port 80.
2: In getDependencies(pkgs, dependencies, available, lib) :
package ‘fftw’ is not available (for R version 2.14.1)
Run Code Online (Sandbox Code Playgroud)

当我尝试fftw3然后发生以下错误:

> install.packages("fftw3")
Installing package(s) into ‘/root/R/x86_64-pc-linux-gnu-library/2.14’
(as ‘lib’ is unspecified)
Warning: unable to access index for repository http://ftp.iitm.ac.in/cran/src/contrib
Warning message:
In getDependencies(pkgs, dependencies, available, lib) :
package ‘fftw3’ is not available (for …
Run Code Online (Sandbox Code Playgroud)

r fftw ubuntu-12.04

5
推荐指数
2
解决办法
2万
查看次数

仅在发布版本中发生致命错误C1047

我的项目使用Visual Studio 2012,我使用的是libfftw-3.3.lib来自他们的页面.当我在调试中构建我的项目时,它链接和编译就好了,我得到了一个有效的应用程序.当我将其设置为释放模式时,链接器会给我以下错误:

2>LINK : fatal error C1047: The object or library file '../IncludeLibs/libfftw-3.3-x86.lib' was created with an older compiler than other objects; rebuild old objects and libraries
2>LINK : fatal error LNK1257: code generation failed
Run Code Online (Sandbox Code Playgroud)

当我设置我的项目以输出.lib时,即使在发布模式下,它也可以,但不是.dll或.exe

有什么想法,或者我能做些什么来解决这个问题?

编辑:我的链接器设置,调试:

/OUT:"G:\GlukoseScanner\GlucoseScanner\Debug\MachineLearning.exe" /MANIFEST /NXCOMPAT /PDB:"G:\GlukoseScanner\GlucoseScanner\Debug\MachineLearning.pdb" /DYNAMICBASE "../debug/GlucoseDLL.lib" "shlwapi.lib" "../PicoScope/ps5000a.lib" "../C/cbw32.lib" "../DSO2250_SDK/Lib/SDK2250DLL.lib" "../IncludeLibs/libfftw-3.3-x86.lib" "../IncludeLibs/libfftwf-3.3-x86.lib" "mlpack.lib" "winmm.lib" "opengl32.lib" "glu32.lib" "..\..\armadillo-4.400.1\build\Release\armadillo.lib" "..\..\armadillo-4.400.1\examples\lib_win32\libblas.lib" "..\..\armadillo-4.400.1\examples\lib_win32\liblapack.lib" "..\libxml2\libxml2-2.7.8.win32\lib\libxml2.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /INCREMENTAL /PGD:"G:\GlukoseScanner\GlucoseScanner\Debug\MachineLearning.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\MachineLearning.exe.intermediate.manifest" /ERRORREPORT:PROMPT …
Run Code Online (Sandbox Code Playgroud)

c++ linker fftw visual-studio-2012

5
推荐指数
1
解决办法
7328
查看次数

configure:警告:找不到FFTW3F库.将使用较慢的FFTPACK库

我在我的LFS上编译八度 - 从头开始​​ - Linux系统.

在配置八度时,我收到一条警告:

configure:警告:找不到FFTW3F库.将使用较慢的FFTPACK库.

我编译并安装了FFTW 3.3.4,然后重新配置了octave,但是我仍然收到以下消息:

检查fftw3.h的可用性......是的

检查fftw3.h的存在......是的

检查fftw3.h ...是的

在-lfftw3中检查fftw_plan_dft_1d ...是的

检查fftw3.h ...(缓存)是的

在-l fftw3f中检查fftwf _plan_dft_1d ...没有

configure:警告:找不到FFTW3F库.将使用较慢的FFTPACK库.

我注意到FFTW 3.3.4安装libfftw3.so但不是libfftw3f.so,这就是为什么即使安装了FFTW 3.3.4之后,八度音也找不到FFTW3F库.现在,我想知道如何安装libfftw3f.so.

octave fftw

5
推荐指数
1
解决办法
4969
查看次数

用FFT重复计算函数导数时的数值误差

我编写了一个C程序,它使用FFTW来计算函数的导数(重复).我正在测试简单的sin(x)函数.每个步骤计算前一步骤的答案的导数.我观察到错误构建,并且在20步之后,数字是纯垃圾.附件是样本输出.答案(在特定点)应该是0,+ 1或-1,但它不是.

---- out ----  data '(0) = 1.000000 -0.000000 
---- out ----  data '(1) = 0.000000 -0.000000 
---- out ----  data '(2) = -1.000000 0.000000 
---- out ----  data '(3) = -0.000000 0.000000 
---- out ----  data '(4) = 1.000000 -0.000000 
---- out ----  data '(5) = 0.000000 -0.000000 
---- out ----  data '(6) = -1.000000 0.000000 
---- out ----  data '(7) = -0.000000 0.000000 
---- out ----  data '(8) = 1.000000 -0.000000 
---- out ----  data '(9) = …
Run Code Online (Sandbox Code Playgroud)

c fft rounding fftw

5
推荐指数
1
解决办法
144
查看次数

使用fftw与列主要方形矩阵(犰狳库)

我发现armadillo C++库非常便于矩阵计算.如何使用FFTW库对犰狳矩阵执行二维FFT?

据我所知,armadillo矩阵类以列主要顺序存储数据.如何将其传递给FFTW?fftw 3.3.3文档说

如果你有一个以列主要顺序存储的数组,并希望使用FFTW对其进行转换,那么很容易做到.创建计划时,只需以相反的顺序将数组的维度传递给计划程序.例如,如果您的数组是按列大顺序排列的三级N x M x L矩阵,则应该将数组的维度传递为L x M x N矩阵(从它的角度来看,它是FFTW)

鉴于创建计划的语法如下,我无法完全理解这意味着什么.

fftw_plan fftw_plan_dft_2d(int n0, int n1,
                            fftw_complex *in, fftw_complex *out,
                            int sign, unsigned flags);
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

c++ fft matrix fftw armadillo

4
推荐指数
1
解决办法
1385
查看次数