Giter Club home page Giter Club logo

pothosplotters's Introduction

Plotters for visualization in Pothos GUI

The plotters toolkit provides plotter widgets which are combined processing blocks with Qt widgets which are capable of displaying signal visualization within the Pothos GUI. Such blocks include: time-domain waveform viewer, periodogram, spectrogram, constellation plotter, and others

Documentation

Dependencies

Licensing information

Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

pothosplotters's People

Contributors

audiofilter avatar guruofquality avatar mhostetter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pothosplotters's Issues

QWT paths on cmake

In MacPorts we can have multiple QWT versions so I need to pass as parameters where to find the right one, in this case QWT 6. Unfortunately the following doesn't work

    -DQWT_INCLUDE_DIRS=${qt_dir}/lib/qwt.framework/Versions/6/Headers \                                                                                                                           
    -DQWT_LIBRARIES=${qt_dir}/lib/qwt.framework/qwt

Probably, CMakeLists.txt needs to set this value. thanks

WaveMonitor can leak exceptions into Qt and crashes PothosFlow

When plotting data with no data type convert throws in WaveMonitorDisplay::handleSamples().
Other blocks log this as a warning, I assume they do this conversion in there work() method.

#0  0x00007fff983afdd0 in Pothos::BufferChunk::convert(Pothos::DType const&, unsigned long) const@plt () at /usr/local/lib64/Pothos/modules0.6/plotters/libWaveMonitor.so
#1  0x00007fff983b813c in WaveMonitorDisplay::handleSamples(Pothos::Packet const&) (this=0x1417bb0, packet=...) at /home/ashley/OpenSource/sdr/pothos/plotters/WaveMonitor/WaveMonitorWork.cpp:54
#2  0x00007fff983c38f9 in WaveMonitorDisplay::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
    at /home/ashley/OpenSource/sdr/pothos/build/plotters/WaveMonitor/WaveMonitor_autogen/EWIEGA46WW/moc_WaveMonitorDisplay.cpp:107
#3  0x00007ffff4fb68da in QObject::event(QEvent*) () at /lib64/libQt5Core.so.5
#4  0x00007ffff58200db in QWidget::event(QEvent*) () at /lib64/libQt5Widgets.so.5
#5  0x00007ffff57d95dc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#6  0x00007ffff57e0c74 in QApplication::notify(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5
#7  0x00007ffff4f8e627 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt5Core.so.5
#8  0x00007ffff4f9085b in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /lib64/libQt5Core.so.5
#9  0x00007ffff4fdcdd3 in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () at /lib64/libQt5Core.so.5
#10 0x00007ffff0d84247 in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
#11 0x00007ffff0d845e8 in g_main_context_iterate.isra () at /lib64/libglib-2.0.so.0
#12 0x00007ffff0d8467c in g_main_context_iteration () at /lib64/libglib-2.0.so.0
#13 0x00007ffff4fdce4f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5Core.so.5
#14 0x00007ffff4f8d60a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5Core.so.5
#15 0x00007ffff4f9527c in QCoreApplication::exec() () at /lib64/libQt5Core.so.5
#16 0x0000000000436d14 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /home/ashley/OpenSource/sdr/pothos/flow/PothosFlow.cpp:84

hide+show control/auto-hide for plotter legend

The legend can stick out like an eyesore, especially when the plotters are small. Its used for setting channel visibility. We could have a show/hide enum in the options panel. Or just auto-hide it when not moused over the edge.

dB values seam to be incorrect on both Periodogram & Spectrogram

When display a single test tone of amplitude 1.0 in the Periodogram or Spectrogram display the amplitude seams down from were it should be. 3dB down for complex and 9dB down for real signals.
It does not seam to be significantly affected by the windowing mode.
But adjusting the "Full Scale" parm fixes the the issue. eg 1.0 *sqrt(1/2) for complex bring the displayed amplitude to were i would expect.

Complex normal
complex normal
Complex adjusted
complex ajusted

Real normal
real normal
Real adjusted
real ajusted

I see this bug under the Pothos v0.7.0-g42d23cb1

OS X 10.11.2 / homebrew: Adding any plotter block causes PothosGui to segfault or fail assertion

Any time I try to add any of the plotters (constellation, logic, periodogram, spectrogram, wave monitor) to my flow graph, PothosGui either segfaults or fails an assertion.

Here's the output from me running PothosGui and double-clicking on Spectrogram with an empty flowgraph:

juroujin:~ meatmanek$ PothosGui
2015-12-22 21:41:17 PothosGui.MainWindow: Welcome to Pothos v0.3.0-unknown
2015-12-22 21:41:18 PothosGui.MainWindow: Initialization complete
Segmentation fault: 11
juroujin:~ meatmanek$

Traceback from the crash report dialog: https://gist.github.com/EvanKrall/9316862740a977008937

If I add another block to the graph first, however, I get an assertion failure. This is the output of me adding a noise source and then a spectrogram plotter:

juroujin:~ meatmanek$ PothosGui
2015-12-22 21:46:43 PothosGui.MainWindow: Welcome to Pothos v0.3.0-unknown
2015-12-22 21:46:43 PothosGui.MainWindow: Initialization complete
2015-12-22 21:46:43.369 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 255;
    kCUIThumbProportionKey = "0.84185303514377";
    noindicator = 1;
    pressedpart = 4;
    state = pressed;
    value = "0.494949494949495";
    widget = scrollbar;
}
2015-12-22 21:46:43.369 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 255;
    kCUIThumbProportionKey = "0.84185303514377";
    noindicator = 1;
    pressedpart = 4;
    state = pressed;
    value = "0.494949494949495";
    widget = scrollbar;
}
2015-12-22 21:46:43.371 PothosGui[48816:1944608] outHitPart = -1
2015-12-22 21:46:43.372 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 768;
    kCUIThumbProportionKey = "0.487962962962963";
    state = normal;
    value = 0;
    widget = scrollbar;
}
2015-12-22 21:46:43.372 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 768;
    kCUIThumbProportionKey = "0.487962962962963";
    state = normal;
    value = 0;
    widget = scrollbar;
}
2015-12-22 21:46:43.373 PothosGui[48816:1944608] outHitPart = 6
2015-12-22 21:46:43.771 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 255;
    kCUIThumbProportionKey = "0.84185303514377";
    noindicator = 1;
    pressedpart = 4;
    state = pressed;
    value = "0.494949494949495";
    widget = scrollbar;
}
2015-12-22 21:46:43.771 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 255;
    kCUIThumbProportionKey = "0.84185303514377";
    noindicator = 1;
    pressedpart = 4;
    state = pressed;
    value = "0.494949494949495";
    widget = scrollbar;
}
2015-12-22 21:46:43.771 PothosGui[48816:1944608] outHitPart = -1
2015-12-22 21:46:43.771 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 768;
    kCUIThumbProportionKey = "0.487962962962963";
    state = normal;
    value = 0;
    widget = scrollbar;
}
2015-12-22 21:46:43.771 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 768;
    kCUIThumbProportionKey = "0.487962962962963";
    state = normal;
    value = 0;
    widget = scrollbar;
}
2015-12-22 21:46:43.771 PothosGui[48816:1944608] outHitPart = 6
2015-12-22 21:46:44.063 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 255;
    kCUIThumbProportionKey = "0.84185303514377";
    noindicator = 1;
    pressedpart = 4;
    state = pressed;
    value = "0.494949494949495";
    widget = scrollbar;
}
2015-12-22 21:46:44.063 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 255;
    kCUIThumbProportionKey = "0.84185303514377";
    noindicator = 1;
    pressedpart = 4;
    state = pressed;
    value = "0.494949494949495";
    widget = scrollbar;
}
2015-12-22 21:46:44.063 PothosGui[48816:1944608] outHitPart = -1
2015-12-22 21:46:44.064 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 768;
    kCUIThumbProportionKey = "0.487962962962963";
    state = normal;
    value = 0;
    widget = scrollbar;
}
2015-12-22 21:46:44.064 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 768;
    kCUIThumbProportionKey = "0.487962962962963";
    state = normal;
    value = 0;
    widget = scrollbar;
}
2015-12-22 21:46:44.064 PothosGui[48816:1944608] outHitPart = 6
2015-12-22 21:46:44.079 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 255;
    kCUIThumbProportionKey = "0.84185303514377";
    noindicator = 1;
    pressedpart = 4;
    state = pressed;
    value = "0.494949494949495";
    widget = scrollbar;
}
2015-12-22 21:46:44.079 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 255;
    kCUIThumbProportionKey = "0.84185303514377";
    noindicator = 1;
    pressedpart = 4;
    state = pressed;
    value = "0.494949494949495";
    widget = scrollbar;
}
2015-12-22 21:46:44.079 PothosGui[48816:1944608] outHitPart = -1
2015-12-22 21:46:44.079 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 768;
    kCUIThumbProportionKey = "0.487962962962963";
    state = normal;
    value = 0;
    widget = scrollbar;
}
2015-12-22 21:46:44.079 PothosGui[48816:1944608] inOptions: {
    "is.flipped" = 1;
    kCUIOrientationKey = kCUIOrientVertical;
    kCUIPartMaskKey = 768;
    kCUIThumbProportionKey = "0.487962962962963";
    state = normal;
    value = 0;
    widget = scrollbar;
}
2015-12-22 21:46:44.080 PothosGui[48816:1944608] outHitPart = -1
Assertion failed: (handle), function call, file /usr/local/include/Pothos/Proxy/ProxyImpl.hpp, line 70.
Abort trap: 6
juroujin:~ meatmanek$

Crash traceback from the report a problem dialog: https://gist.github.com/EvanKrall/f05a47cf49f141e9f7db

I've used homebrew to install Pothos. Some information:

juroujin:~ meatmanek$ brew list | grep pothos
pothos
pothosaudio
pothosblocks
pothoscomms
pothosgui
pothosplotters
pothospython
pothossdr
pothosserialization
pothoswidgets
juroujin:~ meatmanek$ brew info pothoswidgets
pothosware/pothos/pothoswidgets: stable 0.3.0, HEAD
Pothos graphical control widgets
https://github.com/pothosware/pothos-widgets/wiki
/usr/local/Cellar/pothoswidgets/0.3.0 (3 files, 12K) *
  Built from source
From: https://github.com/pothosware/homebrew-pothos/blob/master/pothoswidgets.rb
==> Dependencies
Build: cmake ✔
Required: pothos ✔, pothosserialization ✔, qt5 ✔
juroujin:~ meatmanek$ brew info pothosplotters
pothosware/pothos/pothosplotters: stable 0.1.0, HEAD
Pothos graphical plotter widgets
https://github.com/pothosware/pothos-plotters/wiki
/usr/local/Cellar/pothosplotters/0.1.0 (5 files, 1.3M) *
  Built from source
From: https://github.com/pothosware/homebrew-pothos/blob/master/pothosplotters.rb
==> Dependencies
Build: cmake ✔
Required: pothos ✔, spuce ✔, qt5 ✔
Optional: qwtqt5 ✘
==> Options
--with-qwtqt5
    Build with qwtqt5 support
--HEAD
    Install HEAD version
juroujin:~ meatmanek$ brew info pothos
pothosware/pothos/pothos: stable 0.3.0, HEAD
Pothos data-flow software suite
https://github.com/pothosware/pothos/wiki
/usr/local/Cellar/pothos/0.3.0 (101 files, 19M) *
  Built from source
From: https://github.com/pothosware/homebrew-pothos/blob/master/pothos.rb
==> Dependencies
Build: cmake ✔
Required: poco ✔, muparserx ✔, pothosserialization ✔, spuce ✔
juroujin:~ meatmanek$

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.