mirror of https://github.com/pvnis/srsRAN_4G.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
4.0 KiB
C++
196 lines
4.0 KiB
C++
11 years ago
|
#include "ComplexWidget.h"
|
||
|
#include "Lineplot.h"
|
||
|
#include "Events.h"
|
||
|
|
||
|
#include <qlayout.h>
|
||
|
#include <algorithm>
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
ComplexWidget::ComplexWidget(QWidget *parent)
|
||
|
:QWidget(parent)
|
||
|
{
|
||
|
i_ = new Lineplot();
|
||
|
q_ = new Lineplot();
|
||
|
m_ = new Lineplot();
|
||
|
p_ = new Lineplot();
|
||
|
|
||
|
i_->setAxisTitle(QwtPlot::xBottom, "In-phase");
|
||
|
q_->setAxisTitle(QwtPlot::xBottom, "Quadrature");
|
||
|
m_->setAxisTitle(QwtPlot::xBottom, "Magnitude");
|
||
|
p_->setAxisTitle(QwtPlot::xBottom, "Phase");
|
||
|
|
||
|
QVBoxLayout* vLayout1 = new QVBoxLayout(this);
|
||
|
vLayout1->addWidget(i_);
|
||
|
vLayout1->addWidget(q_);
|
||
|
vLayout1->addWidget(m_);
|
||
|
vLayout1->addWidget(p_);
|
||
|
|
||
|
numPoints_ = 16;
|
||
|
iData_ = new double[numPoints_];
|
||
|
qData_ = new double[numPoints_];
|
||
|
mData_ = new double[numPoints_];
|
||
|
pData_ = new double[numPoints_];
|
||
|
timerId_ = startTimer(10);
|
||
|
haveNewData_ = false;
|
||
|
}
|
||
|
|
||
|
ComplexWidget::~ComplexWidget()
|
||
|
{
|
||
|
delete i_;
|
||
|
delete q_;
|
||
|
delete m_;
|
||
|
delete p_;
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::customEvent( QEvent * e )
|
||
|
{
|
||
|
if(e->type() == ComplexDataEvent::type)
|
||
|
{
|
||
|
ComplexDataEvent* dataEvent = (ComplexDataEvent*)e;
|
||
|
setData(dataEvent);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::timerEvent(QTimerEvent *event)
|
||
|
{
|
||
|
if(event->timerId() == timerId_)
|
||
|
{
|
||
|
if(haveNewData_)
|
||
|
{
|
||
|
i_->replot();
|
||
|
q_->replot();
|
||
|
m_->replot();
|
||
|
p_->replot();
|
||
|
haveNewData_ = false;
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
QWidget::timerEvent(event);
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::setData(ComplexDataEvent* e)
|
||
|
{
|
||
|
if(e->numPoints_ != numPoints_)
|
||
|
{
|
||
|
numPoints_ = e->numPoints_;
|
||
|
delete [] iData_;
|
||
|
delete [] qData_;
|
||
|
delete [] mData_;
|
||
|
delete [] pData_;
|
||
|
|
||
|
iData_ = new double[numPoints_];
|
||
|
qData_ = new double[numPoints_];
|
||
|
mData_ = new double[numPoints_];
|
||
|
pData_ = new double[numPoints_];
|
||
|
}
|
||
|
|
||
|
transform(e->dataPoints_, &e->dataPoints_[numPoints_], iData_, opReal());
|
||
|
transform(e->dataPoints_, &e->dataPoints_[numPoints_], qData_, opImag());
|
||
|
transform(e->dataPoints_, &e->dataPoints_[numPoints_], mData_, opAbs());
|
||
|
transform(e->dataPoints_, &e->dataPoints_[numPoints_], pData_, opArg());
|
||
|
|
||
|
i_->setData(iData_, numPoints_);
|
||
|
q_->setData(qData_, numPoints_);
|
||
|
m_->setData(mData_, numPoints_);
|
||
|
p_->setData(pData_, numPoints_);
|
||
|
haveNewData_ = true;
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::setWidgetTitle(QString title)
|
||
|
{
|
||
|
setWindowTitle(title);
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::setWidgetXAxisScale(int id, double xMin, double xMax)
|
||
|
{
|
||
|
switch(id)
|
||
|
{
|
||
|
case 0:
|
||
|
i_->setAxisScale(QwtPlot::xBottom, xMin, xMax);
|
||
|
break;
|
||
|
case 1:
|
||
|
q_->setAxisScale(QwtPlot::xBottom, xMin, xMax);
|
||
|
break;
|
||
|
case 2:
|
||
|
m_->setAxisScale(QwtPlot::xBottom, xMin, xMax);
|
||
|
break;
|
||
|
case 3:
|
||
|
p_->setAxisScale(QwtPlot::xBottom, xMin, xMax);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::setWidgetYAxisScale(int id, double yMin, double yMax)
|
||
|
{
|
||
|
switch(id)
|
||
|
{
|
||
|
case 0:
|
||
|
i_->setAxisScale(QwtPlot::yLeft, yMin, yMax);
|
||
|
break;
|
||
|
case 1:
|
||
|
q_->setAxisScale(QwtPlot::yLeft, yMin, yMax);
|
||
|
break;
|
||
|
case 2:
|
||
|
m_->setAxisScale(QwtPlot::yLeft, yMin, yMax);
|
||
|
break;
|
||
|
case 3:
|
||
|
p_->setAxisScale(QwtPlot::yLeft, yMin, yMax);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::setWidgetXAxisAutoScale(int id, bool on=true)
|
||
|
{
|
||
|
switch(id)
|
||
|
{
|
||
|
case 0:
|
||
|
i_->setAxisAutoScale(QwtPlot::xBottom, on);
|
||
|
break;
|
||
|
case 1:
|
||
|
q_->setAxisAutoScale(QwtPlot::xBottom, on);
|
||
|
break;
|
||
|
case 2:
|
||
|
m_->setAxisAutoScale(QwtPlot::xBottom, on);
|
||
|
break;
|
||
|
case 3:
|
||
|
p_->setAxisAutoScale(QwtPlot::xBottom, on);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::setWidgetYAxisAutoScale(int id, bool on=true)
|
||
|
{
|
||
|
switch(id)
|
||
|
{
|
||
|
case 0:
|
||
|
i_->setAxisAutoScale(QwtPlot::yLeft, on);
|
||
|
break;
|
||
|
case 1:
|
||
|
q_->setAxisAutoScale(QwtPlot::yLeft, on);
|
||
|
break;
|
||
|
case 2:
|
||
|
m_->setAxisAutoScale(QwtPlot::yLeft, on);
|
||
|
break;
|
||
|
case 3:
|
||
|
p_->setAxisAutoScale(QwtPlot::yLeft, on);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ComplexWidget::setWidgetXAxisRange(double xMin, double xMax)
|
||
|
{
|
||
|
i_->setXAxisRange(xMin, xMax);
|
||
|
q_->setXAxisRange(xMin, xMax);
|
||
|
m_->setXAxisRange(xMin, xMax);
|
||
|
p_->setXAxisRange(xMin, xMax);
|
||
|
}
|