使用F#中的mathdotnet进行傅里叶变换

时间:2015-03-29 15:10:12

标签: f# f#-interactive f#-3.0 f#-data mathdotnet

我正在尝试使用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 = ()

任何想法为什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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