Exemple #1
0
      override public void Draw(Graphics g, DataBlock db)
      {
         Rectangle r = new Rectangle();

         r = m_Bounds;

         if (f == null)
         {
            f = new fft(1024);
         }

         if (db.m_result != DataBlock.RESULT.OK)
         {
             pp.X = 0;
             pp.Y = 0;
             g.DrawString(string.Format("Waiting for a chunk of data to analyze"), parent.Font, Brushes.White, pp);
             return;
         }

         if (db.GetChannelLength() < f.GetNumOfSamples())
         {
            pp.X = 0;
            pp.Y = 0;
            g.DrawString(string.Format("FFT needs at least 1024 samples to work, got only {0}, try increasing the measurement time",db.GetChannelLength()) , parent.Font, Brushes.White, pp);
            return;
         }

         for (int i = 0; i < f.GetNumOfSamples(); i++)
         {
             f.x[i] = db.GetVoltage(0, i);
             f.y[i] = 0;
         }
         f.FFT(0);

         int maxFreq = db.m_sampleRate / 2;
         int minFreq = 0;

         //margin at the bottom
         r.Height -= 20;
         r.Width = 1024;

         r.X -= (int)MinXD;

         if (drawSlidingFFT)
         {
            DrawSlidingFFT(g, r, db);

            r.Y -= 256;
            DrawFFTBars(g, r);
            r.Y += 256;
         }
         else
         {
            DrawFFTBars(g, r);
         }

         int freqStep;

         for (freqStep = 500; freqStep < maxFreq; freqStep += 500)
         {
             int ft = lerp(0, f.GetNumOfSamples() / 2, minFreq, maxFreq, freqStep);
            if (ft > 30)
               break;
         }

         //draw legend
         for (int i = 0; i < (int)maxFreq; i += freqStep)
         {
            int x = lerp(0, 512, minFreq, maxFreq, i);

            pp.X = r.X + 2 * x;
            pp.Y = r.Bottom;

            g.DrawLine(Pens.Gray, pp.X, 0, pp.X, pp.Y);
            g.DrawString(string.Format("{0}", i), parent.Font, Brushes.White, pp);
         }

         if (m_mouse != null)
         {
             DrawCross(g, Pens.Blue, m_mouse.X, m_mouse.Y);

             pp.X = r.X ;
             pp.Y = r.Y + 40;

             g.DrawString(string.Format("Freq: {0} Hz", ((m_mouse.X / 2) * maxFreq) / f.GetNumOfSamples() / 2), parent.Font, Brushes.White, pp);
         }

      }
Exemple #2
0
        override public void Draw(Graphics g, DataBlock db)
        {
            Rectangle r = new Rectangle();

            r = m_Bounds;

            if (f == null)
            {
                f = new fft(1024);
            }

            if (db.m_result != DataBlock.RESULT.OK)
            {
                pp.X = 0;
                pp.Y = 0;
                g.DrawString(string.Format("Waiting for a chunk of data to analyze"), parent.Font, Brushes.White, pp);
                return;
            }

            if (db.GetChannelLength() < f.GetNumOfSamples())
            {
                pp.X = 0;
                pp.Y = 0;
                g.DrawString(string.Format("FFT needs at least 1024 samples to work, got only {0}, try increasing the measurement time", db.GetChannelLength()), parent.Font, Brushes.White, pp);
                return;
            }

            for (int i = 0; i < f.GetNumOfSamples(); i++)
            {
                f.x[i] = db.GetVoltage(0, i);
                f.y[i] = 0;
            }
            f.FFT(0);

            int maxFreq = db.m_sampleRate / 2;
            int minFreq = 0;

            //margin at the bottom
            r.Height -= 20;
            r.Width   = 1024;

            r.X -= (int)MinXD;

            if (drawSlidingFFT)
            {
                DrawSlidingFFT(g, r, db);

                r.Y -= 256;
                DrawFFTBars(g, r);
                r.Y += 256;
            }
            else
            {
                DrawFFTBars(g, r);
            }

            int freqStep;

            for (freqStep = 500; freqStep < maxFreq; freqStep += 500)
            {
                int ft = lerp(0, f.GetNumOfSamples() / 2, minFreq, maxFreq, freqStep);
                if (ft > 30)
                {
                    break;
                }
            }

            //draw legend
            for (int i = 0; i < (int)maxFreq; i += freqStep)
            {
                int x = lerp(0, 512, minFreq, maxFreq, i);

                pp.X = r.X + 2 * x;
                pp.Y = r.Bottom;

                g.DrawLine(Pens.Gray, pp.X, 0, pp.X, pp.Y);
                g.DrawString(string.Format("{0}", i), parent.Font, Brushes.White, pp);
            }

            if (m_mouse != null)
            {
                DrawCross(g, Pens.Blue, m_mouse.X, m_mouse.Y);

                pp.X = r.X;
                pp.Y = r.Y + 40;

                g.DrawString(string.Format("Freq: {0} Hz", ((m_mouse.X / 2) * maxFreq) / f.GetNumOfSamples() / 2), parent.Font, Brushes.White, pp);
            }
        }