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