opendigitalradio / odr-dabmod Goto Github PK
View Code? Open in Web Editor NEWODR-DabMod is a DAB (Digital Audio Broadcasting) modulator, part of the ODR-mmbTools.
Home Page: https://www.opendigitalradio.org
License: Other
ODR-DabMod is a DAB (Digital Audio Broadcasting) modulator, part of the ODR-mmbTools.
Home Page: https://www.opendigitalradio.org
License: Other
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
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.
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.
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
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?
Building with gcc 4.9.2 fails because the sse check doesn't work, see https://bugzilla.redhat.com/show_bug.cgi?id=1092991#c1 for an explanation. Adding CFLAGS="-msse2" to configure.ac before the sse test runs fixes this for me.
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?.
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.
**********
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
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
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
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).
As soon these special characters appear odr-dabmod might stop (but not in all cases).
When I write the output into a file or to a fifo file, this works, indeed.
Any idea?
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.
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.
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.
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
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
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: ‘getenv’ setenv("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_r’ tzset(); ^~~~~ _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
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
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
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
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.
Then I went back to a former installation, ODR-DabMod version v2.6.0-1 (g12f6daf), 12f6daf
Much better, 31 dB
It's both times the same command.
$ cat ./foo.eti | odr-dabmod /dev/stdin -f /tmp/foo.raw -F u8
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?
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.
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
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
Add digital gain settings in terminal so that it can be changed while on air.
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)
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?
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).
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 !
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.
I used the ini file from https://www.welle.io/devices/rawfile to create an I/O raw file from an ETI.
But I get a file with a very small SNR (screenshots taken from qt-dab and welle.io)
How can I improve it?
(Albert himself recommended to open an issue here)
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
P.S. Also replaced c++11 regex by simple string parser due my ubuntu-14.04 have no full regex support.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.