Beispiel #1
0
        private void BuildHarmGraph()
        {
            signal = (Signal)comboBoxSignalType.SelectedIndex;
            try
            {
                chart1.Series.Remove(DataSer);
            }
            finally
            {
                DataSer           = new System.Windows.Forms.DataVisualization.Charting.Series();
                HarS              = new System.Windows.Forms.DataVisualization.Charting.Legend();
                DataSer.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
                DataSer.Color     = Color.Red;
                HarS.Name         = "Harmonic signal";
                HarS.Title        = "Harmonic signal";
                //chart1.Legends.Add(HarS);
                int N = 1024;
                A   = (double)trackBar2.Value;
                f   = (double)trackBar3.Value;
                phi = (double)trackBar1.Value;
                double Q = 0.25;
                label4.Text = Convert.ToString(trackBar2.Value);
                label5.Text = Convert.ToString(trackBar3.Value);
                label6.Text = Convert.ToString(trackBar1.Value);
                if (signal == Signal.rectangle)
                {
                    DataSer.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StepLine;
                }

                IWaveForm instance = null;

                switch (signal)
                {
                case Signal.syn:
                {
                    instance = new SynForm(A, f, phi);
                    break;
                }

                case Signal.rectangle:
                {
                    instance = new RectangleForm(A, f, phi, Q);
                    break;
                }

                case Signal.triangle:
                {
                    instance = new TriangleForm(A, f, phi);
                    break;
                }

                case Signal.saw:
                {
                    instance = new SawForm(A, f, phi);
                    break;
                }
                }
                for (int n = 1; n <= N - 1; n++)
                {
                    switch (signal)
                    {
                    case Signal.rectangle:
                    {
                        DataSer.Points.AddXY((double)n / N, instance.GetPointsForWave(N, n, noize ? NoizeStep : 0));
                        break;
                    }

                    default:
                    {
                        DataSer.Points.AddXY(n, instance.GetPointsForWave(N, n, noize ? NoizeStep : 0));
                        break;
                    }
                    }
                }
            }
            chart1.ResetAutoValues();
            chart1.Series.Add(DataSer);
        }
Beispiel #2
0
        private void BuildPolyHarmGraph(object sender, EventArgs e)
        {
            signal = (Signal)comboBoxSignalType.SelectedIndex;
            try
            {
                chart1.Series.Remove(DataSer);
            }
            finally
            {
                for (int i = 0; i <= 14; i++)
                {
                    if (comboBox5.SelectedIndex * 3 == i)
                    {
                        phc[i] = (double)trackBar1.Value;
                    }
                    if (comboBox5.SelectedIndex * 3 + 1 == i)
                    {
                        phc[i] = (double)trackBar3.Value;
                    }
                    if (comboBox5.SelectedIndex * 3 + 2 == i)
                    {
                        phc[i] = (double)trackBar2.Value;
                    }

                    // lbLst[i].Text = Convert.ToString(trLst[i].Value);
                    //phc[i] = trLst[i].Value;
                }
                label4.Text = Convert.ToString(trackBar2.Value);
                label5.Text = Convert.ToString(trackBar3.Value);
                label6.Text = Convert.ToString(trackBar1.Value);

                DataSer           = new System.Windows.Forms.DataVisualization.Charting.Series();
                HarS              = new System.Windows.Forms.DataVisualization.Charting.Legend();
                DataSer.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
                DataSer.Color     = Color.Red;
                HarS.Name         = "Harmonic signal";
                HarS.Title        = "Harmonic signal";

                double Q = 0.5;

                IWaveForm[] arrWaves = new IWaveForm[5];

                for (int i = 0; i < 5; i++)
                {
                    switch (signal)
                    {
                    case Signal.syn:
                    {
                        arrWaves[i] = new SynForm(phc[i * 3 + 2], phc[i * 3 + 1], phc[i * 3]);
                        break;
                    }

                    case Signal.rectangle:
                    {
                        arrWaves[i] = new RectangleForm(phc[i * 3 + 2], phc[i * 3 + 1], phc[i * 3], Q);
                        break;
                    }

                    case Signal.triangle:
                    {
                        arrWaves[i] = new TriangleForm(phc[i * 3 + 2], phc[i * 3 + 1], phc[i * 3]);
                        break;
                    }

                    default:
                    {
                        arrWaves[i] = new SawForm(phc[i * 3 + 2], phc[i * 3 + 1], phc[i * 3]);
                        break;
                    }
                    }
                }

                double t = 0;
                int    N = 1024;

                if (signal == Signal.rectangle)
                {
                    DataSer.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StepLine;
                }


                for (int n = 1; n <= N - 1; n++)
                {
                    //создать 5 объектов с разеными параметрами и по очерелди их перебиратьъ

                    double res = 0;
                    //res = WaveBase.GetPointsForWave(N, n, noize ? NoizeStep : 0);
                    for (int k = 0; k < 5; k++)
                    {
                        // tarrWaves[0].Amplitude
                        t = arrWaves[k].GetPointsForWave(N, n, noize ? NoizeStep : 0);
                        //t= (phc[k*3 + 2]) * Math.Sin(2 * Math.PI * (phc[k*3 + 1]) * n / N + (double)(phc[k*3]) / 180 * Math.PI);
                        // double t = (3 * phc[k * 3 + 2]) * Math.Sin(2 * Math.PI * (3 * phc[k * 3 + 1]) * n / N + (double)(3 * phc[k * 3]) / 180 * Math.PI);
                        res += t;
                    }
                    if (signal == Signal.rectangle)
                    {
                        DataSer.Points.AddXY((double)n / N, res);
                    }
                    else
                    {
                        DataSer.Points.AddXY(n, res);
                    }
                }
            }
            chart1.ResetAutoValues();
            chart1.Series.Add(DataSer);
        }