2017-05-23 16 views
-1

나는 각 점에 x 및 y 좌표를 갖는 점 목록에서 FFT 필터를 사용하려고합니다. 반환해야하는 것은 list<Complex>입니다.System.ArgumentException : 주어진 배열이 너무 작습니다

(12 점을 포함하는 목록) 아래의 코드를 테스트 할 때

내가 얻을이 오류 실제로

Math.net MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal(buffer, buffer.Length, FourierOptions.Matlab);을 사용하고

System.ArgumentException : The given array is too small. It must be at least 14 long. at MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal(Double[] data, Int32 n, FourierOptions options)

이 내 클래스의 코드

입니다
 // inputs is a List of Point(List<Point> inputs) 
     var buffer=inputs.Select(p => (p.Y)).ToArray(); 
     try 
     { 
      MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal(buffer, buffer.Length, FourierOptions.Matlab); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
      throw; 
     } 

어떻게 해결할 수 있습니까? 고마워요 :)

+5

"그것은 최소 14 이상이어야합니다." 및 "12 점을 포함한 목록에"문제를 설명하는 것 ... 여기 당신이 찾고있는 어떤 유형의 도움이됩니까? –

+0

나는 14 포인트의리스트를 가지고 이미 시도한 바있다. System.ArgumentException : 주어진 배열이 너무 작아서 적어도 16이어야한다. MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal (Double [] data , Int32 n, FourierOptions 옵션) – AMI

답변

2

훌륭한 설명서에 따르면 버퍼는 사용자가 가지고있는 것보다 2 항목 이상 길어야합니다.

https://numerics.mathdotnet.com/api/MathNet.Numerics.IntegralTransforms/Fourier.htm#ForwardReal

공극 ForwardReal (더블 [] 데이터, N FourierOptions 옵션 INT)

...을 데이터 배열은 N + 2 (N이 짝수 인 경우) 또는 N 있어야 + 1 (N이 홀수 인 경우)은 그러한 압축 된 스펙트럼을 지원하기 위해 길다. 내가 GitHub의에 code 을 읽을 때

1

는 아이디어는 훨씬 명확하다. 그래서 내 코드의 정류가 ,

 var inputsCount = inputs.Count; 
     var buffer =new double[inputsCount % 2 == 0 ? inputsCount + 2 : inputsCount + 1]; 
     int j = 0; 

     foreach (var point in inputs) 
     { 
      buffer[j] = point.Y; 
      j++; 
     } 

     try 
     { 
      MathNet.Numerics.IntegralTransforms.Fourier.ForwardReal(buffer, inputsCount, FourierOptions.Matlab); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
      throw; 
     }