summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/example.ini6
-rw-r--r--src/DabMod.cpp8
-rw-r--r--src/DabModulator.cpp16
-rw-r--r--src/DabModulator.h5
-rw-r--r--src/TII.cpp4
5 files changed, 30 insertions, 9 deletions
diff --git a/doc/example.ini b/doc/example.ini
index 317d652..d99a966 100644
--- a/doc/example.ini
+++ b/doc/example.ini
@@ -229,3 +229,9 @@ offset=0.002
; The previous static vs dynamic offset distinction, and reading the
; modulatoroffset from a file has been removed.
+[tii]
+; (experimental)
+; If these options are set, TII transmission is enabled.
+comb = 16
+pattern = 3
+
diff --git a/src/DabMod.cpp b/src/DabMod.cpp
index 1fc7e3c..618e0fe 100644
--- a/src/DabMod.cpp
+++ b/src/DabMod.cpp
@@ -132,6 +132,8 @@ int launch_modulator(int argc, char* argv[])
float normalise = 1.0f;
GainMode gainMode = GAIN_VAR;
+ int tiiPattern = 0;
+ int tiiComb = 0;
/* UHD requires the input I and Q samples to be in the interval
* [-1.0,1.0], otherwise they get truncated, which creates very
@@ -578,6 +580,10 @@ int launch_modulator(int argc, char* argv[])
outputuhd_conf.muteNoTimestamps = (pt.get("delaymanagement.mutenotimestamps", 0) == 1);
#endif
+
+ /* Read TII parameters from config file */
+ tiiComb = pt.get("tii.comb", 0);
+ tiiPattern = pt.get("tii.pattern", 0);
}
if (rcs.get_no_controllers() == 0) {
@@ -750,7 +756,7 @@ int launch_modulator(int argc, char* argv[])
shared_ptr<DabModulator> modulator(
new DabModulator(tist_offset_s, tist_delay_stages, &rcs,
outputRate, clockRate, dabMode, gainMode, digitalgain,
- normalise, filterTapsFilename));
+ normalise, filterTapsFilename, tiiComb, tiiPattern));
flowgraph.connect(input, modulator);
if (format_converter) {
diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp
index 97c36da..dbc6827 100644
--- a/src/DabModulator.cpp
+++ b/src/DabModulator.cpp
@@ -61,7 +61,8 @@ DabModulator::DabModulator(
unsigned outputRate, unsigned clockRate,
unsigned dabMode, GainMode gainMode,
float digGain, float normalise,
- std::string filterTapsFilename
+ std::string filterTapsFilename,
+ int tiiComb, int tiiPattern
) :
ModCodec(ModFormat(1), ModFormat(0)),
myOutputRate(outputRate),
@@ -73,6 +74,8 @@ DabModulator::DabModulator(
myEtiReader(EtiReader(tist_offset_s, tist_delay_stages, rcs)),
myFlowgraph(NULL),
myFilterTapsFilename(filterTapsFilename),
+ myTiiComb(tiiComb),
+ myTiiPattern(tiiPattern),
myRCs(rcs)
{
PDEBUG("DabModulator::DabModulator(%u, %u, %u, %u) @ %p\n",
@@ -195,8 +198,10 @@ int DabModulator::process(Buffer* const dataIn, Buffer* dataOut)
(float)mySpacing * (float)myOutputRate / 2048000.0f,
cic_ratio));
-
- shared_ptr<TII> tii(new TII(myDabMode, 3, 16));
+ shared_ptr<TII> tii;
+ if (myTiiComb != 0) {
+ tii = make_shared<TII>(myDabMode, myTiiPattern, myTiiComb);
+ }
shared_ptr<OfdmGenerator> cifOfdm(
new OfdmGenerator((1 + myNbSymbols), myNbCarriers, mySpacing));
@@ -347,7 +352,10 @@ int DabModulator::process(Buffer* const dataIn, Buffer* dataOut)
myFlowgraph->connect(cifFreq, cifDiff);
myFlowgraph->connect(cifNull, cifSig);
myFlowgraph->connect(cifDiff, cifSig);
- myFlowgraph->connect(tii, cifSig);
+ if (tii) {
+ myFlowgraph->connect(tii, cifSig);
+ }
+
if (useCicEq) {
myFlowgraph->connect(cifSig, cifCicEq);
myFlowgraph->connect(cifCicEq, cifOfdm);
diff --git a/src/DabModulator.h b/src/DabModulator.h
index 1a9e477..48cdd42 100644
--- a/src/DabModulator.h
+++ b/src/DabModulator.h
@@ -54,7 +54,8 @@ public:
unsigned outputRate = 2048000, unsigned clockRate = 0,
unsigned dabMode = 0, GainMode gainMode = GAIN_VAR,
float digGain = 1.0, float normalise = 1.0,
- std::string filterTapsFilename = "");
+ std::string filterTapsFilename = "",
+ int tiiComb = 0, int tiiPattern = 0);
DabModulator(const DabModulator& copy);
virtual ~DabModulator();
@@ -77,6 +78,8 @@ protected:
Flowgraph* myFlowgraph;
OutputMemory* myOutput;
std::string myFilterTapsFilename;
+ int myTiiComb;
+ int myTiiPattern;
RemoteControllers* myRCs;
size_t myNbSymbols;
diff --git a/src/TII.cpp b/src/TII.cpp
index bafa343..5c85302 100644
--- a/src/TII.cpp
+++ b/src/TII.cpp
@@ -196,11 +196,9 @@ int TII::process(Buffer* const dataIn, Buffer* dataOut)
}
void TII::enable_carrier(int k) {
- fprintf(stderr, "k = %d\n", k);
-
int ix = m_carriers/2 + k;
- if (ix < 0 or ix > (ssize_t)m_dataIn.size()) {
+ if (ix < 0 or ix+1 >= (ssize_t)m_dataIn.size()) {
throw std::runtime_error(
"TII::enable_carrier invalid k!");
}