Giter Site home page Giter Site logo

suscan's Introduction

Suscan - A realtime DSP library

Important note: if you are looking for the graphical application based on this library, it has been deprecated and removed from the source tree. Suscan (GUI) was a GTK3-based application with poor performance and responsiveness that was eventually replaced by the Qt5 application SigDigger. You will still need Suscan (library) in order to compile SigDigger.

Suscan is a realtime DSP processing library. It provides a set of useful abstractions to perform dynamic digital signal analysis and demodulation. Suscan offers features like:

  • Multicore-friendly signal processing, based on worker threads
  • Generic ASK, FSK, PSK and audio demodulators
  • An extensible codec interface
  • Configuration file API (XML)
  • Source API based on SoapySDR

Getting the code

Just clone it from the GitHub repository. Make sure you pass --recurse-submodules to git clone so all required submodules are also cloned.

% git clone --recurse-submodules https://github.com/BatchDrake/suscan.git

Building and installing Suscan

In order to build Suscan, you will need the development files for the following packages:

  • sigutils
  • fftw3
  • sndfile
  • SoapySDR
  • libxml-2.0

If you are in a Debian-like operating system, you will also need cmake and build-essential.

After installing all dependencies, enter Suscan's source directory and compile by typing:

% cd suscan
% mkdir build
% cd build
% cmake ..
% make

If the previous commands were successful, you are ready to install Suscan in your system by executing (as root):

# make install

You can verify your installation by running:

% suscan.status

If everything went fine, you should see the message:

suscan.status: suscan library loaded successfully.

suscan's People

Contributors

antoniovazquezblanco avatar arf20 avatar batchdrake avatar dependabot[bot] avatar jedi7 avatar jeffpc avatar nirei avatar sultanqasim 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

suscan's Issues

Add Viterbi decoder

Add a GUI to configure a Viterbi decoder. Some insights by EA4GPZ:

  • Most people use CCSDS polynomials
  • These polynomials can be applied in different order, and one of them may be inverted. See http://destevez.net/2017/01/coding-for-hit-satellites-and-other-ccsds-satellites/
  • Bits must be grouped appropriately to fit the beginning of each codeword. If the size of the codeword is n, there will be n possible groupings. This means that the Trellis tree must be traversed n times in parallel with increasing symbol offsets.

Summary: 95% of the time we will have CCSDS polynomials with rate = 1/2 and k = 7. This default configuration must appear somewhere in the GUI (like a preset)

cc: warning: argument unused during compilation: '-s' [-Wunused-command-line-argument]

When making a release build, clang outputs the following for each .c file:

cc: warning: argument unused during compilation: '-s' [-Wunused-command-line-argument]

I'm assuming this is supposed to be the strip option on gcc, which is AFAIK a linker option. Therefore, it should not be set on CMAKE_C_FLAGS_RELEASE but rather on whatever the linking equivalent is.

build error: conflicting types for ‘suscan_object_get_field_float’

$ sigutils_CFLAGS="-I$(pwd)/../sigutils" sigutils_LIBS="-L$(pwd)/../sigutils/sigutils/.libs" ./configure

$ make
make  all-recursive
make[1]: Entering directory '/sources/suscan'
Making all in util
make[2]: Entering directory '/sources/suscan/util'
/bin/bash ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..  -I. -I  -I. -ggdb -I/sources/suscan/../sigutils -I/usr/include/libxml2 -DPKGDATADIR=\"/usr/local/share/suscan\"   -MT libutil_la-object.lo -MD -MP -MF .deps/libutil_la-object.Tpo -c -o libutil_la-object.lo `test -f 'object.c' || echo './'`object.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I. -I -I. -ggdb -I/sources/suscan/../sigutils -I/usr/include/libxml2 -DPKGDATADIR=\"/usr/local/share/suscan\" -MT libutil_la-object.lo -MD -MP -MF .deps/libutil_la-object.Tpo -c object.c  -fPIC -DPIC -o .libs/libutil_la-object.o
object.c:306:1: error: conflicting types for ‘suscan_object_get_field_float’
  306 | suscan_object_get_field_float(
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from object.c:26:
object.h:110:9: note: previous declaration of ‘suscan_object_get_field_float’ was here
  110 | SUFLOAT suscan_object_get_field_float(
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
object.c: At top level:
object.c:388:1: error: conflicting types for ‘suscan_object_set_field_float’
  388 | suscan_object_set_field_float(
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from object.c:26:
object.h:125:8: note: previous declaration of ‘suscan_object_set_field_float’ was here
  125 | SUBOOL suscan_object_set_field_float(
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [Makefile:417: libutil_la-object.lo] Error 1
make[2]: Leaving directory '/sources/suscan/util'
make[1]: *** [Makefile:544: all-recursive] Error 1
make[1]: Leaving directory '/sources/suscan'
make: *** [Makefile:408: all] Error 2

Crash into analyze file

When i start Open Inspector for IQ-rec file, app crash with messages:
"Gtk-Message: 22:38:03.538: GtkDialog mapped without a transient parent. This is discouraged.
"Spectrum zoom: 1.1x"
"Spectrum zoom: 1.2x"
"Spectrum zoom: 1.4x"
"Spectrum zoom: 1.5x"
"Spectrum zoom: 1.7x"
"Spectrum zoom: 1.9x"
"Spectrum zoom: 2.1x"
"Spectrum zoom: 2.2x"
"Spectrum zoom: 2.5x"
"Spectrum zoom: 2.7x"
"Spectrum zoom: 3.0x"
"Spectrum zoom: 3.3x"
"Spectrum zoom: 3.7x"
"Spectrum zoom: 4.1x"
"Spectrum zoom: 4.4x"
"Spectrum zoom: 4.9x"
"Spectrum zoom: 5.5x"
"Spectrum zoom: 5.6x"
"Spectrum zoom: 5.1x"
"Spectrum zoom: 4.6x"
"Spectrum zoom: 3.6x"
double free or corruption (fasttop)double free or corruption (fasttop)double free or corruption (fasttop)"

Thats happen not always (memory leaking, may be)

Build issues on arm64 ubuntu 18.04

Trying to install and i get the following error when i run make:
[ 83%] Linking C executable suscan.status libsuscan.so.0.3.0: undefined reference tompg123_format'
libsuscan.so.0.3.0: undefined reference to id3tag_genre_list' libsuscan.so.0.3.0: undefined reference to vorbis_analysis_headerout'
libsuscan.so.0.3.0: undefined reference to lame_set_out_samplerate' libsuscan.so.0.3.0: undefined reference to ogg_stream_packetin'
libsuscan.so.0.3.0: undefined reference to lame_encode_buffer_float' libsuscan.so.0.3.0: undefined reference to lame_encode_buffer'
libsuscan.so.0.3.0: undefined reference to lame_get_encoder_delay' libsuscan.so.0.3.0: undefined reference to mpg123_new'
libsuscan.so.0.3.0: undefined reference to lame_set_VBR_mean_bitrate_kbps' libsuscan.so.0.3.0: undefined reference to FLAC__metadata_object_vorbiscomment_find_entry_from'
libsuscan.so.0.3.0: undefined reference to FLAC__StreamEncoderInitStatusString' libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_process_until_end_of_metadata'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_seek_absolute' libsuscan.so.0.3.0: undefined reference to opus_multistream_decoder_destroy'
libsuscan.so.0.3.0: undefined reference to ogg_page_eos' libsuscan.so.0.3.0: undefined reference to mpg123_param'
libsuscan.so.0.3.0: undefined reference to ogg_packet_clear' libsuscan.so.0.3.0: undefined reference to mpg123_plain_strerror'
libsuscan.so.0.3.0: undefined reference to opus_multistream_encode_float' libsuscan.so.0.3.0: undefined reference to lame_encode_buffer_interleaved_ieee_double'
libsuscan.so.0.3.0: undefined reference to lame_set_write_id3tag_automatic' libsuscan.so.0.3.0: undefined reference to opus_multistream_decoder_create'
libsuscan.so.0.3.0: undefined reference to vorbis_synthesis_headerin' libsuscan.so.0.3.0: undefined reference to vorbis_synthesis_trackonly'
libsuscan.so.0.3.0: undefined reference to lame_set_brate' libsuscan.so.0.3.0: undefined reference to mpg123_open_handle'
libsuscan.so.0.3.0: undefined reference to opus_multistream_encoder_ctl' libsuscan.so.0.3.0: undefined reference to vorbis_encode_init_vbr'
libsuscan.so.0.3.0: undefined reference to FLAC__metadata_object_new' libsuscan.so.0.3.0: undefined reference to ogg_sync_init'
libsuscan.so.0.3.0: undefined reference to FLAC__metadata_object_delete' libsuscan.so.0.3.0: undefined reference to ogg_sync_reset'
libsuscan.so.0.3.0: undefined reference to vorbis_analysis_blockout' libsuscan.so.0.3.0: undefined reference to vorbis_info_clear'
libsuscan.so.0.3.0: undefined reference to vorbis_analysis_buffer' libsuscan.so.0.3.0: undefined reference to lame_get_version'
libsuscan.so.0.3.0: undefined reference to opus_multistream_encoder_destroy' libsuscan.so.0.3.0: undefined reference to lame_encode_buffer_interleaved_ieee_float'
libsuscan.so.0.3.0: undefined reference to opus_multistream_surround_encoder_create' libsuscan.so.0.3.0: undefined reference to mpg123_read'
libsuscan.so.0.3.0: undefined reference to lame_set_bWriteVbrTag' libsuscan.so.0.3.0: undefined reference to mpg123_length'
libsuscan.so.0.3.0: undefined reference to vorbis_synthesis' libsuscan.so.0.3.0: undefined reference to lame_get_VBR_mean_bitrate_kbps'
libsuscan.so.0.3.0: undefined reference to opus_multistream_decode_float' libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_set_metadata_respond_all'
libsuscan.so.0.3.0: undefined reference to mpg123_replace_reader_handle' libsuscan.so.0.3.0: undefined reference to FLAC__StreamDecoderErrorStatusString'
libsuscan.so.0.3.0: undefined reference to id3tag_set_track' libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_finish'
libsuscan.so.0.3.0: undefined reference to lame_get_brate' libsuscan.so.0.3.0: undefined reference to vorbis_comment_query'
libsuscan.so.0.3.0: undefined reference to ogg_sync_pageseek' libsuscan.so.0.3.0: undefined reference to FLAC__StreamDecoderStateString'
libsuscan.so.0.3.0: undefined reference to vorbis_block_clear' libsuscan.so.0.3.0: undefined reference to lame_close'
libsuscan.so.0.3.0: undefined reference to lame_set_VBR' libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_finish'
libsuscan.so.0.3.0: undefined reference to mpg123_getformat' libsuscan.so.0.3.0: undefined reference to lame_get_VBR'
libsuscan.so.0.3.0: undefined reference to id3tag_set_genre' libsuscan.so.0.3.0: undefined reference to vorbis_synthesis_blockin'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_process_interleaved' libsuscan.so.0.3.0: undefined reference to ogg_page_serialno'
libsuscan.so.0.3.0: undefined reference to vorbis_analysis' libsuscan.so.0.3.0: undefined reference to lame_encode_buffer_ieee_double'
libsuscan.so.0.3.0: undefined reference to FLAC__metadata_object_vorbiscomment_append_comment' libsuscan.so.0.3.0: undefined reference to lame_get_framesize'
libsuscan.so.0.3.0: undefined reference to vorbis_synthesis_init' libsuscan.so.0.3.0: undefined reference to lame_init'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_set_channels' libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_new'
libsuscan.so.0.3.0: undefined reference to ogg_stream_reset_serialno' libsuscan.so.0.3.0: undefined reference to ogg_stream_flush_fill'
libsuscan.so.0.3.0: undefined reference to id3tag_set_year' libsuscan.so.0.3.0: undefined reference to lame_set_in_samplerate'
libsuscan.so.0.3.0: undefined reference to opus_multistream_decoder_ctl' libsuscan.so.0.3.0: undefined reference to ogg_stream_reset'
libsuscan.so.0.3.0: undefined reference to lame_get_id3v2_tag' libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_new'
libsuscan.so.0.3.0: undefined reference to ogg_stream_pageout_fill' libsuscan.so.0.3.0: undefined reference to lame_encode_buffer_interleaved_int'
libsuscan.so.0.3.0: undefined reference to lame_set_VBR_quality' libsuscan.so.0.3.0: undefined reference to ogg_stream_packetpeek'
libsuscan.so.0.3.0: undefined reference to lame_encode_buffer_ieee_float' libsuscan.so.0.3.0: undefined reference to opus_packet_get_nb_samples'
libsuscan.so.0.3.0: undefined reference to lame_set_num_channels' libsuscan.so.0.3.0: undefined reference to vorbis_synthesis_pcmout'
libsuscan.so.0.3.0: undefined reference to vorbis_packet_blocksize' libsuscan.so.0.3.0: undefined reference to mpg123_id3'
libsuscan.so.0.3.0: undefined reference to lame_get_lametag_frame' libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_set_compression_level'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_delete' libsuscan.so.0.3.0: undefined reference to ogg_sync_wrote'
libsuscan.so.0.3.0: undefined reference to vorbis_analysis_init' libsuscan.so.0.3.0: undefined reference to vorbis_dsp_clear'
libsuscan.so.0.3.0: undefined reference to ogg_stream_pageout' libsuscan.so.0.3.0: undefined reference to mpg123_delete'
libsuscan.so.0.3.0: undefined reference to vorbis_block_init' libsuscan.so.0.3.0: undefined reference to opus_strerror'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_init_stream' libsuscan.so.0.3.0: undefined reference to lame_get_VBR_q'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_set_sample_rate' libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_get_decode_position'
libsuscan.so.0.3.0: undefined reference to lame_get_bWriteVbrTag' libsuscan.so.0.3.0: undefined reference to id3tag_set_title'
libsuscan.so.0.3.0: undefined reference to opus_get_version_string' libsuscan.so.0.3.0: undefined reference to FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair'
libsuscan.so.0.3.0: undefined reference to mpg123_seek' libsuscan.so.0.3.0: undefined reference to id3tag_set_comment'
libsuscan.so.0.3.0: undefined reference to vorbis_synthesis_restart' libsuscan.so.0.3.0: undefined reference to ogg_stream_pagein'
libsuscan.so.0.3.0: undefined reference to vorbis_synthesis_read' libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_process_single'
libsuscan.so.0.3.0: undefined reference to lame_get_out_samplerate' libsuscan.so.0.3.0: undefined reference to ogg_stream_flush'
libsuscan.so.0.3.0: undefined reference to ogg_stream_packetout' libsuscan.so.0.3.0: undefined reference to ogg_sync_buffer'
libsuscan.so.0.3.0: undefined reference to id3tag_set_artist' libsuscan.so.0.3.0: undefined reference to vorbis_info_blocksize'
libsuscan.so.0.3.0: undefined reference to ogg_page_granulepos' libsuscan.so.0.3.0: undefined reference to id3tag_set_album'
libsuscan.so.0.3.0: undefined reference to lame_get_id3v1_tag' libsuscan.so.0.3.0: undefined reference to mpg123_init'
libsuscan.so.0.3.0: undefined reference to lame_encode_flush' libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_set_metadata'
libsuscan.so.0.3.0: undefined reference to lame_encode_buffer_interleaved' libsuscan.so.0.3.0: undefined reference to vorbis_version_string'
libsuscan.so.0.3.0: undefined reference to opus_multistream_encoder_create' libsuscan.so.0.3.0: undefined reference to vorbis_comment_init'
libsuscan.so.0.3.0: undefined reference to vorbis_comment_clear' libsuscan.so.0.3.0: undefined reference to lame_init_params'
libsuscan.so.0.3.0: undefined reference to ogg_stream_clear' libsuscan.so.0.3.0: undefined reference to ogg_page_bos'
libsuscan.so.0.3.0: undefined reference to id3tag_init' libsuscan.so.0.3.0: undefined reference to vorbis_bitrate_addblock'
libsuscan.so.0.3.0: undefined reference to ogg_page_packets' libsuscan.so.0.3.0: undefined reference to ogg_stream_init'
libsuscan.so.0.3.0: undefined reference to mpg123_info' libsuscan.so.0.3.0: undefined reference to vorbis_comment_add_tag'
libsuscan.so.0.3.0: undefined reference to lame_encode_buffer_int' libsuscan.so.0.3.0: undefined reference to mpg123_scan'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_get_state' libsuscan.so.0.3.0: undefined reference to vorbis_bitrate_flushpacket'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_decoder_init_stream' libsuscan.so.0.3.0: undefined reference to vorbis_analysis_wrote'
libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_delete' libsuscan.so.0.3.0: undefined reference to mpg123_close'
libsuscan.so.0.3.0: undefined reference to vorbis_info_init' libsuscan.so.0.3.0: undefined reference to FLAC__stream_encoder_set_bits_per_sample'
libsuscan.so.0.3.0: undefined reference to ogg_sync_clear' libsuscan.so.0.3.0: undefined reference to lame_get_mode'
`

Library not found macOS

Hey
Fetched the new branch (feature/raw-inspector)
Clean build on macOS gives me an error when makeing:

[ 88%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/psd.c.o
[ 90%] Linking C shared library libsuscan.dylib
clang: error: no such file or directory: 'libsuscan.dylib'
make[2]: *** [libsuscan.dylib] Error 1
make[1]: *** [CMakeFiles/suscan.dir/all] Error 2
make: *** [all] Error 2

Modulo de analisis "offline"

Hola Gonzalo.
Hay varias razones para que el analisis se haga offline a partir de grabaciones:
1.- Cuando las señales son desconocidads y/o no documentadas, son necesarias varias grabaciones para llegar a resultados aceptables.
2- Las señales "burst" de muy corto ciclo de trabajo suelen pasar desapercibidas en los sitemas en tiempo real.
3- Las señales ARQ adaptativas pueden ir cambiando de modo sobre la marcha, lo que dificulta su analisis en tiempo real.
4- Hay vario modem hibridos que cambian la modulacion sobre la marcha, lo que puede inducir a errores.

Hay mas razones para que el analisis se haga offline como en SA, lo que no es obice para que tambien se puedan hacer muchas cosas en tiempo real, especialmente cuando ya se conocen los parametros de la señal bajo analisis.

Si consideras la posibilidad de implemetar este modo, podemos aportar ideas al respecto.

Saludos.
ANgazu.

Refactor inspector API

The suscan_inspector class actually refers to a PSK inspector and this is okay for now. However, as we plan to add OFDM analysis support in the future, the inspector class must be an abstract class from which we derive different concrete inspectors (PSK, OFDM, etc).

Also, inspector configuration is set by passing an ad-hoc structure describing several PSK parameters. This is not scalable: communication between the inspector and the client (i.e. the GUI) must be generic and discoverable, so that the GUI can create a new interface for new inspectors at runtime.

We can do that by improving the suscan_config_t type and adding namespaced keys like agc.enabled, agc.alpha, costas.order, costas.alpha, etc. There will be an API to test the existence of a given namespace, which will be used by the GUI to create the appropriate controls in the inspector tab.

Define a proper versioning system for Suscan

Suscan lacks a sane versioning system. This versioning system should provide the following information to the user:

  • Current API version (header files) + macros
  • Library API version and maintenance version
  • Build string

Add additional spectrum sources

Add and/or implement the following spectrum sources:

  • Cyclostationary analysis for all sources.
  • Simple time derivative
  • Absolute value of the time derivative
  • Quadrature-based FM detection (only for FSK sources)
  • Phase spectrum

suscan: main/main.c:175: suscan_gui_disconnect: Assertion `gui->analyzer != NULL' failed.

Hi,
very interesting tool !
unfortunately it crashes before doing anything useful :-(
Last traces :

(suscan:7078): Gdk-CRITICAL **: 09:23:58.208: gdk_window_create_similar_surface: assertion 'GDK_IS_WINDOW (window)' failed

(suscan:7078): Gdk-CRITICAL **: 09:23:58.208: gdk_window_create_similar_surface: assertion 'GDK_IS_WINDOW (window)' failed

(suscan:7078): Gdk-CRITICAL **: 09:23:58.208: gdk_window_create_similar_surface: assertion 'GDK_IS_WINDOW (window)' failed

(suscan:7078): Gdk-CRITICAL **: 09:23:58.208: gdk_window_create_similar_surface: assertion 'GDK_IS_WINDOW (window)' failed

(suscan:7078): Gdk-CRITICAL **: 09:23:58.208: gdk_window_create_similar_surface: assertion 'GDK_IS_WINDOW (window)' failed

(suscan:7078): Gdk-CRITICAL **: 09:23:58.209: gdk_window_create_similar_surface: assertion 'GDK_IS_WINDOW (window)' failed

(suscan:7078): Gdk-CRITICAL **: 09:23:58.209: gdk_window_create_similar_surface: assertion 'GDK_IS_WINDOW (window)' failed
suscan: main/main.c:175: suscan_gui_disconnect: Assertion `gui->analyzer != NULL' failed.
Abort (core dumped)

the crash is after displaying a spectrum.
OS : Ubuntu Mate 18.04.1 LTS
libgtk-3 3.22.30-1ubuntu1

Thanks for your help

No package "SoapySDR" found

On 18.04 with myriadrf1 reps it appears you get soapysdr tools instead of just soapsdr. Could this be the cause of the below issue? Looking forward to trying out SigDigger.

-- Checking for module 'SoapySDR>=0.5
-- No package 'SoapySDR' found
CMake Error at /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:415 (message):
A required package was not found

sudo apt install soapysdr
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'soapysdr-tools' instead of 'soapysdr'
soapysdr-tools is already the newest version (0.7.1-myriadrf1~ubuntu18.04).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

Support build on Windows systems

Leveraging the new cmake build system, make suscan available to Windows systems. Due to the impractical complex number support in Visual Studio, use MinGW (32 and 64 bits) instead.

cmake fail linux can't find sigutils after installing sigutils

Just installed sigutils.
I am afraid I don't understand how packages are found and verified by cmake. But sigutils compiled and installed successfully. The install prefix was /usr I tried it in /usr/local as well, but neither install prefix resulted in successful cmake for suscan.

cmake -DCMAKE_INSTALL_PREFIX=/usr ..
-- The C compiler identification is GNU 8.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Checking for module 'sigutils>=0.1'
-- No package 'sigutils' found
CMake Error at /usr/share/cmake/Modules/FindPkgConfig.cmake:467 (message):
A required package was not found
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPkgConfig.cmake:647 (_pkg_check_modules_internal)
CMakeLists.txt:28 (pkg_check_modules)

-- Configuring incomplete, errors occurred!
See also "/home/steve/Downloads/suscan/build/CMakeFiles/CMakeOutput.log".
See also "/home/steve/Downloads/suscan/build/CMakeFiles/CMakeError.log".
CMakeError.log
CMakeOutput.log

too many arguments to function ‘SoapySDRDevice_setupStream’

While building source.c.o I encounter multiple warnings, concluding in an error as described in title.

OS: Ubuntu 19.10 (just installed to test SigDigger, but it happened also on Manjaro)

EDIT: SoapySDR built by sources

terminal log:

nik@ubuntu:~/software/suscan/build$ make
Scanning dependencies of target suscan
[  2%] Building C object CMakeFiles/suscan.dir/util/cfg.c.o
/home/nik/software/suscan/util/cfg.c: In function ‘suscan_string_to_config’:
/home/nik/software/suscan/util/cfg.c:529:29: warning: format ‘%lli’ expects argument of type ‘long long int *’, but argument 3 has type ‘uint64_t *’ {aka ‘long unsigned int *’} [-Wformat=]
  529 |         if (sscanf(val, "%lli", &int_val) < 1) {
      |                          ~~~^   ~~~~~~~~
      |                             |   |
      |                             |   uint64_t * {aka long unsigned int *}
      |                             long long int *
      |                          %li
/home/nik/software/suscan/util/cfg.c: In function ‘suscan_object_to_config’:
/home/nik/software/suscan/util/cfg.c:772:31: warning: format ‘%lli’ expects argument of type ‘long long int *’, but argument 3 has type ‘uint64_t *’ {aka ‘long unsigned int *’} [-Wformat=]
  772 |           if (sscanf(val, "%lli", &int_val) < 1) {
      |                            ~~~^   ~~~~~~~~
      |                               |   |
      |                               |   uint64_t * {aka long unsigned int *}
      |                               long long int *
      |                            %li
[  4%] Building C object CMakeFiles/suscan.dir/util/confdb.c.o
[  6%] Building C object CMakeFiles/suscan.dir/util/deserialize.c.o
[  8%] Building C object CMakeFiles/suscan.dir/util/object.c.o
[ 10%] Building C object CMakeFiles/suscan.dir/util/serialize.c.o
[ 12%] Building C object CMakeFiles/suscan.dir/util/util.c.o
[ 14%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/inspector.c.o
[ 16%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/interface.c.o
[ 18%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/params.c.o
[ 20%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/impl/ask.c.o
[ 22%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/impl/audio.c.o
[ 25%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/impl/fsk.c.o
[ 27%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/impl/psk.c.o
[ 29%] Building C object CMakeFiles/suscan.dir/codec/codec.c.o
[ 31%] Building C object CMakeFiles/suscan.dir/codec/codecs/diff.c.o
[ 33%] Building C object CMakeFiles/suscan.dir/analyzer/workers/channel.c.o
[ 35%] Building C object CMakeFiles/suscan.dir/analyzer/workers/wide.c.o
[ 37%] Building C object CMakeFiles/suscan.dir/analyzer/analyzer.c.o
[ 39%] Building C object CMakeFiles/suscan.dir/analyzer/bufpool.c.o
[ 41%] Building C object CMakeFiles/suscan.dir/analyzer/client.c.o
[ 43%] Building C object CMakeFiles/suscan.dir/analyzer/estimator.c.o
[ 45%] Building C object CMakeFiles/suscan.dir/analyzer/inspsched.c.o
[ 47%] Building C object CMakeFiles/suscan.dir/analyzer/insp-server.c.o
[ 50%] Building C object CMakeFiles/suscan.dir/analyzer/mq.c.o
[ 52%] Building C object CMakeFiles/suscan.dir/analyzer/msg.c.o
[ 54%] Building C object CMakeFiles/suscan.dir/analyzer/slow.c.o
[ 56%] Building C object CMakeFiles/suscan.dir/analyzer/source.c.o
/home/nik/software/suscan/analyzer/source.c: In function ‘suscan_source_open_sdr’:
/home/nik/software/suscan/analyzer/source.c:1647:7: warning: passing argument 2 of ‘SoapySDRDevice_setupStream’ makes integer from pointer without a cast [-Wint-conversion]
 1647 |       &source->rx_stream,
      |       ^~~~~~~~~~~~~~~~~~
      |       |
      |       SoapySDRStream ** {aka struct SoapySDRStream **}
In file included from /home/nik/software/suscan/analyzer/source.h:30,
                 from /home/nik/software/suscan/analyzer/source.c:29:
/usr/local/include/SoapySDR/Device.h:295:31: note: expected ‘int’ but argument is of type ‘SoapySDRStream **’ {aka ‘struct SoapySDRStream **’}
  295 | SOAPY_SDR_API SoapySDRStream *SoapySDRDevice_setupStream(SoapySDRDevice *device,
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nik/software/suscan/analyzer/source.c:1648:7: warning: passing argument 3 of ‘SoapySDRDevice_setupStream’ makes pointer from integer without a cast [-Wint-conversion]
 1648 |       SOAPY_SDR_RX,
      |       ^~~~~~~~~~~~
      |       |
      |       int
In file included from /home/nik/software/suscan/analyzer/source.h:30,
                 from /home/nik/software/suscan/analyzer/source.c:29:
/usr/local/include/SoapySDR/Device.h:295:31: note: expected ‘const char *’ but argument is of type ‘int’
  295 | SOAPY_SDR_API SoapySDRStream *SoapySDRDevice_setupStream(SoapySDRDevice *device,
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nik/software/suscan/analyzer/source.c:1649:7: warning: passing argument 4 of ‘SoapySDRDevice_setupStream’ from incompatible pointer type [-Wincompatible-pointer-types]
 1649 |       SUSCAN_SOAPY_SAMPFMT,
      |       ^~~~~~~~~~~~~~~~~~~~
      |       |
      |       char *
In file included from /home/nik/software/suscan/analyzer/source.h:30,
                 from /home/nik/software/suscan/analyzer/source.c:29:
/usr/local/include/SoapySDR/Device.h:295:31: note: expected ‘const size_t *’ {aka ‘const long unsigned int *’} but argument is of type ‘char *’
  295 | SOAPY_SDR_API SoapySDRStream *SoapySDRDevice_setupStream(SoapySDRDevice *device,
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nik/software/suscan/analyzer/source.c:1650:13: warning: passing argument 5 of ‘SoapySDRDevice_setupStream’ makes integer from pointer without a cast [-Wint-conversion]
 1650 |       source->chan_array,
      |       ~~~~~~^~~~~~~~~~~~
      |             |
      |             size_t * {aka long unsigned int *}
In file included from /home/nik/software/suscan/analyzer/source.h:30,
                 from /home/nik/software/suscan/analyzer/source.c:29:
/usr/local/include/SoapySDR/Device.h:295:31: note: expected ‘size_t’ {aka ‘const long unsigned int’} but argument is of type ‘size_t *’ {aka ‘long unsigned int *’}
  295 | SOAPY_SDR_API SoapySDRStream *SoapySDRDevice_setupStream(SoapySDRDevice *device,
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nik/software/suscan/analyzer/source.c:1651:7: warning: passing argument 6 of ‘SoapySDRDevice_setupStream’ makes pointer from integer without a cast [-Wint-conversion]
 1651 |       1,
      |       ^
      |       |
      |       int
In file included from /home/nik/software/suscan/analyzer/source.h:30,
                 from /home/nik/software/suscan/analyzer/source.c:29:
/usr/local/include/SoapySDR/Device.h:295:31: note: expected ‘const SoapySDRKwargs *’ {aka ‘const struct <anonymous> *’} but argument is of type ‘int’
  295 | SOAPY_SDR_API SoapySDRStream *SoapySDRDevice_setupStream(SoapySDRDevice *device,
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nik/software/suscan/analyzer/source.c:1645:7: error: too many arguments to function ‘SoapySDRDevice_setupStream’
 1645 |   if (SoapySDRDevice_setupStream(
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/nik/software/suscan/analyzer/source.h:30,
                 from /home/nik/software/suscan/analyzer/source.c:29:
/usr/local/include/SoapySDR/Device.h:295:31: note: declared here
  295 | SOAPY_SDR_API SoapySDRStream *SoapySDRDevice_setupStream(SoapySDRDevice *device,
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [CMakeFiles/suscan.dir/build.make:401: CMakeFiles/suscan.dir/analyzer/source.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:110: CMakeFiles/suscan.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

Can't test suscan library

I build dependencies (suscan) and install it. When i run "suscan", to test installation, i received next message: "suscan: error while loading shared libraries: libsigutils.so.0: cannot open shared object file: No such file or directory". Previously i build sigutils and install it too.
Ubuntu 18.04, x64.

Define SOVERSION

Suscan is missing SOVERSION, required for tracking ABI changes.

Improper handling of unsupported rates

Some SDRs supporting fixed sample rates (like AirSpy) will not report invalid sample rate configuration. Instead, they will deliver samples at the closest supported rate. This has an impact on interface responsivity as Suscan will fail to deliver inspector and PSD data on time.

Cannot perform full bandwidth filtering

If the inspector channel's relative bandwidth is beyond 50% the sample rate, the inspector will refuse to open. Full bandwidth demodulation should be allowed.

Implement GPU offloading

SigDigger still takes a lot of CPU time to channelize and demodulate. Offload part of the process to the GPU if available.

Implement symbol transition analysis

In certain modulations (especially OPSK and pi/4-QPSK) not all symbol transitions are allowed. In order to identify them, we must estimate the probability of every possible symbol transitions. This transition analysis must be performed for both consecutive and alternating symbols

Replace build system by CMake

Current autotools-based build system is cumbersome and rather slow. Switch to CMake to ease porting to other operating systems.

Is a waterfall expected ?

Hi,
I try to run SUScan with a rtl-sdr stick as default source (@300000 sps).
When I click on the start button a spectrum line is run, a lot of CPU is used by Xorg but nothing moves anymore on the screen except, sometimes, some red lines/rectangles (see attached screenshot).
No waterfall and the window seems stuck :-(
The netbook used is not very powerful (AMD C-70) but it runs gqrx with a spectrum display, a waterfall and its demodulators just fine :-/

Any hints ?

Extend wide spectrum analyzer parameters

The wide spectrum analyzer should allow:

  • Configuration of walk strategy (progressive or stochastic)
  • Configuration the spectrum partitioning (continuous or discrete)
  • When the range is below the sample rate, no hop should happen at all and the frequency should remain fixed.

Configure suscan's global directory

Many configuration defaults are loaded from hardcoded search paths involving the system. Design API to specify additional search paths from environment variables.

Adjust spectrum message interval according to effective samp rate

There are two cases in which the spectrum message interval does not behave as it ought to:

a) The throttle control has been adjusted to a sample rate that is different from the source sample rate
b) The speed at which Suscan processes samples is slower than the source rate.

In both cases, Suscan should keep a measure of the current rate and update the spectrum intervals accordingly.

Wrong linker library in file

Hey
This is a weird issue:
While compiling, I got this:
ld: library not found for -l-L/usr/local/opt/qt/lib
It turned out to be inside build/CMakeFiles/suscan.dir/link.txt
There was an empty -l . I removed it and compile succeeded

Fix codec output behavior

There are several aspects of codec GUI behavior that should be fixed:

  • Berlekamp-Massey should be implemented for non-binary constellations
  • The offset spin button is disabled and offset cannot be controlled manually
  • Codec symbol views should inherit settings from the source symbol view

Build warnings around yaml on FreeBSD

I don't feel like figuring out the yaml macros, so here's a bug report ;)

/home/jeffpc/src/oss/dsp/suscan/util/serialize-yaml.c:97:7: warning: implicit conversion from enumeration type 'enum yaml_mapping_style_e' to different enumeration type 'yaml_sequence_style_t' (aka 'enum yaml_sequence_style_e') [-Wenum-conversion]
      SUSCAN_YAML_SEQ_START();
      ^~~~~~~~~~~~~~~~~~~~~~~
/home/jeffpc/src/oss/dsp/suscan/util/serialize-yaml.c:58:5: note: expanded from macro 'SUSCAN_YAML_SEQ_START'
    YAML_BLOCK_MAPPING_STYLE)
    ^~~~~~~~~~~~~~~~~~~~~~~~~
/home/jeffpc/src/oss/dsp/suscan/util/serialize-yaml.c:36:9: note: expanded from macro 'SUSCAN_YAML_EMIT'
      ##arg)));                                                   \
      ~~^~~~~
/home/jeffpc/bin/dsp/include/sigutils/util/util.h:52:29: note: expanded from macro 'JOIN'
#define JOIN(a, b) _JOIN(a, b)
                   ~~~~~~~~~^~
/home/jeffpc/bin/dsp/include/sigutils/util/util.h:51:26: note: expanded from macro '_JOIN'
#define _JOIN(a, b) a ## b
                    ~~~~~^
/home/jeffpc/bin/dsp/include/sigutils/sigutils/defs.h:130:36: note: expanded from macro 'SU_TRY'
#define SU_TRY(expr)   SU_TRYCATCH(expr, goto done)
                                   ^~~~
/home/jeffpc/bin/dsp/include/sigutils/sigutils/defs.h:120:9: note: expanded from macro 'SU_TRYCATCH'
  if (!(expr)) {                        \
        ^~~~
/home/jeffpc/src/oss/dsp/suscan/util/serialize-yaml.c:174:3: warning: implicit conversion from enumeration type 'enum yaml_mapping_style_e' to different enumeration type 'yaml_sequence_style_t' (aka 'enum yaml_sequence_style_e') [-Wenum-conversion]
  SUSCAN_YAML_SEQ_START();
  ^~~~~~~~~~~~~~~~~~~~~~~
/home/jeffpc/src/oss/dsp/suscan/util/serialize-yaml.c:58:5: note: expanded from macro 'SUSCAN_YAML_SEQ_START'
    YAML_BLOCK_MAPPING_STYLE)
    ^~~~~~~~~~~~~~~~~~~~~~~~~
/home/jeffpc/src/oss/dsp/suscan/util/serialize-yaml.c:36:9: note: expanded from macro 'SUSCAN_YAML_EMIT'
      ##arg)));                                                   \
      ~~^~~~~
/home/jeffpc/bin/dsp/include/sigutils/util/util.h:52:29: note: expanded from macro 'JOIN'
#define JOIN(a, b) _JOIN(a, b)
                   ~~~~~~~~~^~
/home/jeffpc/bin/dsp/include/sigutils/util/util.h:51:26: note: expanded from macro '_JOIN'
#define _JOIN(a, b) a ## b
                    ~~~~~^
/home/jeffpc/bin/dsp/include/sigutils/sigutils/defs.h:130:36: note: expanded from macro 'SU_TRY'
#define SU_TRY(expr)   SU_TRYCATCH(expr, goto done)
                                   ^~~~
/home/jeffpc/bin/dsp/include/sigutils/sigutils/defs.h:120:9: note: expanded from macro 'SU_TRYCATCH'
  if (!(expr)) {                        \
        ^~~~
2 warnings generated.

This is with the default FreeBSD 13 compiler:

$ cc -v
FreeBSD clang version 11.0.1 ([email protected]:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe)
Target: x86_64-unknown-freebsd13.0
Thread model: posix
InstalledDir: /usr/bin

Improve performance of the channel worker

The current channel worker performs innecesary copies of the data buffer, and redundant FFTs. To prevent this:

  1. Add multiple overlapping FFTs, and copy only the last half.
  2. Zero-copy data read
  3. Decouple read thread from processing thread

Implement symbol translator

In most non-differential modulations (and many differential ones too) there is a symbol labeling ambiguity that cannot be tweaked from GUI. A new codec (e.g. "Symbol translator") can overcome this limitation by providing some dialog to set symbol labels manually.

Also, since this codec would have its own GUI, it should not be accessible from the Encoders / Decoders menu (maybe add an "internal" field to the suscan_codec_class?)

Document existing features

The project is not documented at all, and we cannot rely on the intuitiveness of the UI any longer. Some documentation effort must be performed here.

suscan crashing with "invalid opcode" error

Hi!
I have both SigDigger and suscan.status crashing on a fresh installed Mint Linux 21.1 with following error:

Jan 15 00:05:55 kernel: [  498.948942] traps: SigDigger::Init[2118] trap invalid opcode ip:7f6ef8001660 sp:7f6edf7fce00 error:0 in librte_net.so.22.0[7f6ef8001000+3000]

Jan 15 00:09:42 kernel: [  725.825914] traps: suscan.status[2629] trap invalid opcode ip:7f967ec6e660 sp:7ffd5e200040 error:0 in librte_net.so.22.0[7f967ec6e000+3000]

Few days ago everything worked fine on Ubuntu Studio 20.04 on the same PC. Any ideas what went wrong?

SoapySDR headers not found on macOS

Hey
As you know I test on 2 MacBooks.
On one MacBook, I have compiled SoapySDR from source, so there's no issues.
On the other one, I have installed it via brew. On this second machine, I get error:
/Users/mehdi/Documents/source/suscan/analyzer/source.h:30:10: fatal error: 'SoapySDR/Device.h' file not found
Well I fixed it temporarily by setting the CPATH variable in command line.
Couldn't find any strange things in your CMakeLists

Suscli radio profile setting not changing regardless of index or name used.

Before I forget. With the latest Suscli dev branch, I'm unable to change the radio profile using the following commands

Suscli radio profile 2 (replace 2 with any profile index or name)

Initially I was stuck with whatever UI Profile was (index number 1). I then deleted the Suscan sources file. Used Suscli makeprof to create new profiles which resulted in the Default, Airspy, and an IP/port profile.

Now when I start Suscli radio, no matter which profile I pick, it's the index number one Default device (is the Airspy just like the number 2 index) so at least I can use it. However, I think something is preventing the user from changing profiles.

Define different analyzer classes

An analyzer is a generic object that deals with a signal source and does some processing on top of it. Right now, the only purpose of the Analyzer is to channelize and feed inspectors, but we may want to do different stuff in the future, like:

  • Perform a wide spectrum sweep (ordered or random), returning PSD messages
  • Locate activity in specific channels and print alerts
  • Integrate the whole spectrum for a long time
  • Perform channel fingerprinting
  • Perform scientific calculations? (this could be useful for radioastronomy and stuff, and would allow a nice reimplementation of QStones)

All these features share the need to deal with a signal source in an asynchronous way, while they slightly differ on what to do with the signal. Some of them channelize the signal, some others settle for integrating the FFT one way or another. The inspector abstraction (which is basically an interactive demodulator) falls short in scenarios like these.

suscli exceptions on Mac OSX

Any idea why these exceptions print when running suscli devices

./suscli devices      
[e] suscan_bundle_get_resource_path:45: exception in "dir_url = CFBundleCopyResourceURL( main_bundle, relpath, ((void*)0), ((void*)0) )" (build/CMakeFiles/suscan.dir/compiler_depend.ts:45)
[e] suscan_bundle_get_resource_path:45: exception in "dir_url = CFBundleCopyResourceURL( main_bundle, relpath, ((void*)0), ((void*)0) )" (build/CMakeFiles/suscan.dir/compiler_depend.ts:45)

Problems with building on Arch Linux

Problems described here are pretty much the same as in BatchDrake/sigutils#14 so I will post here only the relevant messages. AUR package is available here

  1. Linking problem
==> Making package: suscan-git r479.9250ea0-1 (Tue 31 Dec 2019 02:41:10 AM MSK)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Cloning suscan-git git repo...
Cloning into bare repository '/home/viktor/build/aur/suscan-git/suscan-git'...
remote: Enumerating objects: 269, done.
remote: Counting objects: 100% (269/269), done.
remote: Compressing objects: 100% (174/174), done.
remote: Total 3733 (delta 169), reused 180 (delta 93), pack-reused 3464
Receiving objects: 100% (3733/3733), 2.52 MiB | 4.11 MiB/s, done.
Resolving deltas: 100% (2863/2863), done.
==> Validating source files with md5sums...
    suscan-git ... Skipped
==> Extracting sources...
  -> Creating working copy of suscan-git git repo...
Cloning into 'suscan-git'...
done.
==> Starting pkgver()...
==> Updated version: suscan-git r480.29625cb-1
==> Starting build()...
-- The C compiler identification is GNU 9.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3") 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Checking for module 'sigutils>=0.1'
--   Found sigutils, version 0.1
-- Checking for module 'sndfile>=1.0.2'
--   Found sndfile, version 1.0.28
-- Checking for module 'fftw3f>=3.0'
--   Found fftw3f, version 3.3.8
-- Checking for module 'SoapySDR>=0.5.0'
--   Found SoapySDR, version 0.7.1
-- Checking for module 'libxml-2.0>=2.9.0'
--   Found libxml-2.0, version 2.9.10
-- Checking for module 'volk>=1.0'
--   Found volk, version 2.0
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/makepkg/suscan-git/src/suscan-git/build
Scanning dependencies of target suscan
[  2%] Building C object CMakeFiles/suscan.dir/util/confdb.c.o
[  4%] Building C object CMakeFiles/suscan.dir/util/cfg.c.o
[  6%] Building C object CMakeFiles/suscan.dir/util/deserialize.c.o
[  8%] Building C object CMakeFiles/suscan.dir/util/object.c.o
[ 10%] Building C object CMakeFiles/suscan.dir/util/serialize.c.o
[ 13%] Building C object CMakeFiles/suscan.dir/util/util.c.o
[ 15%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/inspector.c.o
[ 17%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/interface.c.o
[ 19%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/params.c.o
[ 21%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/impl/ask.c.o
[ 23%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/impl/audio.c.o
[ 26%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/impl/fsk.c.o
[ 28%] Building C object CMakeFiles/suscan.dir/analyzer/inspector/impl/psk.c.o
[ 30%] Building C object CMakeFiles/suscan.dir/codec/codec.c.o
[ 32%] Building C object CMakeFiles/suscan.dir/codec/codecs/diff.c.o
[ 34%] Building C object CMakeFiles/suscan.dir/analyzer/analyzer.c.o
[ 36%] Building C object CMakeFiles/suscan.dir/analyzer/bufpool.c.o
[ 39%] Building C object CMakeFiles/suscan.dir/analyzer/client.c.o
[ 41%] Building C object CMakeFiles/suscan.dir/analyzer/estimator.c.o
[ 43%] Building C object CMakeFiles/suscan.dir/analyzer/inspsched.c.o
[ 45%] Building C object CMakeFiles/suscan.dir/analyzer/insp-server.c.o
[ 47%] Building C object CMakeFiles/suscan.dir/analyzer/mq.c.o
[ 50%] Building C object CMakeFiles/suscan.dir/analyzer/msg.c.o
[ 52%] Building C object CMakeFiles/suscan.dir/analyzer/slow.c.o
[ 54%] Building C object CMakeFiles/suscan.dir/analyzer/source.c.o
[ 56%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrc.c.o
[ 58%] Building C object CMakeFiles/suscan.dir/analyzer/symbuf.c.o
[ 60%] Building C object CMakeFiles/suscan.dir/analyzer/throttle.c.o
[ 63%] Building C object CMakeFiles/suscan.dir/analyzer/worker.c.o
[ 65%] Building C object CMakeFiles/suscan.dir/analyzer/estimators/fac.c.o
[ 67%] Building C object CMakeFiles/suscan.dir/analyzer/estimators/nonlinear.c.o
[ 69%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/cyclo.c.o
[ 71%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/fmcyclo.c.o
[ 73%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/fmspect.c.o
[ 76%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/pmspect.c.o
[ 78%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/timediff.c.o
[ 80%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/exp-2.c.o
[ 82%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/exp-4.c.o
[ 84%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/exp-8.c.o
[ 86%] Building C object CMakeFiles/suscan.dir/analyzer/spectsrcs/psd.c.o
[ 89%] Linking C shared library libsuscan.so
[ 89%] Built target suscan
Scanning dependencies of target suscan.status
[ 93%] Building C object CMakeFiles/suscan.status.dir/src/common.c.o
[ 93%] Building C object CMakeFiles/suscan.status.dir/src/fingerprint.c.o
[ 95%] Building C object CMakeFiles/suscan.status.dir/src/lib.c.o
[ 97%] Building C object CMakeFiles/suscan.status.dir/src/main.c.o
[100%] Linking C executable suscan.status
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_deactivateStream'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_getGainElement'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRKwargs_clear'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `sf_open'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_make'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_listAntennas'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_closeStream'
/usr/bin/ld: libsuscan.so: undefined reference to `xmlFreeDoc'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `fftwf_execute'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_listGains'
/usr/bin/ld: libsuscan.so: undefined reference to `xmlGetProp'
/usr/bin/ld: libsuscan.so: undefined reference to `xmlCheckVersion'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_setBandwidth'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_getSampleRate'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_setAntenna'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_setFrequency'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRStrings_clear'
/usr/bin/ld: libsuscan.so: undefined reference to `xmlNodeGetContent'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `sf_read_float'
/usr/bin/ld: libsuscan.so: undefined reference to `xmlCleanupParser'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_hasDCOffsetMode'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_enumerate'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_activateStream'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_readStream'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_lastError'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `sf_close'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRKwargs_set'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_listSampleRates'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRKwargs_get'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_setSampleRate'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDR_errToStr'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_setDCOffsetMode'
/usr/bin/ld: libsuscan.so: undefined reference to `xmlReadMemory'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_getGainElementRange'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `fftwf_free'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `fftwf_malloc'
/usr/bin/ld: libsuscan.so: undefined reference to `xmlFree'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_unmake'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_setupStream'
/usr/bin/ld: libsuscan.so: undefined reference to `sf_seek'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `sf_error'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `sf_strerror'
/usr/bin/ld: libsuscan.so: undefined reference to `xmlDocGetRootElement'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRKwargsList_clear'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_setGainMode'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `fftwf_plan_dft_1d'
/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/libsigutils.so: undefined reference to `fftwf_destroy_plan'
/usr/bin/ld: libsuscan.so: undefined reference to `SoapySDRDevice_setGainElement'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/suscan.status.dir/build.make:130: suscan.status] Error 1
make[1]: *** [CMakeFiles/Makefile2:78: CMakeFiles/suscan.status.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
==> ERROR: A failure occurred in build().
    Aborting...
  1. Referencing to the temporary tree
...
==> Checking for packaging issues...
==> WARNING: Package contains reference to $srcdir
usr/bin/suscan.status
usr/lib/libsuscan.so
...
$ strings suscan.status | grep makepkg
/tmp/makepkg/suscan-git/src/suscan-git/src/fingerprint.c
$ strings libsuscan.so | grep makepkg
/tmp/makepkg/suscan-git/src/suscan-git/util/cfg.c
/tmp/makepkg/suscan-git/src/suscan-git/util/confdb.c
/tmp/makepkg/suscan-git/src/suscan-git/util/deserialize.c
/tmp/makepkg/suscan-git/src/suscan-git/util/object.c
/tmp/makepkg/suscan-git/src/suscan-git/util/serialize.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/inspector/inspector.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/inspector/interface.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/inspector/params.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/inspector/impl/ask.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/inspector/impl/audio.c
?/tmp/makepkg/suscan-git/src/suscan-git/analyzer/inspector/impl/fsk.c
yE>/tmp/makepkg/suscan-git/src/suscan-git/analyzer/inspector/impl/psk.c
/tmp/makepkg/suscan-git/src/suscan-git/codec/codec.c
/tmp/makepkg/suscan-git/src/suscan-git/codec/codecs/diff.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/analyzer.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/bufpool.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/client.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/estimator.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/inspsched.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/insp-server.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/mq.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/msg.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/slow.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/source.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrc.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/symbuf.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/estimators/fac.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/estimators/nonlinear.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/cyclo.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/fmcyclo.c
>/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/fmspect.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/pmspect.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/timediff.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/exp-2.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/exp-4.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/exp-8.c
/tmp/makepkg/suscan-git/src/suscan-git/analyzer/spectsrcs/psd.c

Descramble symbols directly from GUI

The current Berlekamp-Massey implementation can deduce the scrambling polynomial on BPSK signals. The next obvious step is to use this information to descramble a frame. This new feature should allow us to:

  • Use the scrambling polynomial to feed a multiplicative descrambler
  • Use the scrambling polynomial to feed an additive descrambler, by providing information about the synchronization sequence (i.e. where the sequence used to deduce the polynomial is w.r.t the sequence we want to descramble as a frame offset)
  • (Optional) Perform auto-synchronization of the additive descrambler.

Multiple warnings in spectrum widget realization

This has been observed for a while now, in the standard error output:

(suscan:23349): Gdk-CRITICAL **: 23:05:35.096: gdk_window_create_similar_surface: assertion 'GDK_IS_WINDOW (window)' failed

(suscan:23349): Gtk-CRITICAL **: 23:05:42.405: gtk_widget_grab_default: assertion 'gtk_widget_get_can_default (widget)' failed

This could imply that we are failing to create the best surface for the spectrum widget. Although it is not prioritary, it is polluting the error output, potentially masking other problems.

Channel distortion on audio inspector running with narrow channel filter

For some reason, if the audio inspector's channel filter is reduced, the resulting signals tends to have many negative peaks that are correlated with poor audio quality. On the other hand, increasing channel's bandwidth seems to fix this problem. Although there is a workaround for this (high bandwidth and then adjust audio cutoff) this is not the expected behavior, as linearity is being lost somewhere.

distortion
Captura de pantalla de 2019-08-22 17-01-05

suscan doesn't actually use volk?

Hi, when packing this for arch I noticed the following warning. Looks like suscan isn't actually using volk, if that's the case, the dependency can be removed. Could you investigate? Thanks 😁.

suscan W: Unused shared library '/usr/lib/libvolk.so.2.3' by file ('usr/lib/libsuscan.so')

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.