aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README-SFN127
-rw-r--r--README.md20
-rw-r--r--test.config67
-rw-r--r--test.ini71
4 files changed, 285 insertions, 0 deletions
diff --git a/README-SFN b/README-SFN
new file mode 100644
index 0000000..de4ef7c
--- /dev/null
+++ b/README-SFN
@@ -0,0 +1,127 @@
+README for the SFN patch
+========================
+
+Concept
+-------
+
+Each modulator receives ETI frames with absolute timestamps. These timestamps
+are composed of two parts:
+- The TIST field as defined in the ETI standard, giving an offset after the
+ pulse per second signal;
+- A time information transmitted using the MNSC, representing the precise time
+ when the frame must be transmitted, with one-second resolution.
+
+When CRC-DABMUX is called with -s, the TIST is defined in each frame. The
+Time is always encoded in the MNSC.
+
+In a SFN setup, it is not possible to rely on a modulator to slow down the
+Ensemble multiplexer. CRC-DABMUX takes an additional parameter -r to output one
+ETI frame every 24ms. This output parameter only adds a simul:// output.
+
+The ETI stream must then be made available to several transmission sites. For
+this, the eti_tcp server can be used.
+The eti_tcp server listens on the port specified on the command line.
+An example invocation is:
+./mux-throttled.sh -s -m 1 | ./eti_tcp/eti_tcp.py 54001
+
+Each modulator then receives the ETI stream through a TCP connection. Each frame
+contains the complete timestamp, to which an per-modulator offset is added.
+The sum is then given to the USRP. The offset can be specified in two ways:
+
+using -o delay:
+Adds a constant delay specified on the command line (see 1st example).
+
+using -O delayfile
+Adds the delay specified in the given file. The file must contains a single
+line containing a floating point number. This file is read each 50 frames, and
+the modulator delay is updated.
+
+In both cases, the units are seconds.
+
+Example modulator invocation (for a B100 USRP supporting 2048Msps and with a
+fixed delay of 2.3 seconds)
+nc localhost 54001 | ./moduhd-2048.sh -o 2.3
+
+Example modulator invocation (for an USRP requiring resampling and with a delay
+specified in a separate file "moddelay")
+nc localhost 54001 | ./moduhd-resample.sh -O moddelay -G 5
+
+It is also possible to set daugherboard gain using -G. Furthermore, the transmission
+frequency is set on the command line, as seen in the examples in moduhd-XXX.sh.
+
+CRC-DABMOD uses the UHD library to output modulated samples to the USRP device.
+When started, it defines the USRP time using the local time and the PPS signal.
+It is therefore important to synchronise computer time using NTPd.
+
+When a frame arrives with a timestamp that is in the past, the frame is dropped.
+If the timestamp is too far in the future, the output module waits a short
+delay.
+
+Synchonisation can be verified by using an oscilloscope and a receiver. It is
+very easy to see if the null symbols align.
+
+
+Hardware requirements
+---------------------
+
+The following hardware is required to test the SFN patch to the CRC mmbTools:
+- Two USRPs ;
+- One or two computers with the mmbTools installed ;
+- A network connection between the two computers ;
+- A 10MHz refclk source ;
+- A 1PPS source synchronised to the 10MHz ;
+- An oscilloscope to check synchronisation.
+
+The lab setup used in the experiments :
+http://pic.mpb.li/IMAG0411.jpg
+
+In this example, one USRP B100 and one USRP2 are used. Modulation is done on two
+different computers, but it also works with a single computer. In that case, the
+device string for the -u option for CRC-DABMOD must specify the device. (e.g.
+-u "type=b100", -u "type=usrp2" or -u "serial=ABC123")
+
+The HP33120A generator at the bottom is used to generate the 10MHz REFCLK (sine,
+2Vpp). It's sync output is used as 10MHz IN for the Agilent 33250A generator.
+The Agilent is set to a square wave, 1Hz. Its sync output is then wired to the
+PPS input of the USRPs.
+
+List of changes made
+--------------------
+To CRC-DABMUX:
+- Throttled output option instanciates a simul output
+- Set TIST and use MNSC to transmit time
+- Command line arguments handling
+
+Files:
+Modified Eti.h and DabMux.cpp
+
+To CRC-DABMOD:
+- Added multithreaded UHD Output module
+- Added normalisation for UHD (we must divide output samples by
+ 32768.0)
+- Command line arguments handling
+- Changed the flowgraph to be able to chose between outputs
+- Added decoding of time in MNSC
+- Added delay control for the modulator using -o and -O
+- Initially set the timezone to UTC, because the MNSC is in UTC
+
+Files:
+Added OutputUHDThreaded.{cpp,h}, TimestampDecoder.{cpp,h}; Modified DabMod.cpp,
+DabModulator.h, Eti.h, EtiReader.{cpp,h}; Changed some .h files to include
+<stdio.h> because of compilation issues; Corrected OutputMemory char* name().
+
+
+Future elements to be changed
+-----------------------------
+- Communicate delay and buffer information between multiplexer and modulators,
+ to have a better control about delays.
+- Handle UHD asynchronous messages in another thread, and use this information
+ for monitoring
+
+Repository:
+http://hg.mpb.li/mmbtools-sfn/
+
+2012-07-11
+Matthias P. Braendli
+matthias@mpb.li
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c2ab110
--- /dev/null
+++ b/README.md
@@ -0,0 +1,20 @@
+Auxiliary tools and scripts for mmbTools
+========================================
+
+This folder contains a weakly structured collection of scripts and tools.
+
+Additional information might be found in README-SFN, that was written mid-2012.
+
+There is:
+ * a few .ini files: example configuration files for CRC-DABMOD
+ * test.config for CRC-DabMux
+ * scripts to encode to mp2
+ * moduhd\*.sh illustrate how to start dabmod before configuration files were created
+ * mux-throttled.sh same for dabmux
+ * filter/ utility to generate taps for FIRFilter
+ * qrg.txt list of channels/frequencies
+ * eti\_tcp.py used to send ETI over TCP to dabmod
+ * eti-udp/ experimental UDP transport with FEC
+ * zmq-rx.py python tool to receive data from a ZeroMQ socket
+
+mpb
diff --git a/test.config b/test.config
new file mode 100644
index 0000000..20859ed
--- /dev/null
+++ b/test.config
@@ -0,0 +1,67 @@
+general {
+ ; the DAB Transmission mode (values 1-4 accepted)
+ dabmode 1
+
+ ; the number of ETI frames to generate (set to 0 to get an unlimited number)
+ nbframes 0
+
+
+ ; Enable TCPLog on port 12222
+ tcplog false
+ writescca false
+ tist false
+}
+
+; Some ensemble parameters
+ensemble {
+ id 20479
+ ecc 1249 ; Extended Country Code (decimal)
+ label "TuxMux"
+ shortlabel "Tux"
+}
+
+services {
+ fbp {
+ label "fb+"
+ shortlabel "fb+"
+ pty 0
+ language 0
+ ; also supports id
+ }
+}
+
+; The subchannels are defined in the corresponding section.
+; supported types are : audio, bridge, data, enhancedpacket,
+; dabplus, dmb, packet, test
+subchannels {
+ fbp {
+ type dabplus
+ inputfile "fb.dabp"
+ nonblock false
+ bitrate 96
+ id 10
+ protection 3
+ }
+}
+
+; For now, each component links one service to one subchannel
+components {
+ ; the component unique identifiers are not used anywhere, but
+ ; are useful to disambiguate different components.
+ funky {
+ label "CoSin"
+ shortlabel "CoSin"
+ service fbp
+ subchannel fbp
+ }
+}
+
+; A list of outputs, in the format
+; unique_id "uri"
+outputs {
+ foobar "fifo:///dev/stdout?type=raw"
+
+ ; This throttles muxing down to nominal rate
+ throttle "simul://"
+
+}
diff --git a/test.ini b/test.ini
new file mode 100644
index 0000000..a9e1b70
--- /dev/null
+++ b/test.ini
@@ -0,0 +1,71 @@
+; Sample configuration file for CRC-DABMOD
+
+[remotecontrol]
+telnet=1
+telnetport=2121
+
+[log]
+syslog=0
+filelog=1
+filename=/dev/stderr
+
+[input]
+#transport=file
+#source=/home/bram/pdm/mmbtools-sfn/scripts/eti/fb_framed.eti
+#source=/dev/stdin
+
+transport=zeromq
+source=tcp://localhost:8080
+loop=0
+
+[modulator]
+; Gain mode: 0=FIX, 1=MAX, 2=VAR
+gainmode=2
+
+; Transmission mode
+; If not defined, take the mode from ETI
+;mode=2
+
+; Set to 0 to disable CicEqualiser
+dac_clk_rate=0
+
+digital_gain=1.0
+
+; Output sample rate
+rate=2048000
+
+[firfilter]
+enabled=1
+filtertapsfile=filter/simplefiltertaps.txt
+
+[output]
+; choose output: possible values: uhd, file
+output=uhd
+
+[fileoutput]
+filename=/dev/null
+
+[uhdoutput]
+device=master_clock_rate=32768000,type=b100
+frequency=234208000
+txgain=2
+
+; possible values : internal, external, MIMO
+refclk_source=internal
+
+; possible values : none, external, MIMO
+pps_source=none
+
+; behaviour when external clock reference lock lost
+; possible values: ignore, crash
+behaviour_refclk_lock_lost=crash
+
+; Used for SFN with the UHD output
+[delaymanagement]
+synchronous=0
+
+; choose between fixed and dynamic offset definition
+management=dynamic
+
+fixedoffset=0.002
+dynamicoffsetfile=modulatoroffset