Почему не строится график из семплов в C#?

Пытаюсь перевести код с DELPHI на C#, суть программы в построении спектра из семплов. Оригинальный код

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TeEngine, ExtCtrls, TeeProcs, Chart, Series;
type
  TForm1 = class(TForm)
    Chart1: TChart;
    GroupBox1: TGroupBox;
    filename_label: TLabel;
    num_samples_label: TLabel;
    Edit2: TEdit;
    num_errors_label: TLabel;
    Edit3: TEdit;
    Button1: TButton;
    Edit4: TEdit;
    progress_label: TLabel;
    OpenDialog1: TOpenDialog;
    Series1: TFastLineSeries;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  const
  g_Pi2=Pi*2;
  var
  Form1: TForm1;
  YDPFa : array [1..15000000] of Double;      // про динамические массивы - не слышали, видимо
  g_F: text;   // file handle;
implementation
{$R *.dfm}
Function DPF(NN :integer; OMGDPF :Single): Single;
(*
  NN - количество семплов из файла
*)
var x1, y1, y2, Mi : Single;
Alpha, k, Ni, Li : integer;
A1, A2 : Double;
T: Double;
begin
  A1:=0;
  A2:=0;
  T:=1/44000;
  y1:=g_Pi2/(NN*T);   { Минимальная частота ДПФ }
  y2:=Pi/T;         { Максимальная частота ДПФ }
{ y1>1 период текущей частоты OMGDPF меньше периода оценивания }
  if (NN=0) or (y2<OMGDPF) or (y1=OMGDPF) then
    begin
      DPF:=0;
      Li:=0;
      Mi:=0;
      A1:=0;
      A2:=0;
    end
  else
    if OMGDPF<y1 then
      begin
        Li:=0;
        Mi:=NN;
        For k:=1 to NN do A1:=A1+YDPFa[k];
        A1:=A1/NN;
        result:= ABS(A1);
        A2:=0;
      end
    else
      begin
        Mi:=g_Pi2/(T*OMGDPF);          { Число тактов в периоде текущей частоты }
        Li:=Trunc(NN/Mi);            { число целых периодов текущей частоты в NN измерений }
        Ni:=Trunc(Li*Mi);            { Число тактов ДПФ }
        Alpha:=(NN-Ni) Div 2;
        if Mi>=2 then
          begin
            For k:=1+Alpha to Ni+Alpha do
              begin
                x1:=OMGDPF*T*(k-1-Alpha);
                A1:=A1+YDPFa[k]*cos(x1);
                A2:=A2+YDPFa[k]*sin(x1);
              end;
            if Ni>0 then
              begin
                A1:=A1*2/Ni;
                A2:=A2*2/Ni;
              end;
            result:=Sqrt(SQR(A1)+SQR(A2));
          end
        else
          begin
            result:=0;
            Li:=NN;
            A1:=0;
            A2:=0;
          end;
      end;
end;
procedure Spectr(NN, SCC:integer);
(*
  NN - количество семплов из файла
  SCC - номер канала чарта
*)
var x1,OmgM,Yv,Times : Single;
n, Num1 : integer;
Fx, Tr, BmR : single;
begin
  Num1:=5000;
  BmR:=22000*g_Pi2;  { Максимальная частота ДПФ }
    {  Вывод спектра на график }
  Fx:=BmR/NN;
  x1:=BmR;
  Tr:=(x1-Fx)/Num1;
    { Главный цикл }
  For n:=0 to Num1 do
    begin
      OmgM:=Fx+Tr*n;
      { Вычисление текущего значения cпектра }
      Yv :=DPF(NN, OmgM);
      { Вывод результатлов на дисплей }
      Times:=OmgM/g_Pi2;
      form1.Chart1.series[SCC].addXY(Times,Yv);
      if n mod 100=0 then
        begin
          form1.progress_label.Caption:=form1.progress_label.Caption+'.';
          form1.Refresh;
        end;
    end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var ttt,Line:ShortString;
i,j,k,m,n:integer;
x:single;
ADF : array [0..255] of Char;  // messagebox string buffer
begin
  if  form1.OpenDialog1.Execute then
    begin
      ttt:=form1.OpenDialog1.FileName;
      form1.edit2.Text:=ttt;
      AssignFile(g_F,ttt);
      {$I-}
      Reset(g_F);
      {$I+}
      if IoResult<>0 then
        begin
          StrPCopy(ADF, 'Файл с именем '+form1.OpenDialog1.FileName+' открыть невозможно!!!');
          Application.MessageBox(ADF,'Ошибка чтения файла',0);
          exit;
        end;
      j:=0;
      n:=0;
      while not Eof(g_F) do
        begin
          j:=j+1;
          Readln(g_F, Line);
          for k:=1 to ORD(Line[0]) do if Line[k]=',' then Line[k]:='.';    // зпт на тчк
          val(Line,x,m);
          if m<>0 then        // on error
            begin
              x:=0;
              n:=n+1;
            end;
          YDPFa[j]:=x;    // семплы из файла
        end;
      CloseFile(g_F);
      form1.edit3.Text:=IntToStr(j);
      form1.edit4.Text:=IntToStr(n);
      if j<10 then exit;
      form1.progress_label.Caption:='';
      form1.Chart1.Title.Text.Clear;
      for i:=0 to Chart1.SeriesList.Count-1 do
        begin
          { Очистка графиков, отключение легенд }
          form1.Chart1.Series[i].Clear;
          form1.Chart1.Series[i].ShowInLegend:=false;
        end;
      Spectr(j,0);
    end;
end;
end.

Мой код на C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Udar
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        const double g_Pi2 = Math.PI * 2;

        List<double> YDPFa = new List<double>();

        public double DPF(int NN, double OMGDPF)
        {

            double resultDPF;
            double x1, y1, y2, Mi, T, A1, A2;
            int Alpha, Ni, Li;
            resultDPF = 0;
            A1 = 0;
            A2 = 0;
            T = 1 / 44000;
            y1 = g_Pi2 / (NN * T); /* Минимальная частота ДПФ */
            y2 = Math.PI / T; /* Максимальная частота ДПФ */
            /* y1 > 1 период текущей частоты OMGDPF меньше периода оценивания */
            if ((NN == 0) | (y2 < OMGDPF) | (y1 == OMGDPF))
            {
            Li = 0;
            Mi = 0;
            A1 = 0;
            A2 = 0;
            }
            else if (OMGDPF < y1)
            {
            Li = 0;
            Mi = NN;

            for (int k = 1; k<NN; k++)
            {
                A1 = A1 + YDPFa[k];
            }
            A1 = A1 / NN;
            resultDPF = Math.Abs(A1);
            A2 = 0;
            }
            else
            {
                Mi = g_Pi2 / (T * OMGDPF); //Число тактов в периоде текущей частоты
                Li = (int)Math.Truncate(NN/Mi); //Число целых периодов текущей частоты в NN измерений
                Ni = (int)Math.Truncate(Li * Mi); //Число тактов ДПФ
                Alpha = (NN - Ni) % 2;
                if (Mi>=2)
                {
                    for (int k=1+Alpha; k<Ni+Alpha; k++)
                    {
                    x1 = OMGDPF * T * (k - 1 - Alpha);
                    A1 = A1 + YDPFa[k] * Math.Cos(x1);
                    A2 = A2 + YDPFa[k] * Math.Sin(x1);
                    }
                    if (Ni > 0)
                    {
                    A1 = A1 * 2 / Ni;
                    A2 = A2 * 2 / Ni;
                        resultDPF = Math.Sqrt((A1 * A1) + (A2 * A2));
                    }
                    else
                    {
                        resultDPF = 0;
                        Li = NN;
                        A1 = 0;
                        A2 = 0;
                    }
                }
            }
            return resultDPF;
        }

        public void Spectr(int NN, int SCC)
        {
            double x1, OmgM, Yv, Times;
            int Num1;
            double Fx, Tr, BmR;
            Num1 = 5000;
            BmR = 22000 * g_Pi2;

            /* Вывод спектра на график */
            Fx = BmR / NN;
            x1 = BmR;
            Tr = (x1 - Fx) / Num1;

            /* Главный цикл */

            for (int n = 0; n<Num1; n++)
            {
                OmgM = Fx + Tr * n;
                //Вычисление текущего значения cпектра 
                Yv = DPF(NN, OmgM);
                //Вывод результатлов на дисплей
                Times = OmgM / g_Pi2;
                chart1.Series[SCC].Points.AddXY(Times, Yv);


                if (n % 100 == 0)
                {
                    //form1.Label2.Caption:= form1.Label2.Caption + '.';
                }
            }
        }

        private void textBox1_Click(object sender, EventArgs e)
        {
            string FilePath = string.Empty;

            OpenFileDialog OPF = new OpenFileDialog();
            OPF.Filter = "Файлы txt|*.txt";
            if (OPF.ShowDialog() == DialogResult.OK)
            {
                FilePath = OPF.FileName;
                textBox1.Text = FilePath;
            }

            YDPFa = File.ReadAllLines(FilePath)
            .SelectMany(l => l.Split('\n').Select(double.Parse))
            .ToList();

            Spectr(YDPFa.Count, 0); //Измерений, № графика, № исх.данн., № колонки.Вых.данн. 3 и 4
        }
    }
}

Помогите пожалуйста найти проблему

Содержимое файла с семплами

-1,00091
1,00091
-1,00091
-2,00091
-3,00070
-1,00073
1,00082
-2,00067
-2,00085
-1,00091
-1,00088
-2,00137
-1,00097
-1,00109

Результат программы на DELPHI введите сюда описание изображения

Результат исполнения кода на C# введите сюда описание изображения


Ответы (0 шт):