diff options
author | Josh Blum <josh@joshknows.com> | 2011-11-10 10:23:05 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2011-11-10 10:23:05 -0800 |
commit | c29adad91e1987da63b11716156b86d237cfda82 (patch) | |
tree | da7636e22eba953f669c48c6da6ae3467e8f1e5a | |
parent | 6f1f5f5fa2d044e4017be27ad5c1f67adbcea3f7 (diff) | |
download | uhd-c29adad91e1987da63b11716156b86d237cfda82.tar.gz uhd-c29adad91e1987da63b11716156b86d237cfda82.tar.bz2 uhd-c29adad91e1987da63b11716156b86d237cfda82.zip |
uhd: performance improvement for tx waveforms using integer table lookup
-rw-r--r-- | host/examples/tx_waveforms.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/host/examples/tx_waveforms.cpp b/host/examples/tx_waveforms.cpp index 5b17e0595..a182f2d11 100644 --- a/host/examples/tx_waveforms.cpp +++ b/host/examples/tx_waveforms.cpp @@ -75,8 +75,9 @@ public: } } - inline std::complex<float> operator()(const double theta) const{ - return _wave_table[unsigned(theta*wave_table_len)%wave_table_len]; + inline std::complex<float> operator()(size_t &index) const{ + index %= wave_table_len; + return _wave_table[index]; } private: @@ -188,8 +189,8 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ //pre-compute the waveform values const wave_table_class wave_table(wave_type, ampl); - const double cps = wave_freq/usrp->get_tx_rate(); - double theta = 0; + const size_t step = boost::math::iround(wave_freq/usrp->get_tx_rate() * wave_table_len); + size_t index = 0; //create a transmit streamer //linearly map channels (index0 = channel0, index1 = channel1, ...) @@ -240,12 +241,10 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){ while(not stop_signal_called){ //fill the buffer with the waveform for (size_t n = 0; n < buff.size(); n++){ - buff[n] = wave_table(theta += cps); + buff[n] = wave_table(index); + index += step; } - //bring the theta back into range [0, 1) - theta = std::fmod(theta, 1); - //send the entire contents of the buffer tx_stream->send(buffs, buff.size(), md); |