GNU Radio Manual and C++ API Reference  3.10.9.1
The Free & Open Software Radio Ecosystem
FrequencyDisplayPlot.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2008-2011 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * SPDX-License-Identifier: GPL-3.0-or-later
8  *
9  */
10 
11 #ifndef FREQUENCY_DISPLAY_PLOT_HPP
12 #define FREQUENCY_DISPLAY_PLOT_HPP
13 
15 #include <cstdint>
16 #include <cstdio>
17 #include <vector>
18 
19 /*!
20  * \brief QWidget for displaying frequency domain (PSD) plots.
21  * \ingroup qtgui_blk
22  */
24 {
25  Q_OBJECT
26 
27  Q_PROPERTY(QColor min_fft_color READ getMinFFTColor WRITE setMinFFTColor)
28  Q_PROPERTY(QColor max_fft_color READ getMaxFFTColor WRITE setMaxFFTColor)
29  Q_PROPERTY(bool min_fft_visible READ getMinFFTVisible WRITE setMinFFTVisible)
30  Q_PROPERTY(bool max_fft_visible READ getMaxFFTVisible WRITE setMaxFFTVisible)
39  Q_PROPERTY(QColor marker_peak_amplitude_color READ getMarkerPeakAmplitudeColor WRITE
41  Q_PROPERTY(
44  Q_PROPERTY(
47  Q_PROPERTY(QColor marker_CF_color READ getMarkerCFColor WRITE setMarkerCFColor)
48 
49 public:
50  FrequencyDisplayPlot(int nplots, QWidget*);
52 
53  void setFrequencyRange(const double,
54  const double,
55  const double units = 1000.0,
56  const std::string& strunits = "kHz");
57  double getStartFrequency() const;
58  double getStopFrequency() const;
59 
60  void plotNewData(const std::vector<double*> dataPoints,
61  const int64_t numDataPoints,
62  const double noiseFloorAmplitude,
63  const double peakFrequency,
64  const double peakAmplitude,
65  const double timeInterval);
66 
67  // Old method to be removed
68  void plotNewData(const double* dataPoints,
69  const int64_t numDataPoints,
70  const double noiseFloorAmplitude,
71  const double peakFrequency,
72  const double peakAmplitude,
73  const double timeInterval);
74 
75  void replot() override;
76 
77  void setYaxis(double min, double max) override;
78  double getYMin() const;
79  double getYMax() const;
80 
81  void setTraceColour(QColor);
82  void setBGColour(QColor c);
83  void showCFMarker(const bool);
84 
85  const bool getMaxFFTVisible() const;
86  const bool getMinFFTVisible() const;
87  const QColor getMinFFTColor() const;
88  const QColor getMaxFFTColor() const;
89  const QColor getMarkerLowerIntensityColor() const;
90  const bool getMarkerLowerIntensityVisible() const;
91  const QColor getMarkerUpperIntensityColor() const;
92  const bool getMarkerUpperIntensityVisible() const;
93  const QColor getMarkerPeakAmplitudeColor() const;
95  const QColor getMarkerNoiseFloorAmplitudeColor() const;
96  const QColor getMarkerCFColor() const;
97 
98 public slots:
99  void setMaxFFTVisible(const bool);
100  void setMinFFTVisible(const bool);
101  void setMinFFTColor(QColor c);
102  void setMaxFFTColor(QColor c);
104  void setMarkerLowerIntensityVisible(bool visible);
106  void setMarkerUpperIntensityVisible(bool visible);
110  void setMarkerCFColor(QColor c);
111 
112  void setLowerIntensityLevel(const double);
113  void setUpperIntensityLevel(const double);
114 
115  void onPickerPointSelected(const QPointF& p);
116 
117  void setAutoScale(bool state);
119 
120  void setPlotPosHalf(bool half);
121 
122  void setYLabel(const std::string& label, const std::string& unit);
123 
124  void clearMaxData();
125  void clearMinData();
126 
127  void attachTriggerLine(bool en);
128  void setTriggerLine(double value);
129 
130 private:
131  void _resetXAxisPoints();
132  void _autoScale(double bottom, double top);
133 
134  std::vector<std::vector<double>> d_ydata;
135 
136  QwtPlotCurve* d_min_fft_plot_curve;
137  QwtPlotCurve* d_max_fft_plot_curve;
138  QColor d_min_fft_color;
139  bool d_min_fft_visible;
140  QColor d_max_fft_color;
141  bool d_max_fft_visible;
142  QColor d_marker_lower_intensity_color;
143  bool d_marker_lower_intensity_visible;
144  QColor d_marker_upper_intensity_color;
145  bool d_marker_upper_intensity_visible;
146  QColor d_marker_peak_amplitude_color;
147  QColor d_marker_noise_floor_amplitude_color;
148  bool d_marker_noise_floor_amplitude_visible;
149  QColor d_marker_cf_color;
150 
151  double d_start_frequency = -1;
152  double d_stop_frequency = 1;
153  double d_center_frequency;
154  double d_ymax = 10;
155  double d_ymin = -120;
156  bool d_half_freq = false;
157 
158  QwtPlotMarker* d_lower_intensity_marker;
159  QwtPlotMarker* d_upper_intensity_marker;
160 
161  QwtPlotMarker* d_marker_peak_amplitude;
162  QwtPlotMarker* d_marker_noise_floor_amplitude;
163  QwtPlotMarker* d_marker_cf;
164 
165  std::vector<double> d_xdata;
166  int d_xdata_multiplier;
167 
168  std::vector<double> d_min_fft_data;
169  std::vector<double> d_max_fft_data;
170 
171  double d_peak_frequency;
172  double d_peak_amplitude;
173 
174  double d_noise_floor_amplitude;
175 
176  bool d_autoscale_shot = false;
177 
178  QwtPlotMarker* d_trigger_line;
179 };
180 
181 #endif /* FREQUENCY_DISPLAY_PLOT_HPP */
QWidget base plot to build QTGUI plotting tools.
Definition: DisplayPlot.h:42
QWidget for displaying frequency domain (PSD) plots.
Definition: FrequencyDisplayPlot.h:24
double getYMax() const
void setMarkerLowerIntensityColor(QColor c)
void showCFMarker(const bool)
~FrequencyDisplayPlot() override
QColor min_fft_color
Definition: FrequencyDisplayPlot.h:27
void setMarkerNoiseFloorAmplitudeVisible(bool visible)
void setMarkerCFColor(QColor c)
void setMinFFTColor(QColor c)
void setYLabel(const std::string &label, const std::string &unit)
QColor max_fft_color
Definition: FrequencyDisplayPlot.h:28
void setMarkerUpperIntensityColor(QColor c)
QColor marker_lower_intensity_color
Definition: FrequencyDisplayPlot.h:32
void setPlotPosHalf(bool half)
void setMarkerPeakAmplitudeColor(QColor c)
FrequencyDisplayPlot(int nplots, QWidget *)
void setMarkerNoiseFloorAmplitudeColor(QColor c)
void setMaxFFTVisible(const bool)
void setTriggerLine(double value)
const QColor getMaxFFTColor() const
QColor marker_CF_color
Definition: FrequencyDisplayPlot.h:47
double getStartFrequency() const
bool marker_lower_intensity_visible
Definition: FrequencyDisplayPlot.h:34
const bool getMarkerLowerIntensityVisible() const
const QColor getMarkerLowerIntensityColor() const
void setAutoScale(bool state)
void plotNewData(const double *dataPoints, const int64_t numDataPoints, const double noiseFloorAmplitude, const double peakFrequency, const double peakAmplitude, const double timeInterval)
void attachTriggerLine(bool en)
const bool getMarkerUpperIntensityVisible() const
const QColor getMarkerCFColor() const
bool marker_noise_floor_amplitude_visible
Definition: FrequencyDisplayPlot.h:46
QColor marker_peak_amplitude_color
Definition: FrequencyDisplayPlot.h:40
const QColor getMinFFTColor() const
void setMaxFFTColor(QColor c)
void setFrequencyRange(const double, const double, const double units=1000.0, const std::string &strunits="kHz")
void setBGColour(QColor c)
void setLowerIntensityLevel(const double)
const QColor getMarkerNoiseFloorAmplitudeColor() const
void setUpperIntensityLevel(const double)
void setTraceColour(QColor)
double getYMin() const
void setYaxis(double min, double max) override
void replot() override
QColor marker_upper_intensity_color
Definition: FrequencyDisplayPlot.h:36
const QColor getMarkerUpperIntensityColor() const
void setMarkerLowerIntensityVisible(bool visible)
double getStopFrequency() const
const bool getMarkerNoiseFloorAmplitudeVisible() const
bool min_fft_visible
Definition: FrequencyDisplayPlot.h:29
void plotNewData(const std::vector< double * > dataPoints, const int64_t numDataPoints, const double noiseFloorAmplitude, const double peakFrequency, const double peakAmplitude, const double timeInterval)
void setMinFFTVisible(const bool)
const bool getMaxFFTVisible() const
const QColor getMarkerPeakAmplitudeColor() const
QColor marker_noise_floor_amplitude_color
Definition: FrequencyDisplayPlot.h:43
void setMarkerUpperIntensityVisible(bool visible)
bool max_fft_visible
Definition: FrequencyDisplayPlot.h:30
const bool getMinFFTVisible() const
void onPickerPointSelected(const QPointF &p)
bool marker_upper_intensity_visible
Definition: FrequencyDisplayPlot.h:38
float min(float a, float b)