diff options
| author | Philip Balister <philip@opensdr.com> | 2010-09-09 14:08:20 -0400 | 
|---|---|---|
| committer | Philip Balister <philip@opensdr.com> | 2010-09-09 14:08:20 -0400 | 
| commit | 262109bc461139448c816f92644a9f748798c4fc (patch) | |
| tree | b51367352945b08566ff8501d7ef4b91eb86e4d4 /host/examples/tx_waveforms.cpp | |
| parent | d2d5be27b09faee1481a763ce25e7b95460a46c9 (diff) | |
| parent | 5058145dcc5cb681887773b8245cf89df58399f9 (diff) | |
| download | uhd-262109bc461139448c816f92644a9f748798c4fc.tar.gz uhd-262109bc461139448c816f92644a9f748798c4fc.tar.bz2 uhd-262109bc461139448c816f92644a9f748798c4fc.zip | |
Merge branch 'master' of ettus.sourcerepo.com:ettus/uhdpriv into usrp_e
Diffstat (limited to 'host/examples/tx_waveforms.cpp')
| -rw-r--r-- | host/examples/tx_waveforms.cpp | 19 | 
1 files changed, 15 insertions, 4 deletions
| diff --git a/host/examples/tx_waveforms.cpp b/host/examples/tx_waveforms.cpp index 9886000b1..3f319cf68 100644 --- a/host/examples/tx_waveforms.cpp +++ b/host/examples/tx_waveforms.cpp @@ -17,6 +17,7 @@  #include <uhd/utils/thread_priority.hpp>  #include <uhd/utils/safe_main.hpp> +#include <uhd/utils/static.hpp>  #include <uhd/usrp/simple_usrp.hpp>  #include <boost/program_options.hpp>  #include <boost/thread/thread_time.hpp> //system time @@ -44,9 +45,16 @@ float gen_ramp(float x){      return std::fmod(x, 1)*2 - 1;  } +#define sine_table_len 2048 +static float sine_table[sine_table_len]; +UHD_STATIC_BLOCK(gen_sine_table){ +    static const float m_pi = std::acos(float(-1)); +    for (size_t i = 0; i < sine_table_len; i++) +        sine_table[i] = std::sin((2*m_pi*i)/sine_table_len); +} +  float gen_sine(float x){ -    static const float two_pi = 2*std::acos(float(-1)); -    return std::sin(x*two_pi); +    return sine_table[size_t(x*sine_table_len)%sine_table_len];  }  int UHD_SAFE_MAIN(int argc, char *argv[]){ @@ -65,11 +73,11 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){          ("args", po::value<std::string>(&args)->default_value(""), "simple uhd device address args")          ("duration", po::value<size_t>(&total_duration)->default_value(3), "number of seconds to transmit")          ("spb", po::value<size_t>(&spb)->default_value(10000), "samples per buffer") -        ("rate", po::value<double>(&rate)->default_value(100e6/16), "rate of outgoing samples") +        ("rate", po::value<double>(&rate)->default_value(1.5e6), "rate of outgoing samples")          ("freq", po::value<double>(&freq)->default_value(0), "rf center frequency in Hz")          ("ampl", po::value<float>(&l)->default_value(float(0.3)), "amplitude of the waveform")          ("gain", po::value<float>(&gain)->default_value(float(0)), "gain for the RF chain") -        ("wave-type", po::value<std::string>(&wave_type)->default_value("SINE"), "waveform type (CONST, SQUARE, RAMP, SINE)") +        ("wave-type", po::value<std::string>(&wave_type)->default_value("CONST"), "waveform type (CONST, SQUARE, RAMP, SINE)")          ("wave-freq", po::value<double>(&wave_freq)->default_value(0), "waveform frequency in Hz")      ;      po::variables_map vm; @@ -113,6 +121,9 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){      if (std::abs(wave_freq) > sdev->get_tx_rate()/2){          throw std::runtime_error("wave freq out of Nyquist zone");      } +    if (sdev->get_tx_rate()/std::abs(wave_freq) > sine_table_len/2 and wave_type == "SINE"){ +        throw std::runtime_error("sine freq too small for table"); +    }      //store the generator function for the selected waveform      boost::function<float(float)> wave_gen; | 
