C语言 真实的阵列经过傅里叶变换后的空间频率域是什么样子?

iklwldmw  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(108)

我有一个数组,其中有N个纯真实的点,代表一个空间函数:
[f_0,f_1,f_2,…,f_{N-1}]
函数值以距离dx间隔开。
因此,奈奎斯特频率由f_N = l/(2*dx)给出。
我使用FFTW 2计算C中阵列的傅里叶变换,其中函数为纯1d真实的输入rfftw。这导致只有N/2个独立的复数,它们存储在“半复数数组”中:
[r_0,r_1,…r_{N/2},i_{N+1}/2-1,...,i_2,i_1],其中r表示真实的,i表示虚部。
现在我想知道这个阵列的频域是什么样子的。r_{N/2}是f_N或(f_N/)2处的值吗?
我已经有了代码,它似乎工作,我只是不知道如何解释频率轴。

eh57zj3b

eh57zj3b1#

你的符号混淆了。如果您的输入是

[f_0, f_1, f_2, …, f_{N-1}]

字符串
那么f_n是位置n处的输入值,它本身不是位置。输入在整数索引n = 0 … N-1处。因此,询问“f_N处的值”的问题没有意义。
FFTW半复数输出为:

[r_0, r_1, r_2, …, r_{N/2}, i_{(n+1)/2-1}, …, i_2, i_1]


这里,r_n + i * i_n是位置n处的值。频率是整数索引n = 0 … N-1。奈奎斯特频率与N相关,而不是f_N(甚至在输入中没有定义!)。它由N/2.0给出。
如果在输入中假设某个采样dx,使得位置n处的样本具有x = n*dx,则还可以将频率仓转换为物理频率,其中df = 1/(N*dx)。因此,索引n处的频率为n/(N*dx)。要理解的是,频率n/(N*dx)的值等于(n+k*N)/(N*dx)的值,其中k是任何正整数或负整数(从中可以获得许多人期望在傅里叶变换中找到的负频率)。

相关问题