标签: fft

图像的FFT

我有一个关于fftw的任务,我正在尝试编写一个小程序来创建一个fft的图像.我正在使用CImg来读写图像.但我得到的只是一个带有一个白点的黑暗图像:(

我很可能以错误的方式做这件事,如果有人能解释如何做到这一点,我将不胜感激.我不需要代码,我只需要知道什么是正确的方法.

这是我的代码:

CImg<double> input("test3.bmp");
CImg<double> image_fft(input, false);

unsigned int nx = input.dimx(), ny = input.dimy();
size_t align = sizeof(Complex);

array2<Complex> in (nx, ny, align);

fft2d Forward(-1, in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        in(i,j) = input(i,j);
    }
}

Forward.fft(in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        image_fft(i,j,0) = image_fft(i,j,1) = image_fft(i,j,2) = …
Run Code Online (Sandbox Code Playgroud)

c++ fft fftw cimg

2
推荐指数
1
解决办法
2812
查看次数

为什么Windows上的FFTW比Linux更快?

我使用fftw库(fftw3.a,fftw3.lib)在Linux和Windows中编写了两个相同的程序,并计算fftwf_execute(m_wfpFFTplan)语句的持续时间(16-fft).

10000次运行:

  • 在Linux上:平均时间是0.9
  • 在Windows上:平均时间为0.12

我很困惑为什么在Windows上这比在Linux上快9倍.

处理器:Intel(R)Core(TM)i7 CPU 870 @ 2.93GHz

每个操作系统(Windows XP 32位和Linux OpenSUSE 11.4 32位)都安装在同一台计算机上.

我从互联网上下载了fftw.lib(适用于Windows)并且不知道配置.一旦我使用此配置构建FFTW:

/configure --enable-float  --enable-threads --with-combined-threads  --disable-fortran  --with-slow-timer  --enable-sse  --enable-sse2  --enable-avx   
Run Code Online (Sandbox Code Playgroud)

在Linux中,它产生的lib比默认配置(0.4 ms)快四倍.

linux windows performance fft fftw

2
推荐指数
1
解决办法
2233
查看次数

如何归一化1维FFT输出

我正在使用FFTW来分析高程数据,但我开始只是通过查看一个简单的1D fft来确保我的一切正常.它似乎工作除了归一化(规模)因素,我无法从文档中找出,主要是因为我的数字非常大.例如,当我试图只取一个余弦波的fft时

1 6.12323e-017 -1 -1.83697e-016 1 3.06162e-016 -1 -4.28626e-016 1 5.51091e-016 -1      -2.44991e-015 etc...
Run Code Online (Sandbox Code Playgroud)

我得到了转变

4.33743e-013 1.06036e+267 3.25205e+265 1.05963e+267 6.49675e+265 1.05743e+267 9.72679e+265 1.05379e+267 1.29349e+266    1.04869e+267 1.61138e+266 1.04216e+267 etc...
Run Code Online (Sandbox Code Playgroud)

例如,可笑的巨大数字.

任何帮助,将不胜感激.

c++ fft fftw

2
推荐指数
1
解决办法
580
查看次数

你能用傅立叶变换计算原始信号的幅度/功率吗?

在用scipy.fftpack.fft()对一些样本进行离散傅里叶变换并绘制这些样本的大小后,我注意到它不等于原始信号的幅度.这两者之间有关系吗?

有没有办法从傅里叶系数计算原始信号的幅度而不反转变换?

这是一个振幅为7.0,fft振幅为3.5的正弦波示例

from numpy import sin, linspace, pi
from pylab import plot, show, title, xlabel, ylabel, subplot
from scipy import fft, arange

def plotSpectrum(y,Fs):
 """
 Plots a Single-Sided Amplitude Spectrum of y(t)
 """
 n = len(y) # length of the signal
 k = arange(n)
 T = n/Fs
 frq = k/T # two sides frequency range
 frq = frq[range(n/2)] # one side frequency range

 Y = fft(y)/n # fft computing and normalization
 Y = Y[range(n/2)]

 plot(frq,abs(Y),'r') # plotting the spectrum …
Run Code Online (Sandbox Code Playgroud)

python signal-processing numpy fft scipy

2
推荐指数
1
解决办法
3688
查看次数

如何匹配相同数据集的lomb-scargle和FFT图?

我正在做一些工作,比较一段时间内某些气体浓度的插值fft,其中不均匀采样,使用相同数据的lomb-scargle周期图.我正在使用scipy的fft函数来计算傅里叶变换,然后将其模数平方以得到我认为的功率谱密度,以十亿分之一(ppb)平方为单位.

我可以得到lomb-scargle图几乎与FFT的精确模式相匹配,但从不相同的幅度,FFT功率谱密度总是更高,即使我认为lomb-scargle功率是功率谱密度.现在我正在使用的lomb代码:http://www.astropython.org/snippet/2010/9/Fast-Lomb-Scargle-algorithm,将数据集标准化,取消平均值并除以数据方差的2倍,因此,我以相同的方式对FFT数据进行了归一化,但幅度仍然不匹配.

因此我做了一些更多的研究,发现标准化的坟墓疤痕能力可以无法完成,因此我不能将这些情节匹配.这引出了我的两个问题:

  1. 什么单位(如果有的话)是标准化的lim-scargle perioogram的功率谱密度?

  2. 在幅度和模式方面,我如何将我的fft情节与我的lomb-scargle情节相匹配?

谢谢.

python psd fft units-of-measurement

2
推荐指数
1
解决办法
2190
查看次数

CUFFT:当输入是一个音调阵列时,如何计算fft

我试图找到一个动态分配的数组的fft.使用输入数组从主机复制到设备cudaMemcpy2D.然后获取fft(cufftExecR2C)并将结果从设备复制回主机.

所以我最初的问题是如何在fft中使用音高信息.然后我在这里找到了答案 - CUFFT:如何计算投手指针的fft?

但不幸的是它不起作用.我得到的结果是垃圾值.以下是我的代码.

#define NRANK 2
#define BATCH 10

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <cufft.h>
#include <stdio.h> 
#include <iomanip> 
#include <iostream>
#include <vector>

using namespace std;

const size_t NX = 4;
const size_t NY = 6;

int main()
    { 
    // Input array (static) - host side 
    float h_in_data_static[NX][NY] ={ 
        {0.7943 ,   0.6020 ,   0.7482  ,  0.9133  ,  0.9961 , 0.9261},
        {0.3112 ,   0.2630 ,   0.4505  ,  0.1524  ,  0.0782 ,  0.1782},
        {0.5285 ,   0.6541 ,   0.0838 …
Run Code Online (Sandbox Code Playgroud)

c++ cuda fft dynamic-arrays cufft

2
推荐指数
1
解决办法
1362
查看次数

2D循环卷积Vs卷积FFT [Matlab/Octave/Python]

我试图理解FTT和卷积(互相关)理论,因此我创建了以下代码来理解它.代码是Matlab/Octave,但我也可以在Python中完成.

在1D:

 x = [5 6 8 2 5]; 
 y = [6 -1 3 5 1];
 x1 = [x zeros(1,4)];
 y1 = [y zeros(1,4)];
 c1 = ifft(fft(x1).*fft(y1));
 c2 = conv(x,y);

 c1 =   30   31   57   47   87   47   33   27    5 
 c2 =   30   31   57   47   87   47   33   27    5
Run Code Online (Sandbox Code Playgroud)

在2D中:

 X=[1 2 3;4 5 6; 7 8 9]
 y=[-1 1];
 conv1 = conv2(x,y)
 conv1 =
        24    53    89    29    21
        96   140   197    65    42
       168   227 …
Run Code Online (Sandbox Code Playgroud)

python matlab signal-processing fft convolution

2
推荐指数
1
解决办法
3892
查看次数

如何将一幅图像的相位与不同图像的幅度相结合?

我有两个图像IJ,我带X=fft(I)Y=fft(J)有傅里叶变换,然后我分别采取"X"和"Y"的相位和幅度.

问题是我需要结合相位X和幅度Y来形成一个新的图像,并ifft用来重建这个新的图像,如何在MATLAB中做到这一点?

matlab image fft image-processing

2
推荐指数
1
解决办法
6587
查看次数

OpenCV/C++ - 将图像转换为双向量,用于FFT(快速傅立叶变换)

我正在尝试计算图像的FFT(快速傅立叶变换)以使用频率来确定图像是否模糊.

我需要使用我们的代码库中已有的自定义FFT算法.FFT算法需要标准的1D矢量doublesints.我需要一种方法来读取图像,然后将其转换为双精度矢量,以便我可以计算图像的FFT.

我尝试过以下方法:

cv::Mat inputImage = cv::imread("testImage.png");
cv::Mat fImage; 

inputImage.convertTo(fImage, CV_32F); 
std::vector<double> actualImage = fImage.clone();
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

OpenCV错误:copyTo中的断言失败(channels()== CV_MAT_CN(dtype)),

有关如何实现这一目标的任何想法?

c++ opencv fft image-processing

2
推荐指数
1
解决办法
788
查看次数

为什么我的NAudio FFT结果与MATLAB相差4倍?

以下C#NAudio代码与MATLAB产生的结果相差4倍。为什么会发生这种情况,其中之一是不正确的吗?

Complex[] tmp = new Complex[4];
tmp[0].X = 1.0f;
tmp[1].X = 0.5f;
tmp[2].X = 1.0f;
tmp[3].X = 0.25f;
tmp[0].Y = 0.0f;
tmp[1].Y = 0.0f;
tmp[2].Y = 0.0f;
tmp[3].Y = 0.0f;
FastFourierTransform.FFT(true, 2, tmp);
Run Code Online (Sandbox Code Playgroud)

NAUDIO输出:

0.6875 + 0.0000i
0.0000 - 0.0625i
0.3125 + 0.0000i
0.0000 + 0.0625i
Run Code Online (Sandbox Code Playgroud)

MATLAB输出:

2.7500 + 0.0000i
0.0000 - 0.2500i
1.2500 + 0.0000i
0.0000 + 0.2500i
Run Code Online (Sandbox Code Playgroud)

c# fft naudio

2
推荐指数
1
解决办法
80
查看次数