在 F# 中使用 mathdotnet 进行傅立叶变换

Fourier transformation with mathdotnet in F#

我正在尝试使用 FFT 算法的 Math.NET 数字实现,但我一定是做错了什么,因为输出总是单位

设置如下:

open MathNet.Numerics
open MathNet.Numerics.Statistics
open MathNet.Numerics.IntegralTransforms
let rnd = new Random()
let rnddata = Array.init 100 (fun u -> rnd.NextDouble())
let x = rnddata |> Array.Parallel.map (fun d -> MathNet.Numerics.complex.Create(d, 0.0) )

然后当我 运行 这个:

let tt = MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward(x, FourierOptions.Default)

我收到下面的空输出?

val tt : unit = ()

知道为什么吗?

我认为 Fourier.BluesteinForward 方法将结果存储在输入数组中(通过覆盖原来存在的内容)。

如果在 运行 转换后不需要输入,您可以只使用 x 并读取结果(这节省了一些内存复制,这就是为什么 Math.NET默认情况下)。否则,您可以克隆数组并将其包装在更实用的样式代码中,如下所示:

let bluesteinForward input = 
  let output = Array.copy input
  MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward
    (output, FourierOptions.Default)
  output