diff options
author | Thomas Tsou <tom@tsou.cc> | 2013-10-11 13:49:55 -0400 |
---|---|---|
committer | Thomas Tsou <tom@tsou.cc> | 2013-10-18 13:10:17 -0400 |
commit | c1f7c42a33a1125f8b39f53a1b6e1bae38376857 (patch) | |
tree | fd79543a262281b4cbf04bfb09f305b95a715dd4 /Transceiver52M/radioInterfaceResamp.cpp | |
parent | 2c282f5e1268146761413a145fd8ae2fb523fa4f (diff) |
Transceiver52M: Setup dual sample rate transceiver
This patch applies oversampling, when selected with 4 sps,
to the downlink only, while running the receiver with
minimal sampling at 1 sps. These split sample rates allow
us to run a highly accurate downlink signal with minimal
distortion, while keeping receive path channel filtering
on the FPGA.
Without this patch, we oversample the receive path and
require a steep receive filter to get similar adjacent
channel suppression as the FPGA halfband / CIC filter
combination, which comes with a high computational cost.
Signed-off-by: Thomas Tsou <tom@tsou.cc>
Diffstat (limited to 'Transceiver52M/radioInterfaceResamp.cpp')
-rw-r--r-- | Transceiver52M/radioInterfaceResamp.cpp | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/Transceiver52M/radioInterfaceResamp.cpp b/Transceiver52M/radioInterfaceResamp.cpp index 03cde30..40bf32d 100644 --- a/Transceiver52M/radioInterfaceResamp.cpp +++ b/Transceiver52M/radioInterfaceResamp.cpp @@ -28,14 +28,6 @@ extern "C" { #include "convert.h" } -/* New chunk sizes for resampled rate */ -#ifdef INCHUNK - #undef INCHUNK -#endif -#ifdef OUTCHUNK - #undef OUTCHUNK -#endif - /* Resampling parameters for 100 MHz clocking */ #define RESAMP_INRATE 52 #define RESAMP_OUTRATE 75 @@ -104,7 +96,7 @@ bool RadioInterfaceResamp::init() cutoff = RESAMP_TX4_FILTER; dnsampler = new Resampler(RESAMP_INRATE, RESAMP_OUTRATE); - if (!dnsampler->init(cutoff)) { + if (!dnsampler->init()) { LOG(ALERT) << "Rx resampler failed to initialize"; return false; } @@ -121,10 +113,10 @@ bool RadioInterfaceResamp::init() * and requires headroom equivalent to the filter length. Low * rate buffers are allocated in the main radio interface code. */ - innerSendBuffer = new signalVector(INCHUNK * 20, RESAMP_FILT_LEN); + innerSendBuffer = new signalVector(INCHUNK * 20, upsampler->len()); outerSendBuffer = new signalVector(OUTCHUNK * 20); - outerRecvBuffer = new signalVector(OUTCHUNK * 2, RESAMP_FILT_LEN); + outerRecvBuffer = new signalVector(OUTCHUNK * 2, dnsampler->len()); innerRecvBuffer = new signalVector(INCHUNK * 20); convertSendBuffer = new short[OUTCHUNK * 2 * 20]; |