diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-02-07 11:44:43 +0100 | 
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-02-07 11:44:43 +0100 | 
| commit | 96b1cbaa255b04a20d0f7ca6bda14fa87eb3ed62 (patch) | |
| tree | 60d968dd5edd26d727f6f7e8ad85db5e825f32d8 /src | |
| parent | 05d2210e4336dc98966683b6e725c65e729b7216 (diff) | |
| download | dabmod-96b1cbaa255b04a20d0f7ca6bda14fa87eb3ed62.tar.gz dabmod-96b1cbaa255b04a20d0f7ca6bda14fa87eb3ed62.tar.bz2 dabmod-96b1cbaa255b04a20d0f7ca6bda14fa87eb3ed62.zip  | |
Fix offset in TII carriers
Diffstat (limited to 'src')
| -rw-r--r-- | src/OfdmGenerator.cpp | 6 | ||||
| -rw-r--r-- | src/TII.cpp | 15 | 
2 files changed, 18 insertions, 3 deletions
diff --git a/src/OfdmGenerator.cpp b/src/OfdmGenerator.cpp index 57e0e0e..26ad7a4 100644 --- a/src/OfdmGenerator.cpp +++ b/src/OfdmGenerator.cpp @@ -207,12 +207,18 @@ int OfdmGenerator::process(Buffer* const dataIn, Buffer* dataOut)          myFftIn[0][0] = 0;          myFftIn[0][1] = 0; +        /* For TM I this is: +         * ZeroDst=769 ZeroSize=511 +         * PosSrc=0 PosDst=1 PosSize=768 +         * NegSrc=768 NegDst=1280 NegSize=768 +         */          memset(&myFftIn[myZeroDst], 0, myZeroSize * sizeof(FFT_TYPE));          memcpy(&myFftIn[myPosDst], &in[myPosSrc],                  myPosSize * sizeof(FFT_TYPE));          memcpy(&myFftIn[myNegDst], &in[myNegSrc],                  myNegSize * sizeof(FFT_TYPE)); +          if (myCfr) {              reference.resize(mySpacing);              memcpy(reference.data(), myFftIn, mySpacing * sizeof(FFT_TYPE)); diff --git a/src/TII.cpp b/src/TII.cpp index 09a4920..a9eee16 100644 --- a/src/TII.cpp +++ b/src/TII.cpp @@ -230,8 +230,16 @@ int TII::process(Buffer* dataIn, Buffer* dataOut)      return 1;  } -void TII::enable_carrier(int k) { -    int ix = m_carriers/2 + k; +void TII::enable_carrier(int k) +{ +    /* The OFDMGenerator shifts all positive frequencies by one, +     * i.e. index 0 is not the DC component, it's the first positive +     * frequency. Because this is different from the definition of k +     * from the spec, we need to compensate this here. +     * +     * Positive frequencies are k > 0 +     */ +    int ix = m_carriers/2 + k + (k>=0 ? -1 : 0);      if (ix < 0 or ix+1 >= (ssize_t)m_Acp.size()) {          throw TIIError("TII::enable_carrier invalid k!"); @@ -240,7 +248,8 @@ void TII::enable_carrier(int k) {      m_Acp[ix] = true;  } -void TII::prepare_pattern() { +void TII::prepare_pattern() +{      int comb = m_conf.comb; // Convert from unsigned to signed      std::lock_guard<std::mutex> lock(m_enabled_carriers_mutex);  | 
