Git Product home page Git Product logo

inspectrum's Introduction

inspectrum

inspectrum is a tool for analysing captured signals, primarily from software-defined radio receivers.

inspectrum screenshot

Features

  • Large (100GB+) file support
  • Spectrogram with zoom/pan
  • Plots of amplitude, frequency, phase and IQ samples
  • Cursors for measuring period, symbol rate and extracting symbols
  • Export of selected time period, filtered samples and demodulated data

Install

Linux

Install inspectrum with your package manager, it should be present in most distros.

macOS

Windows

Build from source

Prerequisites

  • cmake >= 3.1
  • fftw 3.x
  • liquid-dsp >= v1.3.0
  • pkg-config
  • qt5

Build instructions

Build instructions can be found here: https://github.com/miek/inspectrum/wiki/Build

Run

./inspectrum [filename]

Input

inspectrum supports the following file types:

  • *.sigmf-meta, *.sigmf-data - SigMF recordings
  • *.cf32, *.fc32, *.cfile - Complex 32-bit floating point samples (GNU Radio, osmocom_fft)
  • *.cf64, *.fc64 - Complex 64-bit floating point samples
  • *.cs32, *.sc32, *.c32 - Complex 32-bit signed integer samples (SDRAngel)
  • *.cs16, *.sc16, *.c16 - Complex 16-bit signed integer samples (BladeRF)
  • *.cs8, *.sc8, *.c8 - Complex 8-bit signed integer samples (HackRF)
  • *.cu8, *.uc8 - Complex 8-bit unsigned integer samples (RTL-SDR)
  • *.f32 - Real 32-bit floating point samples
  • *.f64 - Real 64-bit floating point samples (MATLAB)
  • *.s16 - Real 16-bit signed integer samples
  • *.s8 - Real 8-bit signed integer samples
  • *.u8 - Real 8-bit unsigned integer samples

If an unknown file extension is loaded, inspectrum will default to *.cf32.

Note: 64-bit samples will be truncated to 32-bit before processing, as inspectrum only supports 32-bit internally.

inspectrum's People

Contributors

777arc avatar argilo avatar bastibl avatar battlesnake avatar bkchr avatar catkira avatar daniestevez avatar devnulling avatar dnet avatar dominicgs avatar droelfdroelf avatar edwardbetts avatar fsch2 avatar guruofquality avatar jboone avatar kaback avatar kevinmehall avatar kwesthaus avatar miek avatar mmaroti avatar mnhauke avatar mossmann avatar mrene avatar otanim avatar philpax avatar povik avatar saerdnaer avatar samyk avatar schneider42 avatar sec42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

inspectrum's Issues

End cursor moves by increasing symbol number

Hi miek,

Not sure it it was intentional but when you set your cursor start and end point increasing the symbol number moves the end point further and further away, I liked it before as you could set your start and end point and increase the symbol number until everything lined up.

Cheers

Support other file formats

Currently inspectrum supports sample files with complex 32bit floats, it should probably support some other formats:

8bit signed/unsigned ints
16bit signed/unsigned ints ?
real (not complex) samples ?

building waveform

screenshot from 2016-04-24 09-41-39
Hi miek,

Im not sure what i have done here but i just tried to build the latest waveform commits and my inspectrum looks like the master branch have lost the horizontal selection bars. I wanted to see the plotview: Basic symbol extraction work you just made.

even started from scratch

git clone https://github.com/miek/inspectrum.git
git checkout waveform
mkdir build
cmake ..
make
./inspectrum

Any suggestions

On OS X/Homebrew, ld: library not found for -lfftw3f

juroujin:build meatmanek$ Qt5Widgets_DIR=$(brew --prefix qt5) cmake ..
-- The CXX compiler identification is AppleClang 7.0.0.7000176
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.28")
-- checking for module 'fftw3f'
--   found fftw3f, version 3.3.4
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/meatmanek/Dropbox/code/inspectrum/build
juroujin:build meatmanek$ make
Scanning dependencies of target inspectrum_automoc
[ 12%] Automatic moc for target inspectrum
Generating moc_mainwindow.cpp
Generating moc_spectrogram.cpp
Generating moc_spectrogramcontrols.cpp
[ 12%] Built target inspectrum_automoc
Scanning dependencies of target inspectrum
[ 25%] Building CXX object CMakeFiles/inspectrum.dir/main.cpp.o
[ 37%] Building CXX object CMakeFiles/inspectrum.dir/fft.cpp.o
[ 50%] Building CXX object CMakeFiles/inspectrum.dir/mainwindow.cpp.o
[ 62%] Building CXX object CMakeFiles/inspectrum.dir/inputsource.cpp.o
[ 75%] Building CXX object CMakeFiles/inspectrum.dir/spectrogram.cpp.o
[ 87%] Building CXX object CMakeFiles/inspectrum.dir/spectrogramcontrols.cpp.o
[100%] Building CXX object CMakeFiles/inspectrum.dir/inspectrum_automoc.cpp.o
Linking CXX executable inspectrum
ld: library not found for -lfftw3f
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [inspectrum] Error 1
make[1]: *** [CMakeFiles/inspectrum.dir/all] Error 2
make: *** [all] Error 2
juroujin:build meatmanek$

It appears the issue is that the linker is being invoked with -lfftw3f but without the arguments necessary to find the library:

juroujin:build meatmanek$ cat ./CMakeFiles/inspectrum.dir/link.txt
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++   -O2 -std=gnu++11 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/inspectrum.dir/main.cpp.o CMakeFiles/inspectrum.dir/fft.cpp.o CMakeFiles/inspectrum.dir/mainwindow.cpp.o CMakeFiles/inspectrum.dir/inputsource.cpp.o CMakeFiles/inspectrum.dir/spectrogram.cpp.o CMakeFiles/inspectrum.dir/spectrogramcontrols.cpp.o CMakeFiles/inspectrum.dir/inspectrum_automoc.cpp.o  -o inspectrum  /usr/local/opt/qt5/lib/QtWidgets.framework/QtWidgets -lfftw3f /usr/local/opt/qt5/lib/QtGui.framework/QtGui /usr/local/opt/qt5/lib/QtCore.framework/QtCore
juroujin:build meatmanek$

A workaround is to add -DCMAKE_CXX_FLAGS:STRING=-L/usr/local/opt/fftw/lib to my cmake arguments:

juroujin:build meatmanek$ rm -rf *
juroujin:build meatmanek$ Qt5Widgets_DIR=$(brew --prefix qt5) cmake .. -DCMAKE_CXX_FLAGS:STRING=-L/usr/local/opt/fftw/lib
-- The CXX compiler identification is AppleClang 7.0.0.7000176
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.28")
-- checking for module 'fftw3f'
--   found fftw3f, version 3.3.4
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/meatmanek/Dropbox/code/inspectrum/build
juroujin:build meatmanek$ make
Scanning dependencies of target inspectrum_automoc
[ 12%] Automatic moc for target inspectrum
Generating moc_mainwindow.cpp
Generating moc_spectrogram.cpp
Generating moc_spectrogramcontrols.cpp
[ 12%] Built target inspectrum_automoc
Scanning dependencies of target inspectrum
[ 25%] Building CXX object CMakeFiles/inspectrum.dir/main.cpp.o
clang: warning: argument unused during compilation: '-L/usr/local/opt/fftw/lib'
[ 37%] Building CXX object CMakeFiles/inspectrum.dir/fft.cpp.o
clang: warning: argument unused during compilation: '-L/usr/local/opt/fftw/lib'
[ 50%] Building CXX object CMakeFiles/inspectrum.dir/mainwindow.cpp.o
clang: warning: argument unused during compilation: '-L/usr/local/opt/fftw/lib'
[ 62%] Building CXX object CMakeFiles/inspectrum.dir/inputsource.cpp.o
clang: warning: argument unused during compilation: '-L/usr/local/opt/fftw/lib'
[ 75%] Building CXX object CMakeFiles/inspectrum.dir/spectrogram.cpp.o
clang: warning: argument unused during compilation: '-L/usr/local/opt/fftw/lib'
[ 87%] Building CXX object CMakeFiles/inspectrum.dir/spectrogramcontrols.cpp.o
clang: warning: argument unused during compilation: '-L/usr/local/opt/fftw/lib'
[100%] Building CXX object CMakeFiles/inspectrum.dir/inspectrum_automoc.cpp.o
clang: warning: argument unused during compilation: '-L/usr/local/opt/fftw/lib'
Linking CXX executable inspectrum
[100%] Built target inspectrum
juroujin:build meatmanek$

Smarter data loading/processing

Currently the whole input file is loaded, processed (windowing + FFT + normalisation), and stored in a big malloc'd buffer. This means that the initial load time is too long, and there's no means for changing FFT size / overlap size / windowing function etc. during use. Also, the output buffer is going to be too big for larger files.

missing dep on pkgconfig

-- Found PkgConfig: /usr/bin/x86_64-pc-linux-gnu-pkg-config (found version "0.28")

something is looking for pkgconfig but you don't list it as a build time dep.

Time axis labels get cut off

If a label is drawn across the window border, the rest of it doesn't get drawn when it scrolls into full view.

Build fails on OS X, seems to be related to Qt5

cmake succeeds (after also installing gnuradio from Homebrew), but make fails. I'm afraid I have little to no familiarity with Qt, so I'm hoping the error vomit makes sense to you. Any assistance appreciated - let me know if you want any more details or want me to try something.

Dependencies:

 dave  ~  for i in qt5 fftw cmake pkg-config gnuradio; do brew info $i | egrep -B1 Poured; done
/usr/local/Cellar/qt5/5.6.0 (7,288 files, 310.9M)
  Poured from bottle
/usr/local/Cellar/fftw/3.3.4_1 (45 files, 10.2M) *
  Poured from bottle
/usr/local/Cellar/cmake/3.5.1 (2,010 files, 27.5M) *
  Poured from bottle
/usr/local/Cellar/pkg-config/0.29.1 (10 files, 627.2K) *
  Poured from bottle
/usr/local/Cellar/gnuradio/3.7.9.1 (3,350 files, 125.4M) *
  Poured from bottle

cmake:

 dave  ~  src  inspectrum  build  CMAKE_PREFIX_PATH=/usr/local/opt/qt5/lib/cmake cmake ..
-- The CXX compiler identification is AppleClang 7.3.0.7030029
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.1")
-- Boost version: 1.60.0
-- Found the following Boost libraries:
--   system
--   program_options
Checking for GNU Radio Module: RUNTIME
-- Checking for module 'gnuradio-runtime'
--   Found gnuradio-runtime, version 3.7.9.1
 * INCLUDES=/usr/local/Cellar/gnuradio/3.7.9.1/include
 * LIBS=/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-runtime.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-pmt.dylib
-- Found GNURADIO_RUNTIME: /usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-runtime.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-pmt.dylib
GNURADIO_RUNTIME_FOUND = TRUE
Checking for GNU Radio Module: ANALOG
-- Checking for module 'gnuradio-analog'
--   Found gnuradio-analog, version 3.7.9.1
 * INCLUDES=/usr/local/Cellar/gnuradio/3.7.9.1/include
 * LIBS=/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-analog.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-runtime.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-pmt.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libvolk.dylib
-- Found GNURADIO_ANALOG: /usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-analog.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-runtime.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-pmt.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libvolk.dylib
GNURADIO_ANALOG_FOUND = TRUE
Checking for GNU Radio Module: BLOCKS
-- Checking for module 'gnuradio-blocks'
--   Found gnuradio-blocks, version 3.7.9.1
 * INCLUDES=/usr/local/Cellar/gnuradio/3.7.9.1/include
 * LIBS=/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-blocks.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-runtime.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-pmt.dylib
-- Found GNURADIO_BLOCKS: /usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-blocks.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-runtime.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-pmt.dylib
GNURADIO_BLOCKS_FOUND = TRUE
Checking for GNU Radio Module: FILTER
-- Checking for module 'gnuradio-filter'
--   Found gnuradio-filter, version 3.7.9.1
 * INCLUDES=/usr/local/Cellar/gnuradio/3.7.9.1/include
 * LIBS=/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-filter.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-fft.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-runtime.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-pmt.dylib
-- Found GNURADIO_FILTER: /usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-filter.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-fft.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-runtime.dylib;/usr/local/Cellar/gnuradio/3.7.9.1/lib/libgnuradio-pmt.dylib
GNURADIO_FILTER_FOUND = TRUE
-- Checking for module 'fftw3f'
--   Found fftw3f, version 3.3.4
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/dave/src/inspectrum/build

make:

 dave  ~  src  inspectrum  build  make
Scanning dependencies of target inspectrum_automoc
[  5%] Automatic moc for target inspectrum
Generating moc_cursors.cpp
Generating moc_mainwindow.cpp
Generating moc_plotview.cpp
Generating moc_spectrogramcontrols.cpp
Generating moc_spectrogramplot.cpp
Generating moc_traceplot.cpp
[  5%] Built target inspectrum_automoc
Scanning dependencies of target inspectrum
[ 11%] Building CXX object CMakeFiles/inspectrum.dir/cursors.cpp.o
In file included from /Users/dave/src/inspectrum/cursors.cpp:20:
In file included from /usr/local/opt/qt5/lib/QtCore.framework/Headers/QDebug:1:
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:70:9: error: unknown type name 'QMessageLogContext'
        QMessageLogContext context;
        ^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:105:36: error: expected ';' at end of declaration list
    inline void swap(QDebug &other) Q_DECL_NOTHROW { qSwap(stream, other.stream); }
                                   ^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:142:77: error: no member named 'size' in 'QLatin1String'
    inline QDebug &operator<<(QLatin1String t) { putByteArray(t.latin1(), t.size(), ContainsLatin1); return maybeSpace(); }
                                                                          ~ ^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:157:1: error: no member named 'isDetached' in 'QDebug'
Q_DECLARE_SHARED(QDebug)
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/QtCore/qglobal.h:2330:63: note: expanded from macro 'Q_DECLARE_SHARED'
template <> inline bool qIsDetached<TYPE>(TYPE &t) { return t.isDetached(); } \
                                                            ~ ^
In file included from /Users/dave/src/inspectrum/cursors.cpp:20:
In file included from /usr/local/opt/qt5/lib/QtCore.framework/Headers/QDebug:1:
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:157:1: error: no member named 'data_ptr' in 'QDebug'
Q_DECLARE_SHARED(QDebug)
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/QtCore/qglobal.h:2332:16: note: expanded from macro 'Q_DECLARE_SHARED'
{ qSwap(value1.data_ptr(), value2.data_ptr()); } \
        ~~~~~~ ^
In file included from /Users/dave/src/inspectrum/cursors.cpp:20:
In file included from /usr/local/opt/qt5/lib/QtCore.framework/Headers/QDebug:1:
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:157:1: error: no member named 'data_ptr' in 'QDebug'
Q_DECLARE_SHARED(QDebug)
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/QtCore/qglobal.h:2332:35: note: expanded from macro 'Q_DECLARE_SHARED'
{ qSwap(value1.data_ptr(), value2.data_ptr()); } \
                           ~~~~~~ ^
In file included from /Users/dave/src/inspectrum/cursors.cpp:20:
In file included from /usr/local/opt/qt5/lib/QtCore.framework/Headers/QDebug:1:
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:157:1: error: no member named 'data_ptr' in 'QDebug'
Q_DECLARE_SHARED(QDebug)
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/QtCore/qglobal.h:2332:50: note: expanded from macro 'Q_DECLARE_SHARED'
{ qSwap(value1.data_ptr(), value2.data_ptr()); } \
                                                 ^
/usr/local/include/QtCore/qglobal.h:2324:19: note: expanded from macro '\
Q_DECLARE_SHARED_STL'
    { swap(value1.data_ptr(), value2.data_ptr()); } \
           ~~~~~~ ^
In file included from /Users/dave/src/inspectrum/cursors.cpp:20:
In file included from /usr/local/opt/qt5/lib/QtCore.framework/Headers/QDebug:1:
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:157:1: error: no member named 'data_ptr' in 'QDebug'
Q_DECLARE_SHARED(QDebug)
^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/QtCore/qglobal.h:2332:50: note: expanded from macro 'Q_DECLARE_SHARED'
{ qSwap(value1.data_ptr(), value2.data_ptr()); } \
                                                 ^
/usr/local/include/QtCore/qglobal.h:2324:38: note: expanded from macro '\
Q_DECLARE_SHARED_STL'
    { swap(value1.data_ptr(), value2.data_ptr()); } \
                              ~~~~~~ ^
In file included from /Users/dave/src/inspectrum/cursors.cpp:20:
In file included from /usr/local/opt/qt5/lib/QtCore.framework/Headers/QDebug:1:
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:284:42: error: no member named 'IsQEnumHelper' in namespace 'QtPrivate'
typename QtPrivate::QEnableIf<QtPrivate::IsQEnumHelper<T>::Value, QDebug>::Type
                              ~~~~~~~~~~~^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:284:56: error: 'T' does not refer to a value
typename QtPrivate::QEnableIf<QtPrivate::IsQEnumHelper<T>::Value, QDebug>::Type
                                                       ^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:283:19: note: declared here
template<typename T>
                  ^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:284:60: error: no member named 'Value' in the global namespace
typename QtPrivate::QEnableIf<QtPrivate::IsQEnumHelper<T>::Value, QDebug>::Type
                                                         ~~^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:284:65: error: a template declaration can only declare a single entity
typename QtPrivate::QEnableIf<QtPrivate::IsQEnumHelper<T>::Value, QDebug>::Type
                                                                ^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:375:1: error: unknown type name 'Q_FORWARD_DECLARE_OBJC_CLASS'
Q_FORWARD_DECLARE_OBJC_CLASS(NSObject);
^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:376:34: error: unknown type name 'Q_FORWARD_DECLARE_CF_TYPE'
QT_FOR_EACH_CORE_FOUNDATION_TYPE(QT_FORWARD_DECLARE_CF_TYPE)
                                 ^
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:376:34: error: unknown type name 'Q_FORWARD_DECLARE_CF_TYPE'
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:376:34: error: unknown type name 'Q_FORWARD_DECLARE_CF_TYPE'
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:376:34: error: unknown type name 'Q_FORWARD_DECLARE_CF_TYPE'
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:376:34: error: unknown type name 'Q_FORWARD_DECLARE_CF_TYPE'
/usr/local/opt/qt5/lib/QtCore.framework/Headers/qdebug.h:376:34: error: unknown type name 'Q_FORWARD_DECLARE_CF_TYPE'
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[2]: *** [CMakeFiles/inspectrum.dir/cursors.cpp.o] Error 1
make[1]: *** [CMakeFiles/inspectrum.dir/all] Error 2
make: *** [all] Error 2

clarify dep on fftw

gentoo has fftw 2 and fftw 3 please update documentation to show version requirement (assuming 3.x)

Example Usage

Hi there,

I was wondering if there are any examples for how to use inspectrum with data captured from a HackRF or RTL-SDR. I recognize that neither of these Decices produce 32-bit unsigned samples, but is there a way to convert their 8-bit samples for use with inspectrum?

Unable to load very large recordings

I'm unable to open some recordings I made recently. This is the error:

kevin@[hostname]:/media/Quark/recordings$ inspectrum 20160413-195414_COMPLEX_filtered_xlated_costas.cfile 
terminate called after throwing an instance of 'std::runtime_error'
  what():  Error opening file
Aborted

This particular recording is from GNURadio, from a USRP N210 with a sample rate of 250000. It is 247GB, which I believe to be the issue. I also tested with a 443GB recording made the same way with the same results. Interestingly, if I use 'dd' to make a new file with only the first 50MB, it loads fine.

The recordings are complex float32 straight from gnuradio, made with a "file sink" block. This is with the latest inspectrum code as of about 30 minutes ago (~9:00PM EDT, 2016-04-22).

Inspectrum's main appeal to me is its ability to support "large (multi-gigabyte) files". Is this simply too large to deal with? Eventually I will have more recordings like this, and likely even larger.

build fails: libvolk.so: error adding symbols: DSO missing from command line

gnuradio@vbox:~/inspectrum/build$ make
[ 4%] Automoc for target inspectrum
[ 4%] Built target inspectrum_automoc
Linking CXX executable inspectrum
/usr/bin/ld: CMakeFiles/inspectrum.dir/rotator_ex_cc.cpp.o: undefined reference to symbol 'volk_32fc_s32fc_x2_rotator_32fc'
/usr/local/lib/libvolk.so.1.2.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [inspectrum] Error 1
make[1]: *** [CMakeFiles/inspectrum.dir/all] Error 2
make: *** [all] Error 2

This is a question not an issue.

I was just wondering whether "Bit Frequency" is effectively synonymous with "baudrate"? I have spent some time researching the relationship between baudrate and symbols etc, however, some of the labels used in Inspectrum appear to me to be specific to Inspectrum, so I wanted to seek clarification on this.

I am using the waveform branch.

Many thanks!

Crashing on file load.

Hi there since the change which included different file formats, i no longer can open up .RAW files that have been generated from Gnuradio --> File Sink.

Program crashes as soon as i Open the file, haven't tested it by renaming the extension to a supported one but thought i would bring it to your attention.

Cheers

Controls

Need some controls, current plan is a column on the left for:

  • FFT size
  • Sample rate
  • Contrast
  • Colour map maybe later
  • File loading (?)
  • Option to scale spectrogram to window width (?)

Export selection

Add function for exporting a chunk of samples selected by cursors

getting started - sample file request

Very interesting piece of software. To help new users get a feel for the software, it would be very handy if there was a "example_files" directory added to the project that had a couple of short files for analysis. A simple fsk recording, an ook signal like a keyfob or weather station, and something like a pocsag pager would be interesting to examine. A readme file with the sample rates and suggested viewing settings for each recoding would also be useful.
cheers and thanks for making this program available
Lawrence VE7IT
Nanoose Bay Canada

Cursor time and frequency display

It would be really nice if there were a way to see the current frequency and time of the current position of the mouse. That would make determining things like baud rate and deviation much easier.

tuner.cpp std::abs error

When building the waveform branch on OSX, I ran into this error below. Adding "#include < cstdlib >" without the spaces to tuner.cpp resolved this error.

[ 90%] Building CXX object CMakeFiles/inspectrum.dir/tuner.cpp.o
/Users/user/sdr/inspectrum-waveform/tuner.cpp:45:34: error: no member named 'abs' in namespace 'std'; did you mean simply 'abs'?
_deviation = std::max(2, std::abs(sender->pos() - cfCursor->pos()));
^~~~~~~~
abs
/usr/include/stdlib.h:129:6: note: 'abs' declared here
int abs(int) __pure2;
^
1 error generated.
make[2]: *** [CMakeFiles/inspectrum.dir/tuner.cpp.o] Error 1
make[1]: *** [CMakeFiles/inspectrum.dir/all] Error 2
make: *** [all] Error 2

Bring back the time markers

Older builds had the option to enable markers on the time axis. The newest build of master seems to be lacking this feature. I used those time markers with a separate script to trim sections of a file. Even after #49 gets implemented, it would be nice to have those markers back.

Time and frequency deltas

It would be nice to have the ability to do time and frequency deltas like baudline. Something where you can click to points and get both a high res time and frequency difference between the two selected points.

Spectrogram width is limited

The maximum width/height of a QWidget is 16777215 and this is pretty easy to hit with a large file / high zoom / small fft size.
Might need to rethink how the spectrogram drawing is done.

Feature request, trim and save as

Hi Miek,

Just a feature request only if possible. It would be great to have the ability to trim a file using the selection cursors along with a save as option.

Cheers

Windows support

Biggest change will be abstraction of platform primitives (i.e. mmap -> MapViewOfFile, etc). Qt should mean basic functionality works fine without many changes, although this remains to be tested.

Feature request for adding notes

Hi Miek,

Sorry one more feature request if possible, i would love to have the ability to add some notes to a file, in particular the 1's and 0's lined up with the cursors and the ability to copy and paste them to the clipboard, something like what i have attached. Thanks again.
screenshot from 2016-04-20 08-48-45

Scroll bar indicator colour

One more i promise. :-)

Is it possible to make the scroll bar indicator a darker or different colour i find it hard to see it at times.

screenshot from 2016-04-20 10-31-18

Threading

The FFT calculation + pixmap generation really needs to be pushed out of the UI thread.

I'm thinking something like this:

  • paintEvent figures out what tiles it needs to display, loops through requesting from the cache and displaying them.
  • On a cache miss, that tile ID is added to a job list.
  • Worker thread(s) pop a job off the list, do the processing, then insert FFT results & pixmap data into the cache.
  • Once a new tile is done, call invalidate() on that area and paintEvent should run again.

A long scroll on a slow machine could queue up a lot of jobs, including ones are way out of view once the scrolling is done. I'm thinking the jobs should be processed by most recent first, then the job list should be limited in length with older jobs being discarded.

As a future addon I want to be able to peek ahead and start processing nearby tiles ready to be shown. Just adding these to the end of the job list if there's space should work (they should not be higher priority than jobs for the current view).

Crash at 16 GiB into the file

I've just tried to work with a roughly 40 GiB large file at 2 Msps.

At roughly 1073 seconds into the file inspectrum crashes with the following backtrace:

Program received signal SIGSEGV, Segmentation fault.
__memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S:33
33  ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S: No such file or directory.
(gdb) bt
#0  __memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S:33
#1  0x000000000040eab6 in InputSource::getSamples(float (*) [2], int, int) ()
#2  0x000000000040f787 in Spectrogram::getLine(float*, long) ()
#3  0x000000000040f621 in Spectrogram::getFFTTile(long) ()
#4  0x000000000040f301 in Spectrogram::getPixmapTile(long) ()
#5  0x000000000040f0ea in Spectrogram::paintEvent(QPaintEvent*) ()

1073 seconds at 2 Msps and 8 byte per sample equal roughly 15.99 GiB, so I guess there is some limit at the 16 GiB mark.

Question: Vertical/horizontal

Hi there

All the tutorials/guides display the data vertical, but when I import my file from hackrf_transfer (hackrf_transfer -r 27165000.s8 -g 16 -l 32 -f 27165000), and converted via. sox (sox -t s8 27165000.s8 -t f32 out.cfile) data is being displayed horizontally - is this intentional/why does it do that? :)

screen shot 2016-05-29 at 21 13 18

Qt4 support

Look into changes for Qt4 support and do it if possible. Otherwise make it more obvious that Qt5 is required.

Add a tag to the repo

I know for some reason that more and more software developers think that having a public git repo is fine and that releases are unneeded, but for the sake of distros that sometimes want to include your software, having a release (or even just a git tag) is a magical thing. Looks like things are working fairly well right now, how about a git tag? Seems that 2015.09 is a popular format for tags when you don't want to have to deal with version numbers.

Compiling with OSX - QT issue and solution

Apparently there is an issue when you try to compile under OSX.
Problem occurs when QT4 is installed and collides with QT5 while running Cmake.
I have been able to solve this issue simply by running:

CMAKE_PREFIX_PATH=$(brew --prefix qt5)/lib/cmake cmake .. -DCMAKE_CXX_FLAGS:STRING=-I/usr/local/opt/qt5/include ..

I recommend adding this to readme.md.

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.