Ejemplo n.º 1
0
        /// <summary>
        /// Метод моделирования генератора по двухосцилляторной схеме
        /// </summary>
        /// <param name="length">Длина выходной последовательности</param>
        /// <returns>Массив битов, выданный генератором</returns>
        public BitArray IntelOscillate(int length)
        {
            //double workTime = length * time * 2;
            Gauss gen = new Gauss(time, sigma);
            int n = length;
            double[] ar = gen.GenArray(n);
            double[] takts = new double[n];
            takts[0] = ar[0];
            for (int i = 1; i < n; ++i)
            {
                takts[i] = takts[i - 1] + ar[i];
            }

            double now;
            int count = length;
            bool[] bits = new bool[count];
            int pos;

            for (int j = 0; j < count; ++j)
            {
                now = takts[j];
                pos = (int)(now / freq) + 1;
                if (now <= freq * pos - freq / 2)
                    bits[j] = false;
                else
                    bits[j] = true;
            }
            BitArray osc = new BitArray(bits);
            return osc;
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Метод моделирования процесса осциллирования
 /// </summary>        
 /// <param name="length">Длина выходной последовательности</param>
 /// <returns>Массив битов, выданный осциллятором</returns>
 public BitArray Oscilate(int length)
 {
     double workTime = length * freq;
     Gauss gen = new Gauss(time, sigma);
     int n = (int)(workTime / time) * 2;   //берётся с запасом, в два раза больше
     if (n == 0)
         throw new Exception("Невозможно смоделировать последовательность с заданными параметрами");
     double[] ar = gen.GenArray(n);
     double[] takts = new double[n + 1];
     takts[0] = 0;
     for (int i = 1; i < takts.Length; ++i)
     {
         takts[i] = takts[i - 1] + ar[i - 1];
         if (takts[i] > workTime)
         {
             Array.Resize(ref takts, i + 1);
             break;
         }
     }
     double now = freq;                      //частота считываний            
     int count = length;
     bool[] bits = new bool[count];
     int pos, where = 1;
     for (int j = 0; j < count; ++j)
     {
         pos = FindRead(now, takts, ref where);
         if (now <= takts[pos] - (takts[pos] - takts[pos - 1]) / 2)
             bits[j] = false;
         else
             bits[j] = true;
         now += freq;
     }
     BitArray osc = new BitArray(bits);
     return osc;
 }