aboutsummaryrefslogtreecommitdiffstats
path: root/host
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2012-05-17 17:49:28 -0700
committerJosh Blum <josh@joshknows.com>2012-05-17 17:49:28 -0700
commit3804361215babcebb2a814cf29a315c5f5f3fd2f (patch)
tree7730156ef43824392c1298b9d1314ce73aa06686 /host
parentc31bf2d6a0790ddf880405030e85ecb7a9e8994b (diff)
parent19874c04d49a732189aafa45e2a9638dce810da2 (diff)
downloaduhd-3804361215babcebb2a814cf29a315c5f5f3fd2f.tar.gz
uhd-3804361215babcebb2a814cf29a315c5f5f3fd2f.tar.bz2
uhd-3804361215babcebb2a814cf29a315c5f5f3fd2f.zip
Merge branch 'maint'
Diffstat (limited to 'host')
-rw-r--r--host/lib/usrp/usrp1/codec_ctrl.cpp38
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);