Esempio n. 1
0
        private Chart GenerateChart(SpectrumViewContext spectrum)
        {
            var chart = new Chart();

            var    area         = chart.ChartAreas.Add("spectrum");
            Series signalSeries = new Series("spectrum");

            signalSeries.ChartType    = SeriesChartType.Line;
            signalSeries.ChartArea    = "spectrum";
            signalSeries.Color        = spectrum.LinearGraphics.LineColor;
            area.AxisX.IsLabelAutoFit = false;

            var interval = (int)Math.Round((spectrum.Transformed.GetFreqSize() / 15.0) * spectrum.Transformed.GetFreqDiff());

            area.AxisX.Interval = interval;

            area.AxisX2.LineColor = Color.Red;


            var freqs = spectrum.Transformed.GetFreqsAtTime(timeInd);

            for (var i = 0; i < freqs.Length; i++)
            {
                var mod = freqs[i].Coords.Magnitude;
                //Spectral density = |F|*|F|/T, where F - Fourier Transform, and T - time
                signalSeries.Points.AddXY(freqs[i].Freq, (mod * mod) / spectrum.Origin.GetLength());
            }

            chart.Series.Add(signalSeries);

            return(chart);
        }
Esempio n. 2
0
        public Panel View(SpectrumViewContext context)
        {
            var pan = new TableLayoutPanel
            {
                Dock = DockStyle.Fill
            };

            lastSpectrum      = views[currentView].View(context);
            lastSpectrum.Dock = DockStyle.Fill;

            var controlPan = new FlowLayoutPanel
            {
                Dock          = DockStyle.Top,
                FlowDirection = FlowDirection.LeftToRight
            };

            controlPan.Controls.Add(viewChangeBox);
            controlPan.Controls.Add(configButt);

            pan.RowStyles.Add(new RowStyle(SizeType.Absolute, 50));
            pan.RowStyles.Add(new RowStyle(SizeType.Percent, 90));

            pan.Controls.Add(controlPan, 0, 0);
            pan.Controls.Add(lastSpectrum, 0, 1);

            lastView    = pan;
            lastContext = context;

            return(pan);
        }
Esempio n. 3
0
        public Panel View(SpectrumViewContext context)
        {
            var pan = new Panel
            {
                Dock = DockStyle.Fill
            };

            var intensities = new byte[context.Transformed.GetTimeSize(), context.Transformed.GetFreqSize()];

            for (var i = 0; i < intensities.GetLength(0); i++)
            {
                var density = context.Transformed.GetDensitiesAtTime(i)
                              .ToArray();

                var max = density.Max();


                for (var j = 0; j < intensities.GetLength(1); j++)
                {
                    intensities[i, j] = max > 0 ? (byte)(density[intensities.GetLength(1) - j - 1] * 255 / max) : (byte)0;
                }
            }

            var box = DrawSpectrogram(pan.ClientSize, intensities);

            pan.Controls.Add(box);

            return(pan);
        }
Esempio n. 4
0
        public Panel View(SpectrumViewContext context)
        {
            var pan = new Panel
            {
                Dock = DockStyle.Fill
            };

            var chart = GenerateChart(context);

            chart.Dock = DockStyle.Fill;
            pan.Controls.Add(chart);

            return(pan);
        }
Esempio n. 5
0
        //private ScrollBar freqScroll;
        //private ScrollBar timeScroll;

        public Panel View(SpectrumViewContext context)
        {
            var pan = new TableLayoutPanel
            {
                Dock = DockStyle.Fill,
                //FlowDirection = FlowDirection.TopDown,
            };

            pan.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));

            var round = new Panel
            {
                Dock      = DockStyle.Fill,
                BackColor = Color.Green,
            };

            round.Paint += (sender, ev) =>
            {
                var freq   = context.Transformed.GetFreqsAtTime(timeInd)[freqInd].Freq;
                var center = context.Transformed.GetMassAtFreqTime(timeInd, freqInd);
                var points = context.Origin.GetValues().Select((v, i) => Complex.FromPolarCoordinates(v, -i * freq * 2 * Math.PI / context.Origin.GetLength() /* * timeFactor */))
                             .ToArray();

                var max = points.Select(p => p.Magnitude)
                          .Max();

                if (max != 0)
                {
                    points  = points.Select(p => p / max).ToArray();
                    center /= max;
                }

                ev.Graphics.Clear(Color.White);
                ev.Graphics.DrawImage(RoundDrawer.GetView(round.ClientSize, center, points, context.RoundGraphics), new Point(0, 0));
            };

            pan.RowStyles.Add(new RowStyle(SizeType.Percent, 100));
            pan.Controls.Add(round);


            //задаем скролл частот
            if (context.Transformed.GetTimeSize() > 0)
            {
                var freqControl = new Panel
                {
                    Dock     = DockStyle.Fill,
                    AutoSize = true,
                    Margin   = new Padding(0, 0, 0, 40)
                               //FlowDirection = FlowDirection.TopDown
                };

                var freqLabel = new Label
                {
                    Dock     = DockStyle.Top,
                    AutoSize = true,
                    Text     = "Текущая частота: " + context.Transformed.GetFreqsValues()
                               .First()
                               .ToString()
                };

                var freqScroll = new HScrollBar
                {
                    Minimum = 0,
                    Maximum = context.Transformed.GetFreqSize() - 1,
                    Value   = freqInd,
                    Dock    = DockStyle.Top
                };

                freqScroll.ValueChanged += (sender, ev) => {
                    freqInd        = freqScroll.Value;
                    freqLabel.Text = String.Format("Текущая частота: {0:0.##}", context.Transformed.GetFreqsValues()
                                                   .Skip(freqScroll.Value)
                                                   .First());
                    round.Invalidate();
                };

                freqControl.Controls.Add(freqScroll);
                freqControl.Controls.Add(freqLabel);

                pan.RowStyles.Add(new RowStyle(SizeType.AutoSize));
                pan.Controls.Add(freqControl);
            }


            return(pan);
        }