Git Product home page Git Product logo

opendigitalradio / odr-dabmod Goto Github PK

View Code? Open in Web Editor NEW
47.0 47.0 32.0 11.87 MB

ODR-DabMod is a DAB (Digital Audio Broadcasting) modulator, part of the ODR-mmbTools.

Home Page: https://www.opendigitalradio.org

License: Other

Shell 0.01% C++ 68.66% C 2.98% Makefile 0.48% M4 7.19% Python 16.01% CSS 0.20% JavaScript 2.84% HTML 1.63%
dab dab-broadcasting odr-mmbtools sdr software-defined-radio

odr-dabmod's People

Contributors

andimik avatar basicmaster avatar colisee avatar f5oeo avatar mortensenit avatar mpbraendli avatar piratfm avatar raspine avatar sergione76 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

Watchers

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

odr-dabmod's Issues

Modulator reverts to idle

Our multiplexer is not on the same site as our modulator. Occasionally, if there is a glitch in the connection the modulator reverts to idle and has to be manually rebooted to reconnect the stream. Is there are workaround for this? Is it possible, for example, to specify two inputs on the modulator so that if one stream fails it switches to the other? Alternatively, is there a way we can make the modulator automatically reconnect if idle for say a predetermined period of time (say 5 seconds)? Many thanks, Ash

ZeroMQ input not usable in SFN

The assembly of ETI frames into transmission frames is not checked for alignment contiuously. It is only checked once at startup. This is why when using the ZeroMQ input, a zmq message must contain four ETI frames, so that this alignment is never disturbed.

But in an scenario with timestamped transmission, once the modulator is streaming, it is expected that no incoming ETI frames get dropped. However, ZeroMQ doesn't guarantee that all frames reach the modulator. If we only lose a few, and the buffer is still large enough to sustain streaming, the UHD output will not interrupt, and the system will be transmitting timestamped frames at the wrong point in time.

This breaks the SFN feature.

OSX .configure error

Hi all,

I'm trying to build the stuff:

./bootstrap.sh - ok
./configure:
checking for SOAPYSDR... no
checking for main in -luhd... yes
checking for boostlib >= 1.54.0... yes
checking for main in -lboost_system... yes
checking for main in -lboost_thread... no
configure: error: library boost_thread is missing

Boost is installed.
Probably boost_thread check should be changed to boost_thread-mt?

zmqctrlendpoint not support hostname.

zmqctrlendpoint not support hostname.

Can not use :
zmqctrlendpoint: tcp://localhost:9400
But need to put IP :
zmqctrlendpoint: tcp://127.0.0.1:9400

/etc/hosts file is correct :
127.0.0.1 localhost

Commandline for filelog

Hi,

I'm using the ODR-DabMod with only command line (that is, without the configuration file). And most of the default values are fine. However, when using this tool in a PIPE chain the STDERR is mixed with the ouput of all the running tools. So, as the configuration file has the option to enable the filelog and setting the filename I suggest to support it also in the command line.

This has sense?

adalm pluto support

Hello,
It would incredible to have support for this board due it seem suitable for DAB and it has an incredible price(99$).
any ideas how to accomplish this?.

Wrong display in telnet header

When connect with telnet to RC, the header display "ODR-DabMux" but it's the RC for ODR-DabMod

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ODR-DabMux Remote Control CLI
Write 'help' for help.
**********

Configuring with EDI input - strange warning message

Using latest next branch.

When I configure it without parameter, EDI seems to be disabled:

$ ./configure --disable-output-uhd

  Features
  Enabled:  zeromq soapysdr
  Disabled:  edi prof trace output_uhd easydabv3

So I have changed to

$ ./configure --disable-output-uhd --enable-edi

then EDI seems to be configured, but the warning message is strange.

configure: WARNING: unrecognized options: --enable-edi

***********************************************

  Features
  Enabled:  edi zeromq soapysdr
  Disabled:  prof trace output_uhd easydabv3

EEP b protection levels

Greetings from Portsmouth.

I want to operate a DAB+ service at 64kbps EEP2b. I know that typing 2 as the protection level defaults to EEP2a. Typing 2b does not seem to work however. Are EEP1b/2b/3b/4b supported? If they are supported can anyone tell me what I am doing wrong please?

Many thanks,

Ash

remotecontrol requires de-selected zeromq

zeromq seemed to be mandatory ...

$ ./configure --disable-output-uhd --disable-zeromq
[...]

***********************************************

  Features
  Enabled:  soapysdr
  Disabled:  prof trace output_uhd zeromq easydabv3 limesdr bladerf


  Options
  Active:  supports_march_native
  Disabled:  enable_fast_math

***********************************************
$ make
make  all-am
make[1]: Verzeichnis „/home/andreas/apps/ODR-DabMod“ wird betreten
[...]
  CXX      src/odr_dabmod-Utils.o
  CXX      lib/odr_dabmod-RemoteControl.o
In file included from lib/RemoteControl.cpp:32:
lib/zmq.hpp:72:10: fatal error: zmq.h: Datei oder Verzeichnis nicht gefunden
   72 | #include <zmq.h>
      |          ^~~~~~~
compilation terminated.
make[1]: *** [Makefile:1472: lib/odr_dabmod-RemoteControl.o] Fehler 1
make[1]: Verzeichnis „/home/andreas/apps/ODR-DabMod“ wird verlassen
make: *** [Makefile:661: all] Fehler 2

This fixes it:

$ diff RemoteControl.cpp RemoteControl.cpp_bak 
32,34c32
< #if defined(HAVE_ZEROMQ)
<     #include "zmq.hpp"
< #endif
---
> #include "zmq.hpp"

see 0f86d69

odr-dabmod with netcat or socat does not work

I'm facing problems with odr-dabmod, but only in combination with socat and netcat, even on the same machine (localhost).

This is not related to a particular eti file, have tried several files from many countries as input. Below I'm using the well-known one from http://tipok.org.ua/downloads/hardware/DAB-TX/Spartan6-FPGA/EasyDABv2/0,0x0425.bin.eti

$ cat foo.eti | odr-dabmod  -f /dev/stdout -F u8 -a 0.8 | nc -l 1234
ODR-DabMod version v2.4.2-9-g0f05769, compiled at Nov 27 2021, 11:53:07
Compiled with features: zeromq output_soapysdr SSE 
Input
  Type: file
  Source: /dev/stdin
Output
  Name: /dev/stdout
  Sampling rate: 2.0480 MHz
      Configuration parsed. Starting up version v2.4.2-9-g0f05769
ERROR Could not set priority for modulator:1
      Setting up timestamp decoder with 0 offset
      Input file format: raw, length: 0, nb frames: endless
@

�o� 

Please note the special characters at the end. They prevent me from getting a stable and error-free DAB signal which I want to use in Qt-DAB or cQIRX or welle-io.

See impulse waterfall diagram attached (remark: the DAB channel 9A is an example and has nothing to do with a real signal on that channel).

grafik

As soon these special characters appear odr-dabmod might stop (but not in all cases).

grafik

When I write the output into a file or to a fifo file, this works, indeed.

grafik

Any idea?

ZeroMQ input removed?

Although I have configured with ZeroMQ input, this seems to be no longer working.

$ odr-dabmod zmq+tcp://IP-ADDRESS -f /tmp/test.raw -F u8
ODR-DabMod version v2.6.0-71-g03bf901, compiled at Mar 11 2024, 21:11:40
Compiled with features: zeromq output_soapysdr SSE 
Modulator runtime error: Support for ZeroMQ input transport has been removed.

But the help still shows it:

$ ./configure --help | grep zero
  --disable-zeromq        Disable ZeroMQ input, output and remote control

I have seen that the commit was 0aec6da But I don't understand why this has been removed.

I'm back to ODR-DabMod version v2.6.0-2-g0f86d69 (0f86d69), where it is working.

Time is Transmitted without local offset

dabmod is transmitting the timesync in RTC of the host, on linux this is typically UTC as offsets for local time are done in software.
However, Hardware DAB Receivers expect Local Time Offset as is normally transmitted by DAB Broadcasters, not UTC, causing receiver to desync.

No ctrl+c possible when no data received

Similar to #25

$ odr-dabmod zmq+tcp://10.0.0.137  -f /tmp/test.raw
ODR-DabMod version v2.6.0-6-g6188ba9, compiled at Dec 31 2022, 12:48:41
Compiled with features: zeromq output_soapysdr SSE 
Input
  Type: zeromq
  Source: zmq+tcp://10.0.0.137
Output
  Name: /tmp/test.raw
  Sampling rate: 2.0480 MHz
2023-09-10Z13:53:31       Configuration parsed. Starting up version v2.6.0-6-g6188ba9
2023-09-10Z13:53:31       Setting up timestamp decoder with 0 offset
2023-09-10Z13:53:31       Input ZeroMQ: Receiving from tcp://10.0.0.137
2023-09-10Z13:53:31 ERROR Failed to connect ZeroMQ socket to 'tcp://10.0.0.137': 'Invalid argument'
2023-09-10Z13:53:31       ZeroMQ input worker terminated
^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C

It works as soon as data are received, but if - for example - the IP Address was wrong, you cannot stop it.

DAB with protection level EEP_A

Hi,

I try to create etis with different bitrates and codecs.
Is DAB (audio, musicam) with protection EEP_A 1-4 supported?
I created with DAB+ different etis. There are working fine. But with DAB, I got an eti without Audio.

Could it be that I did something wrong?

Thanks in advanced!

dab.mux:

general {
	dabmode 1
	nbframes 2500
	syslog false
	writescca false
	tist false
	managementport 0
}

remotecontrol {
	telnetport 0
}

ensemble {
	id 0x0001
	ecc 0xE0
	international-table 1
	local-time-offset auto
	label "CodecEnsemble"
	shortlabel "CodecEns"
}

services {
	Service1 {
	    id 0xD001
		label "CodecService"
		shortlabel "CodecSer"
		language 0x00
		pty 0
	}
}

subchannels {
	Subchannel1 {
	    id 1
		type audio
		inputfile "tcp://*:9001"
		bitrate 48
		protection-profile EEP_A
		protection 1
		zmq-buffer 40
		zmq-prebuffering 20
	}

}

components {
	Comp1 {
		service Service1
		subchannel Subchannel1
		type 0
	}
}

outputs {
	fifo "file:///home/mathias/DABc_48kHz_048kbit_MonoFull_EEP1A_SONG_V01.eti?type=raw"
	throttle "simul://"
}

created eti:
DABc_48kHz_048kbit_MonoFull_EEP1A_SONG_V01.zip

Using C++11 instead of boost

I have some small modifications, that allows to migrate from boost to C++11 this made for having possibility to compile modulator software for LEDE/OpenWRT, but it's not fully complete (especially for telnet remote control and USRP driver), maybe it will be interesting to finalize it, so embedded devices will have less dependencies.

Here is diff on how it can be done:
piratfm@6dc0cdf

can't compile in cygwin

Is there any way to make it work on cygwin ?

Jordi@PC-Jordi ~/Descargas/ODR-DabMod
$ ./configure --disable-zeromq --disable-output-uhd
checking build system type... x86_64-pc-cygwin
checking host system type... x86_64-pc-cygwin
checking target system type... x86_64-pc-cygwin
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.exe
checking for suffix of executables... .exe
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking whether g++ supports C++11 features by default... yes
checking whether C++ compiler accepts -Wduplicated-cond... yes
checking whether C++ compiler accepts -Wduplicated-branches... yes
checking whether C++ compiler accepts -Wlogical-op... yes
checking whether C++ compiler accepts -Wrestrict... yes
checking whether C++ compiler accepts -Wno-pragmas... yes
checking whether C++ compiler accepts -Wdouble-promotion... yes
checking whether C++ compiler accepts "-Wformat=2"... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for FFTW... yes
Checking zeromq
checking if compiler needs -Werror to reject unknown flags... no
checking for the pthreads library -lpthreads... no
checking whether pthreads work without any flags... yes
checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE
checking if more special flags are required for pthreads... no
checking for PTHREAD_PRIO_INHERIT... no
checking for SOAPYSDR... no
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking for memory.h... (cached) yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking for stdint.h... (cached) yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking sys/timeb.h usability... yes
checking sys/timeb.h presence... yes
checking for sys/timeb.h... yes
checking for unistd.h... (cached) yes
checking for M_PIl existence... no
checking for prctl and PR_SET_NAME... no
checking for MSG_NOSIGNAL... yes
checking for SO_NOSIGPIPE... no
checking if we can add -march=native to CFLAGS... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands

***********************************************

  Features
  Enabled: 
  Disabled:  edi prof trace output_uhd zeromq soapysdr easydabv3


  Options
  Active:  supports_march_native
  Disabled:  enable_fast_math

***********************************************


Jordi@PC-Jordi ~/Descargas/ODR-DabMod
$ make
make  all-am
make[1]: se entra en el directorio '/home/Jordi/Descargas/ODR-DabMod'
  CXX      src/odr_dabmod-DabMod.o
src/DabMod.cpp: En la función ‘int launch_modulator(int, char**)’:
src/DabMod.cpp:260:22: error: el agregado ‘launch_modulator(int, char**)::sigaction sa’ tiene un tipo incompleto y no se puede definir
     struct sigaction sa;
                      ^~
src/DabMod.cpp:261:43: error: aplicación no válida de ‘sizeof’ a un tipo incompleto ‘launch_modulator(int, char**)::sigaction’
     memset(&sa, 0, sizeof(struct sigaction));
                                           ^
src/DabMod.cpp:264:36: error: uso no válido del tipo incompleto ‘struct launch_modulator(int, char**)::sigaction’
     if (sigaction(SIGINT, &sa, NULL) == -1) {
                                    ^
src/DabMod.cpp:260:12: nota: forward declaration of ‘struct launch_modulator(int, char**)::sigaction’
     struct sigaction sa;
            ^~~~~~~~~
src/DabMod.cpp: En la función ‘int main(int, char**)’:
src/DabMod.cpp:626:5: error: setenv’ no se declaró en este ámbito
     setenv("TZ", "", 1);
     ^~~~~~
src/DabMod.cpp:626:5: nota: suggested alternative: ‘getenvsetenv("TZ", "", 1);
     ^~~~~~
     getenv
src/DabMod.cpp:627:5: error: tzset’ no se declaró en este ámbito
     tzset();
     ^~~~~
src/DabMod.cpp:627:5: nota: suggested alternative: ‘_tzset_rtzset();
     ^~~~~
     _tzset_r
make[1]: *** [Makefile:1024: src/odr_dabmod-DabMod.o] Error 1
make[1]: se sale del directorio '/home/Jordi/Descargas/ODR-DabMod'
make: *** [Makefile:611: all] Error 2

Jordi@PC-Jordi ~/Descargas/ODR-DabMod

Raspberry 3 configure error - hint

I found out that the boost version or path (?) produces an error under a RPi3.

pi@raspberrypi:~/apps/ODR-DabMod $ ./configure --disable-zeromq --disable-output-uhd --disable-native
checking build system type... armv7l-unknown-linux-gnueabihf
checking host system type... armv7l-unknown-linux-gnueabihf
checking target system type... armv7l-unknown-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking whether g++ supports C++11 features by default... yes
checking whether C++ compiler accepts -Wduplicated-cond... yes
checking whether C++ compiler accepts -Wduplicated-branches... no
checking whether C++ compiler accepts -Wlogical-op... yes
checking whether C++ compiler accepts -Wrestrict... no
checking whether C++ compiler accepts -Wshadow... yes
checking whether C++ compiler accepts -Wdouble-promotion... yes
checking whether C++ compiler accepts "-Wformat=2"... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for FFTW... yes
Checking zeromq
checking if compiler needs -Werror to reject unknown flags... no
checking for the pthreads library -lpthreads... no
checking whether pthreads work without any flags... no
checking whether pthreads work with -Kthread... no
checking whether pthreads work with -kthread... no
checking for the pthreads library -llthread... no
checking whether pthreads work with -pthread... yes
checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE
checking if more special flags are required for pthreads... no
checking for PTHREAD_PRIO_INHERIT... yes
checking for SOAPYSDR... no
checking for boostlib >= 1.54.0 (105400)... yes
checking whether the Boost::System library is available... yes
configure: error: Could not find a version of the library!
pi@raspberrypi:~/apps/ODR-DabMod $ 

Then I found the solution

./configure --with-boost-libdir=/usr/lib/arm-linux-gnueabihf

worked then

[Cygwin only]: Configuration error: Output not specified

Although I don't expect to get it fixed by Matthias, I'll report this issue anyway. Maybe another person has an idea what goes wrong here.

Under Cygwin the syntax $ odr-dabmod.exe foo.eti -f /dev/null is not working. Of course, I tried other names or paths or other parameters (like format, etc.)

I only get

Modulator runtime error:  Configuration error: Output not specified
Configuration parsed. Starting up version 2.4.1

I also tried cat foo.eti | odr-dabmod.exe /dev/stdin -F /dev/stdout without any luck.

The same syntax in Linux is ok.

$ odr-dabmod foo.eti -f /dev/null
ODR-DabMod version v2.4.1-13-ga2d708d, compiled at Nov 30 2020, 20:41:54
Compiled with features: zeromq output_soapysdr SSE 
Input
  Type: file
  Source: foo.eti
Output
  Name: /dev/null
  Sampling rate: 2.0480 MHz
      Configuration parsed. Starting up version v2.4.1-13-ga2d708d

Seems this is in DabMod.cpp#300ff

mod_settings.useFileOutput

Well, it only works in Cygwin when you are using a config file (odr-dabmod.exe [configfile.ini] > /dev/null)

$ ~/odr-dabmod.exe ~/eti2raw.ini > /dev/null
ODR-DabMod version 2.4.1, compiled at Jan  5 2021, 23:02:14
Compiled with features: SSE
     Input
  Type: file
  Source: /dev/stdin
Output
  Name: /dev/stdout
  Sampling rate: 2.0480 MHz

Build not working

When i do ./configure

It says this

checking build system type... armv7l-unknown-linux-gnueabihf
checking host system type... armv7l-unknown-linux-gnueabihf
checking target system type... armv7l-unknown-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking whether g++ supports C++11 features with -std=c++11... yes
checking whether C++ compiler accepts -Wduplicated-cond... yes
checking whether C++ compiler accepts -Wduplicated-branches... yes
checking whether C++ compiler accepts -Wlogical-op... yes
checking whether C++ compiler accepts -Wrestrict... yes
checking whether C++ compiler accepts -Wno-pragmas... yes
checking whether C++ compiler accepts -Wdouble-promotion... yes
checking whether C++ compiler accepts "-Wformat=2"... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for FFTW... no
configure: error: FFTW is required

checking for FFTW... no
configure: error: FFTW is required

is the error

Please can you tell me a way to download this dependency

I did

sudo apt-get install dev-fftw

And the problem is still not resloved

DC spike

It seems that ODR-DabMod generates a DC Spike when the digital amplitude gain is set much smaller than 1.

grafik
grafik

This was created with

odr-dabmod ./foo.eti -f ./foo.raw -F u8 -a 0.2

Is this normal?

Without the -a parameter it looks as expected:

grafik
grafik

Poor u8 support

The actual version ODR-DabMod version v2.6.0-69 ( g029e9c7 ) has a very bad u8 support. Even with very sensitive AbracaDABra I get only 4.9 dB and poor audio.

grafik

Then I went back to a former installation, ODR-DabMod version v2.6.0-1 (g12f6daf), 12f6daf

Much better, 31 dB

grafik

It's both times the same command.

$ cat ./foo.eti | odr-dabmod /dev/stdin -f /tmp/foo.raw -F u8

Ignore input errors

Hi,

I'm using the ODR-DabMod with the "eti-tools" package to "modulate" (IQ samples to a fifo file) from a satellite encapsultated ETI-NI bitstream.

However, time to time, I see this message in the output of the ODR-DabMod:

WARN:  TS Discontinuity
ERROR: Deinterleave: Bad block[1]:[2.7]: f5 b.6=0

or

ERROR: Deinterleave: Bad block[1]:[2.4]: 96 b.6=1

And then the program exits.

It will be possible to execute this tool ignoring some input errors?

No ctrl+c possible at EDI input

When I use EDI as input (but I'm still trying to get a signal from Munich and Stuttgart, see piratfm/eti-tools#12 ) then ctrl+c for stopping the ODR-DabMod does not work

$ odr-dabmod odr_edi_input.ini 
ODR-DabMod version v2.0.0-26-g9ef3824, compiled at May 13 2018, 22:00:00
Compiled with features: EDI SSE 
Input
  Type: edi
  Source: udp://@239.16.242.13:60013
Output
  Name: /dev/stdout
  Sampling rate: 2.0480 MHz
      Configuration parsed. Starting up version v2.0.0-26-g9ef3824
ERROR Could not set priority for modulator:1
      Setting up timestamp decoder with 0 offset
      Opening EDI :udp://@239.16.242.13:60013
      EDI input: host:0.0.0.0, source:239.16.242.13, port:60013
^C^C^C^C^C

But it works with fileinput, on the other hand.

ODR-DabMod - 0 DAB frames encoded

I was able to receive a multiplex by edi (DCP AF) via udp and transmit it with a LimeSDR Mini.

But now I have the issue that the modulator does not transmit any frames any more:

ODR-DabMod version v2.4.2-5-g300be5d, compiled at Sep 8 2021, 15:03:03
Compiled with features: zeromq output_soapysdr output_limesdr fast-math SSE
Input
Type: edi
Source: udp://:2048
Output
SoapySDR
Device: lime
master_clock_rate: 32768000
Sampling rate: 2.0480 MHz
Configuration parsed. Starting up version v2.4.2-5-g300be5d
Soapy:Creating the device with: lime
[INFO] Make connection: 'LimeSDR Mini [USB 3.0] 1D4C3C05135XXX'
[INFO] Reference clock 40.00 MHz
[INFO] Device name: LimeSDR-Mini
[INFO] Reference: 40 MHz
[INFO] LMS7002M calibration values caching Disable
SoapySDR:Actual master clock rate: 32767.9995 kHz
SoapySDR:Actual TX rate: 2048.0000 ksps.
[INFO] Selected TX path: Band 2
SoapySDR:Actual frequency: 195935.998 kHz.
SoapySDR:Actual TX gain: 70.06
SoapySDR:Actual TX antenna: BAND1
Setting up timestamp decoder with 0 offset
Opening EDI :udp://:2048
EDI UDP input: host:0.0.0.0, source:0.0.0.0, port:2048

After CTRL+C:
^CERROR Modulator failure.
0 DAB frames encoded
0 seconds encoded
Terminating

Wireshark reports that edi packets are received:

tcpdump udp port 2048
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eno1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
17:34:16.077714 IP 192.168.XX.40.59331 > 192.168.YY.90.2048: UDP, length 2573
17:34:16.101714 IP 192.168.XX.40.59331 > 192.168.YY.90.2048: UDP, length 2573
17:34:16.125730 IP 192.168.XX.40.59331 > 192.168.YY.90.2048: UDP, length 2573
17:34:16.149718 IP 192.168.XX.40.59331 > 192.168.YY.90.2048: UDP, length 2573

What can I do to debug the issue?

config:

[log]
syslog=0
filelog=0
[input]
loop=1
transport=edi
source=udp://:2048
[modulator]
gainmode=var
digital_gain=0.8
rate=2048000
[cfr]
enable=0
clip=50.0
error_clip=0.1
[firfilter]
enabled=1
[poly]
enabled=0
polycoeffile=polyCoefs
[output]
output=soapysdr
[soapyoutput]
device=lime
master_clock_rate=32768000
txgain=70
channel=8A
tx_antenna=BAND1
[delaymanagement]
synchronous=0
mutenotimestamps=0
offset=0.002
[tii]
enable=0
comb=1
pattern=11
old_variant=0

reduced footprint for Docker (separate build without libuhd-dev)

in case of using DabMod for signal generation, it would be nice to remove libuhd-dev dependency.
we like to include your tools in a docker container and trigger it from ssh

in case of libuhd-dev, the debian:buster-slim image (68,9MB) grows up to 1,7 GB.

an minimal build with reduced dependencies would be very nice.
what do you think about? is it an option four you?

kind regards

UHD clipping

There are samples that exceed [-1;+1] with UHD output. This creates clipping in USRP and so signal degradation, wideband transients.
This can be adjusted using digital gain but with the default value of 0.8, there are still lots of samples over the limits.
The suggestion is to apply a division factor that lead to no clipping at all when digital gain is at 1.0.
Attached is this histogram of the samples with filter enables and dgain at 0.8. (lots of zero because of empty signal at the beginning of the analysis)
hist_sig

Command line parameter for selecting IQ samples format

Hi,

I suggest to add one new command-line parameter for selecting the I/Q samples format, as it can be done in the configuration file: --format=complexf,complexf_normalisex,s8,u8.

I know, this can be done using the configuratin file. However this will simplify to interoperate with other tools that read IQ samples and needs only to use the regular command-line parameters (instead of a complex conf file).

You agree?

Add support for u8 raw file output

In (closed) #13 I learned that u8 is the input for qt-dab and welle.io whereas ODR-DabMod exports s8 as raw format.

Would it be possible to add u8 format for export?

That would then allow the authors (Jan and Albrecht) to test their programs directly with raw file generated from eti-streams (made by dabtools or by eti-stuff), thus reduces the internet traffic (currently I have to send them SDR or RAW files).

configure: error: Could not link against boost_thread !

Hello,

Can you please help me configuring and compiling ODR-DabMod, I am getting configure: error: Could not link against boost_thread ! When I configure it.

I am using Ubuntu 20.04 LTS (Focal Fossa)

checking whether the Boost::Thread library is available... yes
checking for exit in -lboost_thread... no
checking for exit in -lboost_thread... (cached) no
checking for exit in -lboost_thread... (cached) no
configure: error: Could not link against boost_thread !

Thank you

Ronald

ronald@ronald-laptop:~/Documents/Mentahan/ODR/ODR-DabMod$ ./configure
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking whether g++ supports C++11 features by default... no
checking whether g++ supports C++11 features with -std=c++11... yes
checking whether C++ compiler accepts -Wduplicated-cond... no
checking whether C++ compiler accepts -Wduplicated-branches... no
checking whether C++ compiler accepts -Wlogical-op... yes
checking whether C++ compiler accepts -Wrestrict... no
checking whether C++ compiler accepts -Wno-pragmas... yes
checking whether C++ compiler accepts -Wdouble-promotion... yes
checking whether C++ compiler accepts "-Wformat=2"... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for FFTW... yes
Checking zeromq
checking for zmq_init in -lzmq... yes
checking if compiler needs -Werror to reject unknown flags... no
checking for the pthreads library -lpthreads... no
checking whether pthreads work without any flags... no
checking whether pthreads work with -Kthread... no
checking whether pthreads work with -kthread... no
checking for the pthreads library -llthread... no
checking whether pthreads work with -pthread... yes
checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE
checking if more special flags are required for pthreads... no
checking for PTHREAD_PRIO_INHERIT... yes
checking for SOAPYSDR... yes
checking for UHD... yes
checking for boostlib >= 1.55.0 (105500)... yes
checking whether the Boost::Thread library is available... yes
checking for exit in -lboost_thread... no
checking for exit in -lboost_thread... (cached) no
checking for exit in -lboost_thread... (cached) no
configure: error: Could not link against boost_thread !

Output file s16 seems corrupt

Maybe a misunderstanding, but output 16bit file(should be litlle endian) seems to be without negative value.

Here is the result of samples :
First 2 lines : I/Q signed int 16bits (s16 format)
Next 2 lines : I/Q signed 8 (s8 format)

Note : running on Raspberry


dab16bits

Poor signal with activated TII

I tried to activate TII but then my Sticks and radios either don't lock at all or get a very poor signal (Microspot 4 squares instead of 16).

Seems the null symbol causes a gain issue on the receiver side.

Add multicast support and option to choose needed interface

This patch provides support for VLC-like URL's, that allows to bind specified interface and (or) choose multicast group to join/connect to.

Here is examples of URL that is supported now:
udp://:12000 - bind to default interface and receive data from port 12000
udp://192.168.1.22:12000 - bind to interface with IP:192.168.1.22 and receive data from port 12000
udp://[email protected]:12000 - bind to interface with IP:192.168.1.22 and join multicast group: 239.100.101.22 and receive data from port 12000
udp://@239.100.101.22:12000 - bind to default interafce (which routes to multicast) and join multicast group: 239.100.101.22 and receive data from port 12000

multicast.patch.gz

P.S. Also replaced c++11 regex by simple string parser due my ubuntu-14.04 have no full regex support.

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.