Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) QwtExample3

 

QwtQtQt CreatorLubuntuUbuntuWindows

 

Qwt example 3: alpha beta filter is a Qwt example that shows how to add two timeseries to a QwtPlot.

 

Technical facts

 

Operating system(s) or programming environment(s)

IDE(s):

Project type:

C++ standard:

Compiler(s):

Libraries used:

 

 

 

 

 

Qt project file: ./CppQwtExample3/CppQwtExample3.pro

 

#Qwt does not go together with Qwt
include(../../DesktopApplicationNoWeffcpp.pri)
include(../../Libraries/Qwt.pri)

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets concurrent opengl printsupport

SOURCES += main.cpp \
        qtdialog.cpp

HEADERS  += qtdialog.h

FORMS    += qtdialog.ui

 

 

 

 

 

./CppQwtExample3/main.cpp

 

#include <QApplication>
#include "qtdialog.h"

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  QtDialog w;
  w.show();
  return a.exec();
}

 

 

 

 

 

./CppQwtExample3/qtdialog.h

 

#ifndef QTDIALOG_H
#define QTDIALOG_H

#ifdef _WIN32
//See http://www.richelbilderbeek.nl/CppCompileErrorSwprintfHasNotBeenDeclared.htm
#undef __STRICT_ANSI__
#endif

#include <QDialog>

struct QwtPlotCurve;

namespace Ui {
  class QtDialog;
}

class QtDialog : public QDialog
{
  Q_OBJECT
  
public:
  explicit QtDialog(QWidget *parent = 0);
  ~QtDialog();
  
private slots:
  void on_button_clicked();

private:
  Ui::QtDialog *ui;

  QwtPlotCurve * const m_curve_inputs;
  QwtPlotCurve * const m_curve_outputs;
};

#endif // QTDIALOG_H

 

 

 

 

 

./CppQwtExample3/qtdialog.cpp

 

#include "qtdialog.h"

#include "qwt_plot.h"
#include "qwt_plot_curve.h"
#include "ui_qtdialog.h"

#if QWT_VERSION >= 0x060100 || !WIN32
#include "qwt_point_data.h"
#endif

QtDialog::QtDialog(QWidget *parent) :
  QDialog(parent),
  ui(new Ui::QtDialog),
  m_curve_inputs(new QwtPlotCurve("Inputs")),
  m_curve_outputs(new QwtPlotCurve("Outputs"))
{
  ui->setupUi(this);
  m_curve_inputs->attach(ui->plot);
  m_curve_outputs->attach(ui->plot);

  ui->button->click();
}

QtDialog::~QtDialog()
{
  delete ui;
}

void QtDialog::on_button_clicked()
{
  //Run with an alpha-beta filter
  const int timesteps = 100;
  double output = 0.0;
  double hidden = 0.0;
  std::vector<double> inputs;
  std::vector<double> outputs;

  for (int i=0; i!=timesteps; ++i)
  {
    const double dt    = 1.0 ;
    const double alpha = 0.1 ;
    const double beta  = 0.01;

    const double input = static_cast<double>((rand() >> 4) % 10);

    double new_output = output + ( hidden * dt );
    double new_hidden = hidden;

    const double difference = input - new_output;

    new_output += alpha * difference;
    new_hidden += beta  * difference / dt;

    output = new_output;
    hidden = new_hidden;

    inputs.push_back(input);
    outputs.push_back(output);
  }
  //Plot
  {
    std::vector<double> timeseries;
    for (int i=0; i!=timesteps; ++i)
    {
      timeseries.push_back(static_cast<double>(i));
    }
    #if QWT_VERSION >= 0x060100 || !WIN32
    m_curve_inputs->setData(new QwtPointArrayData(&timeseries[0],&inputs[0],inputs.size()));
    m_curve_outputs->setData(new QwtPointArrayData(&timeseries[0],&outputs[0],outputs.size()));
    #else
    m_curve_inputs->setData(&timeseries[0],&inputs[0],inputs.size());
    m_curve_outputs->setData(&timeseries[0],&outputs[0],outputs.size());
    #endif
    /*
    #ifdef _WIN32
    m_curve_inputs->setData(new QwtPointArrayData(&timeseries[0],&inputs[0],inputs.size()));
    m_curve_outputs->setData(new QwtPointArrayData(&timeseries[0],&outputs[0],outputs.size()));
    #else
    m_curve_inputs->setData(&timeseries[0],&inputs[0],inputs.size());
    m_curve_outputs->setData(&timeseries[0],&outputs[0],outputs.size());
    #endif
    */
    ui->plot->replot();
  }
}

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict

This page has been created by the tool CodeToHtml