diff options
author | Josh Blum <josh@joshknows.com> | 2012-05-17 17:49:28 -0700 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2012-05-17 17:49:28 -0700 |
commit | 3804361215babcebb2a814cf29a315c5f5f3fd2f (patch) | |
tree | 7730156ef43824392c1298b9d1314ce73aa06686 /host/lib/usrp/usrp1 | |
parent | c31bf2d6a0790ddf880405030e85ecb7a9e8994b (diff) | |
parent | 19874c04d49a732189aafa45e2a9638dce810da2 (diff) | |
download | uhd-3804361215babcebb2a814cf29a315c5f5f3fd2f.tar.gz uhd-3804361215babcebb2a814cf29a315c5f5f3fd2f.tar.bz2 uhd-3804361215babcebb2a814cf29a315c5f5f3fd2f.zip |
Merge branch 'maint'
Diffstat (limited to 'host/lib/usrp/usrp1')
-rw-r--r-- | host/lib/usrp/usrp1/codec_ctrl.cpp | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/host/lib/usrp/usrp1/codec_ctrl.cpp b/host/lib/usrp/usrp1/codec_ctrl.cpp index c82569ea3..20a7f9bab 100644 --- a/host/lib/usrp/usrp1/codec_ctrl.cpp +++ b/host/lib/usrp/usrp1/codec_ctrl.cpp @@ -1,5 +1,5 @@ // -// Copyright 2010-2011 Ettus Research LLC +// Copyright 2010-2012 Ettus Research LLC // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -372,9 +372,43 @@ double usrp1_codec_ctrl_impl::fine_tune(double codec_rate, double target_freq) return actual_freq; } -void usrp1_codec_ctrl_impl::set_duc_freq(double freq, double rate) +double calc_dxc_freq(double target_freq, double rate) { + double delta = target_freq; //- bandwidth; + double dxc_freq = 0.0; + + if (delta >= 0) { + while(delta > rate) { + delta -= rate; + } + if (delta <= rate/2) { + // non-inverted region + dxc_freq = -delta; + } else { + // inverted region + dxc_freq = -(delta - rate) ; + } + } else { + while(delta < -rate) { + delta += rate; + } + //std::cout << std::fixed << "delta: " << delta << std::endl; + if (delta >= -rate/2) { + // non-inverted region + dxc_freq = -delta; + } else { + // inverted region + dxc_freq = -(delta + rate); + } + } + + return dxc_freq; +} + +void usrp1_codec_ctrl_impl::set_duc_freq(double frequency, double rate){ + double codec_rate = rate * 2; + double freq = calc_dxc_freq(frequency, codec_rate); double coarse_freq = coarse_tune(codec_rate, freq); double fine_freq = fine_tune(codec_rate / 4, freq - coarse_freq); |