C# 在C语言中重新映射FFT频率元分布#

C# 在C语言中重新映射FFT频率元分布#,c#,math,fft,C#,Math,Fft,我已经为正在使用的数据集对FFT进行了编码。我的意图是创建结果的瀑布图,但我遇到的问题是,如果我更改输入数据的大小,那么我会得到不同数量的频率箱。目前,我只是使我的输入数据集的大小是需要映射到的像素数的两倍。我试图找出一种方法,将任意大小的数据集的频率容器映射到特定数量的像素。例如,将500个值的数组映射到1250个元素长的数组。如果可以选择在数据映射上执行线性和非线性插值,那就太好了。我可能还需要另一种方法,比如将值映射到300个元素长的数组。我不是数学专业的学生,在这方面我还是个空白。离散傅

我已经为正在使用的数据集对FFT进行了编码。我的意图是创建结果的瀑布图,但我遇到的问题是,如果我更改输入数据的大小,那么我会得到不同数量的频率箱。目前,我只是使我的输入数据集的大小是需要映射到的像素数的两倍。我试图找出一种方法,将任意大小的数据集的频率容器映射到特定数量的像素。例如,将500个值的数组映射到1250个元素长的数组。如果可以选择在数据映射上执行线性和非线性插值,那就太好了。我可能还需要另一种方法,比如将值映射到300个元素长的数组。我不是数学专业的学生,在这方面我还是个空白。

离散傅里叶变换(快速与否)将始终为您提供与输入数组相同大小的输出数组。如果您想放大它,那么您需要考虑使用带有合适窗口的sinc函数。例如,请参见

离散傅里叶变换(快速或不快速)将始终为您提供与输入阵列相同大小的输出阵列。如果您想放大它,那么您需要考虑使用带有合适窗口的sinc函数。例如,请参见

您只需将输入的像素数归零即可。这是通过简单地将零添加到输入中来实现的,以像素为单位使其达到所需的长度。执行FFT时,它将在零填充后的长度处执行,并提供与像素数相同的输出采样数

当对FFT输入进行零点填充时,FFT基本上会自动在频域内插值。退房注意:这实际上并不会在频域中为您提供更多信息(使用此方法不会仅显示新的频率内容),即使频域采样数有所增加。这只是对现有数据进行过采样


我不确定采用另一种方式(下采样)的最佳方式,但我假设这样做的一种方式是只变换所需的前N个样本。这样做可能会丢失数据,但这可能并不重要,具体取决于应用程序。

您需要做的就是将您的输入归零到您想要显示的像素数。这是通过简单地将零添加到输入中来实现的,以像素为单位使其达到所需的长度。执行FFT时,它将在零填充后的长度处执行,并提供与像素数相同的输出采样数

当对FFT输入进行零点填充时,FFT基本上会自动在频域内插值。退房注意:这实际上并不会在频域中为您提供更多信息(使用此方法不会仅显示新的频率内容),即使频域采样数有所增加。这只是对现有数据进行过采样


我不确定采用另一种方式(下采样)的最佳方式,但我假设这样做的一种方式是只变换所需的前N个样本。这样会丢失数据,但这可能并不重要,取决于应用程序。

我想我的问题可能有点不清楚。基本上,我想要得到输出数组,并对其值进行插值,以将其映射到一个不同长度的数组,或者更小,或者更大。如果Lanczos公司的重采样就是这样做的,那我可能有点不知所措。看起来它的思路是正确的,但我不确定如何实现它。@Davido,它就是这样做的。如果你环顾四周,我希望你能找到一个实现它的库。我想我的问题可能有点不清楚。基本上,我想要得到输出数组,并对其值进行插值,以将其映射到一个不同长度的数组,或者更小,或者更大。如果Lanczos公司的重采样就是这样做的,那我可能有点不知所措。看起来它的思路是正确的,但我不确定如何实现它。@Davido,它就是这样做的。如果你环顾四周,我希望你能找到一个实现它的库。降采样最好在FFT之后完成,降低高频。这是一个增加数据点数量的好建议。我几乎有办法完成下采样。下采样最好在FFT之后完成,降低高频。这是增加数据点数量的一个好建议。我几乎有办法把样品做好。