Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.04 KB | None | 0 0
  1. public static double[][] get_accumulation
  2.         (
  3.             string path, // путь к файлу
  4.             List<int> frequencies, // список эталонных частот
  5.             int sensor_id, // порядковый номер датчика
  6.             int duration, // длительность эпохи
  7.             int sampling_freq, // частота дискретизации
  8.             int accum_count // сколько раз накапливаем сигнал
  9.         )
  10.         {
  11.             duration *= sampling_freq; // для случая, если измеряем длительность в секундах, если в отсчетах, не нужно
  12.  
  13.             double[][] result = new double[frequencies.Count][];
  14.             for (int i = 0; i < frequencies.Count; i++) result[i] = new double[duration];
  15.  
  16.             int index = Array.FindIndex(File.ReadLines(path)
  17.                 .Skip(4)
  18.                 .Take(20000)
  19.                 .SelectMany(d => d.Split(' ')
  20.                 .Take(1)
  21.                 .Select(int.Parse))
  22.                 .ToArray(), delegate (int i) { return i == 1; });
  23.  
  24.             int[] vect = File.ReadLines(path)
  25.                 .Skip(4 + index)
  26.                 .SelectMany(d => d.Split(' ')
  27.                 .Skip(sensor_id + 1)
  28.                 .Take(1)
  29.                 .Select(int.Parse))
  30.                 .ToArray();
  31.  
  32.             GC.Collect();
  33.  
  34.             for (int i = 0; i < frequencies.Count; i++)
  35.             {
  36.                 int stimulation_period = sampling_freq / frequencies[i];
  37.  
  38.                 for (int ii = 0; ii < accum_count; ii++)
  39.                 {
  40.                     for (int iii = 0; iii < duration; iii++)
  41.                     {
  42.                         result[i][iii] += vect[ii * stimulation_period + iii];
  43.                     }
  44.                 }
  45.  
  46.                 for (int ii = 0; ii < duration; ii++)
  47.                 {
  48.                     result[i][ii] /= accum_count;
  49.                 }
  50.  
  51.             }
  52.  
  53.             return result;
  54.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement