/// <summary> ///构造 /// </summary> public Chart_AM() { m_aSpectrograms2D_source = null; m_aSpectrograms2D_signal = null; m_AreaSpectrum_signal = null; m_AreaSpectrum_souce = null; m_aWaveformMonitors = null; m_iFFTCalcIntervalMs = 20; m_iFFTWindowLength = 1024 * 4; m_iHighFreq = 2000; _samplingFrequency = 0; Param = new Param_AM(1000); _seriesNames = new string[] { "音频", "载波", "调制", "检波" }; InitializeComponent(); //销毁时释放资源 Dispatcher.ShutdownStarted += (object sender, EventArgs e) => { Dispose(); }; }
private void InitSpectrograms() { DisposeSpectrograms(); int resolution = m_iFFTWindowLength; if (m_iHighFreq < _samplingFrequency / 2) { resolution = (int)Math.Round((double)m_iHighFreq / (double)(_samplingFrequency / 2) * m_iFFTWindowLength); } string strTitle = "P(f)"; m_aSpectrograms2D_source = new SpectrogramViewXYIntensity( gridChart, true, resolution, m_iFFTCalcIntervalMs, 5, 0, m_iHighFreq, strTitle, DefaultColors.SeriesForBlackBackgroundWpf[0]); m_aSpectrograms2D_source.Chart.ChartName = "频谱仪(热力/源)"; m_aSpectrograms2D_signal = new SpectrogramViewXYIntensity( gridChart, true, resolution, m_iFFTCalcIntervalMs, 5, 0, m_iHighFreq, strTitle, DefaultColors.SeriesForBlackBackgroundWpf[0]); m_aSpectrograms2D_signal.Chart.ChartName = "频谱仪(热力/信号)"; m_AreaSpectrum_souce = new AreaSpectrumMonitor( gridChart, resolution, m_iHighFreq, strTitle, DefaultColors.SeriesForBlackBackgroundWpf[0] ); m_AreaSpectrum_souce.Chart.ChartName = "频谱仪(源)"; m_AreaSpectrum_signal = new AreaSpectrumMonitor( gridChart, resolution, m_iHighFreq, strTitle, DefaultColors.SeriesForBlackBackgroundWpf[1] ); m_AreaSpectrum_signal.Chart.ChartName = "频谱仪(信号)"; ArrangeMonitors(); }
/// <summary> /// 初始化频谱仪 /// </summary> private void InitSpectrograms() { DisposeSpectrograms(); int resolution = m_iFFTWindowLength; if (m_iHighFreq < _samplingFrequency / 2) { resolution = (int)Math.Round((double)m_iHighFreq / (double)(_samplingFrequency / 2) * m_iFFTWindowLength); } m_aSpectrograms2D = new SpectrogramViewXYIntensity[_channelCount]; for (int channelIndex = 0; channelIndex < _channelCount; channelIndex++) { string strTitle = "P(f)\n - Channel " + (channelIndex + 1).ToString(); if (_channelCount == 2) { if (channelIndex == 0) { strTitle = "P(f) - Left"; } else { strTitle = "P(f) - Right"; } } SpectrogramViewXYIntensity svi = new SpectrogramViewXYIntensity( gridChart, true, resolution, m_iFFTCalcIntervalMs, 5, 0, m_iHighFreq, strTitle, DefaultColors.SeriesForBlackBackgroundWpf[channelIndex % DefaultColors.SeriesForBlackBackgroundWpf.Length] ); svi.Chart.ChartName = "Spectrogram Chart " + (channelIndex + 1).ToString(); m_aSpectrograms2D[channelIndex] = svi; } ArrangeMonitors(); }
/// <summary> /// 释放频谱仪资源 /// </summary> private void DisposeSpectrograms() { if (m_aSpectrograms2D_source != null) { m_aSpectrograms2D_source.Dispose(); m_aSpectrograms2D_source = null; } if (m_aSpectrograms2D_signal != null) { m_aSpectrograms2D_signal.Dispose(); m_aSpectrograms2D_signal = null; } if (m_AreaSpectrum_souce != null) { m_AreaSpectrum_souce.Dispose(); m_AreaSpectrum_souce = null; } if (m_AreaSpectrum_signal != null) { m_AreaSpectrum_signal.Dispose(); m_AreaSpectrum_signal = null; } }