예제 #1
0
        private void timer_display_Tick(object sender, EventArgs e)
        {
            signal_element[] src_signal = new signal_element[1];
            lock (this.src_wave)
            {
                if (this.src_wave.Count > 0)
                {
                    src_signal = new signal_element[this.src_wave.Count];
                    this.src_wave.CopyTo(src_signal);
                }
            }

            if (src_signal.Length > 1)
            {
                // ------------------------------------
                double[] src_signal_y = new double[src_signal.Length];
                for (int i = 0; i < src_signal.Length; i++)
                {
                    src_signal_y[i] = src_signal[i].magnitude;
                }

                this.plt_signal.xOffset        = src_signal[0].time;
                this.plt_signal.ys             = src_signal_y;
                this.plt_signal.maxRenderIndex = src_signal_y.Length - 1;

                if (this.clock_s() - this.last_time_mouse_on_chart_signal_s > 5.0)
                {
                    this.chart_signal.plt.AxisAuto();
                }
                this.chart_signal.Render();

                // ------------------------------------
                // FFT
                model.FourierTool        f_tool     = new model.FourierTool();
                model.FourierTool.Result fft_result = f_tool.FFT(src_signal_y, 1000);
                // ------------------------------------
                if (fft_result.y_magnitude.Length > 0)
                {
                    this.plt_fft.ys             = fft_result.y_magnitude;
                    this.plt_fft.maxRenderIndex = fft_result.y_magnitude.Length - 1;
                    this.plt_fft.samplePeriod   = fft_result.hz_per_sample;
                    this.chart_fft.plt.Axis(x1: 0, x2: 30);
                    this.chart_fft.plt.AxisAutoY();
                }
                else
                {
                    this.plt_fft.maxRenderIndex = 1;
                }
                this.chart_fft.Render();

                // ------------------------------------
            }
        }
예제 #2
0
        private void bg_fake_data_DoWork(object sender, DoWorkEventArgs e)
        {
            // generate signal
            // sample rate 1k Hz
            // frequency can be chose by radio button (5, 10, 15 hz)
            // The signal length will increase up to 10s
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();
            long last_time_gen_fake_data = watch.ElapsedMilliseconds;

            while (true)
            {
                // -----------------------------------
                long time_now_ms = watch.ElapsedMilliseconds;
                int  ms          = Convert.ToInt32(time_now_ms - last_time_gen_fake_data);
                last_time_gen_fake_data = time_now_ms;

                if (ms == 0)
                {
                    continue;
                }
                // -----------------------------------
                double time_now_s = (double)time_now_ms / 1000.0;
                // -----------------------------------
                double frequency = 1.0;
                if (this.rbtn_5hz.Checked)
                {
                    frequency = 5.0;
                }
                else if (this.rbtn_10hz.Checked)
                {
                    frequency = 10.0;
                }
                else if (this.rbtn_15hz.Checked)
                {
                    frequency = 15.0;
                }
                // -----------------------------------
                List <signal_element> add_data = new List <signal_element>();
                for (int i = ms; i > 0; i--)
                {
                    double         t      = time_now_s - (i - 1) * 0.001;
                    signal_element s_elem = new signal_element(t, this.signal_mag * Math.Cos(t * (2 * Math.PI) * frequency));
                    add_data.Add(s_elem);
                }
                // -----------------------------------
                lock (this.src_wave)
                {
                    this.src_wave.AddRange(add_data);
                    while (this.src_wave.Last().time - this.src_wave.First().time > 10.0) // 10s
                    {
                        this.src_wave.RemoveAt(0);
                    }
                }
                // -----------------------------------
                System.Threading.Thread.Sleep(1);
                // -----------------------------------
                if (this.bg_fake_data.CancellationPending)
                {
                    break;
                }
            }
        }