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(); // ------------------------------------ } }
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; } } }