【发布时间】:2023-03-10 01:55:01
【问题描述】:
高斯的傅里叶变换是高斯的,但出于某种原因,来自 GSL(GNU 科学库)的快速傅里叶变换库根本不提供这个。我已经包含了用于生成(尝试的)傅里叶变换的代码,以及紧随其后的两个相关图。 能帮我找出我做错了什么吗?
#include <gsl/gsl_fft_complex.h>
#include <fstream>
#define REAL(z,i) ((z)[2*(i)]) //complex arrays stored as
#define IMAG(z,i) ((z)[2*(i)+1])
using namespace std;
int main(){
double N = pow(2,9); //power of 2 for Cooley-Tukey algorithm
int n = (int) N;
double f[2*n];
double dx = 10./N;
double x = -5.;
ofstream fileo("out.txt");
for (int i=0; i<n; ++i){ //initialize gaussian
REAL(f,i)=exp(-0.5*x*x);
IMAG(f,i)=0.;
x+=dx;
}
gsl_fft_complex_radix2_forward(f, 1, n); //Fourier transform
for (int i=0; i<n; ++i){
fileo<<i<<" "<<REAL(f,i)<<'\n'; //plot frequency distribution
}
fileo.close();
}
编辑:已解决!
正如@roadrunner66 的回答中所述,原始高斯的宽度非常宽,导致傅里叶空间中的高斯窄得离谱。此外,我的情节看起来很时髦,因为正如@n.m(现已删除)评论中所建议的那样,傅里叶变换返回 DFT,其投影到索引为 k=0,1,...,N/2,- N/2,...-2,-1.
【问题讨论】: