GNU Radio C++ API Reference  3.10.11.0
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)
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*);
51  ~FrequencyDisplayPlot() override;
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<const 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  bool getMaxFFTVisible() const;
86  bool getMinFFTVisible() const;
87  const QColor getMinFFTColor() const;
88  const QColor getMaxFFTColor() const;
89  const QColor getMarkerLowerIntensityColor() const;
90  bool getMarkerLowerIntensityVisible() const;
91  const QColor getMarkerUpperIntensityColor() const;
92  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);
103  void setMarkerLowerIntensityColor(QColor c);
104  void setMarkerLowerIntensityVisible(bool visible);
105  void setMarkerUpperIntensityColor(QColor c);
106  void setMarkerUpperIntensityVisible(bool visible);
107  void setMarkerPeakAmplitudeColor(QColor c);
108  void setMarkerNoiseFloorAmplitudeVisible(bool visible);
109  void setMarkerNoiseFloorAmplitudeColor(QColor c);
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);
118  void setAutoScaleShot();
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 */
void setAutoScale(bool state)
void setMarkerLowerIntensityVisible(bool visible)
bool min_fft_visible
Definition: FrequencyDisplayPlot.h:29
const QColor getMaxFFTColor() const
void setFrequencyRange(const double, const double, const double units=1000.0, const std::string &strunits="kHz")
void setMarkerCFColor(QColor c)
QWidget base plot to build QTGUI plotting tools.
Definition: DisplayPlot.h:41
bool getMarkerNoiseFloorAmplitudeVisible() const
float min(float a, float b)
bool getMarkerLowerIntensityVisible() const
void setYaxis(double min, double max) override
void setUpperIntensityLevel(const double)
void setTriggerLine(double value)
double getStartFrequency() const
STL namespace.
void setMaxFFTColor(QColor c)
void attachTriggerLine(bool en)
void setMarkerPeakAmplitudeColor(QColor c)
void setPlotPosHalf(bool half)
double getYMin() const
QColor min_fft_color
Definition: FrequencyDisplayPlot.h:27
double getYMax() const
bool marker_lower_intensity_visible
Definition: FrequencyDisplayPlot.h:34
QColor marker_CF_color
Definition: FrequencyDisplayPlot.h:47
QColor marker_noise_floor_amplitude_color
Definition: FrequencyDisplayPlot.h:43
const QColor getMarkerNoiseFloorAmplitudeColor() const
void showCFMarker(const bool)
void setLowerIntensityLevel(const double)
bool max_fft_visible
Definition: FrequencyDisplayPlot.h:30
bool marker_upper_intensity_visible
Definition: FrequencyDisplayPlot.h:38
QWidget for displaying frequency domain (PSD) plots.
Definition: FrequencyDisplayPlot.h:23
const QColor getMarkerLowerIntensityColor() const
const QColor getMarkerPeakAmplitudeColor() const
void setMarkerNoiseFloorAmplitudeVisible(bool visible)
double getStopFrequency() const
void setYLabel(const std::string &label, const std::string &unit)
const QColor getMarkerUpperIntensityColor() const
void setMarkerUpperIntensityColor(QColor c)
bool getMaxFFTVisible() const
bool getMinFFTVisible() const
void setMinFFTVisible(const bool)
void setTraceColour(QColor)
QColor marker_upper_intensity_color
Definition: FrequencyDisplayPlot.h:36
void setMarkerNoiseFloorAmplitudeColor(QColor c)
const QColor getMinFFTColor() const
void setBGColour(QColor c)
void plotNewData(const std::vector< const double * > dataPoints, const int64_t numDataPoints, const double noiseFloorAmplitude, const double peakFrequency, const double peakAmplitude, const double timeInterval)
bool getMarkerUpperIntensityVisible() const
QColor max_fft_color
Definition: FrequencyDisplayPlot.h:28
void setMinFFTColor(QColor c)
void setMarkerLowerIntensityColor(QColor c)
const QColor getMarkerCFColor() const
bool marker_noise_floor_amplitude_visible
Definition: FrequencyDisplayPlot.h:46
void setMaxFFTVisible(const bool)
void setMarkerUpperIntensityVisible(bool visible)
void onPickerPointSelected(const QPointF &p)
QColor marker_peak_amplitude_color
Definition: FrequencyDisplayPlot.h:40
void replot() override
QColor marker_lower_intensity_color
Definition: FrequencyDisplayPlot.h:32