From c94b7ccbe22ca92459a85994939085dde6242059 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 10 Apr 2019 22:10:49 +0200 Subject: [PATCH] XTRX output: implemented baseband or device sample rate input option --- doc/img/XTRXOutput_plugin.png | Bin 34872 -> 35825 bytes doc/img/XTRXOutput_plugin.xcf | Bin 158166 -> 163072 bytes plugins/samplesink/limesdroutput/readme.md | 6 +- plugins/samplesink/xtrxoutput/readme.md | 18 +++-- .../samplesink/xtrxoutput/xtrxoutputgui.cpp | 67 ++++++++++++++++-- plugins/samplesink/xtrxoutput/xtrxoutputgui.h | 3 + .../samplesink/xtrxoutput/xtrxoutputgui.ui | 26 +++++-- .../xtrxoutput/xtrxoutputthread.cpp | 1 + plugins/samplesource/limesdrinput/readme.md | 6 +- 9 files changed, 108 insertions(+), 19 deletions(-) diff --git a/doc/img/XTRXOutput_plugin.png b/doc/img/XTRXOutput_plugin.png index 218112ab3ebd303257e6482688441a23670ee249..9ec5126ebe5a5952f9e66a0b1c2476f0c2db9e58 100644 GIT binary patch literal 35825 zcmZ^K1yEhf)+QlBfZ*;S1a}V}+@0VO+}%9{cXtaGAhso6t8!J|R07f>l_*kBOGL0noGX8jc$8rz$CvSNNHsP|CfLi|cDa|h|J zno3`uyO*n&4pP6-gnWB%CIM%b&|sKSxEW(PJg%s2dRb)QO4W}!-p5j9!CXQ}J?v(By0s2_=Hzh7?~w(}-sm|CTI8NS_#+06=w@ra4u{_j zw$oGD#3`FwrGv~SU`9tA?uTF>zHPmx`R{f>hLhljUpU=F+IErteS?R^f#Hg47nvAc z&X!qe5l->m=kwb_j8y`-)mUN=)K@~Ey*QgkgyTYg8`NJa+nzUh)wJ55d|6v5`fKe+ z(v&Hk_pwF-Jr1mR0xqiWD}NXT41a3&^q%;#me5?p2RPJ8B@EMwb7kZ^Yv+dmE)C1PBV0Loj)u72NNWgm+U znq6XjPBc)qbFgJgc882_353DGzETeBla8==#{0Myqxv412b`#l=a@4_Y-7A0@o-(!K>3dibN+DqZYjUR#ct>`k#Xw$&OVeMyYao z4bA)^0Q{!@G40^|OTy8Bh$@ez2rd{Mzlj32bsB*S>2*W5q%bk;KeEFwI8)yX+pwIx z6zMiGtMcX7=7gQC_dh2l-CT<$5HRsndN*m_D}QnYB`*S(w>%LXAe$?CRb+;&h6m=|)oKlrIa9X=Mf2(`~iW-~w}{qWnh6^7wIV*hzy?q5B) z5PSXoN+6#>L%^2(7av4jCb<0&1B30u_hsMLXPjKty>XU$Jy#bl7TB&{mL@SOGin18ySZJMvqau#k^9d$|$! zBSP-`7eU=RbBw<}(+=hQ65@aRDxph;vpTAlo%4ZS?Ep`vLZ^Oq%vmb3i;+ZqLI|Rn z0%myvdss48Ka!2YzPhHqH5HCQcZ`vmaPj#qHS@|${`DSs3^9f(_1;Gue=bYNGmY9^ zeT9=Kp2?j>?Qk4iC}hw}qyDEF^H5g4AN?vN;2#VG0uATl0kO z2a<=Ul9wd*$VM1rIij8V0?3LI0;N&Q@v6ma6|LyPff^LVArcZOQ;XomR z3}edN`lJMg1>xuD-3;DU8$Da5Zp-5CL3aD}Vy%c$8EKu^U~AHY+q!v=cR?l^mH(=@ zEEWb*UGyfbc}{k+*x#AY4Hwayaa9KgET=~;eP(u$v@mP>OePCcmIUDu^nt&TZUYuT8HT$n1=#9k9^}`)$$~;WsTm)7FPM!m9*XYmm zT+rN>6)L^*eWXfCyY;F{onXP0a1&y9rl0c^79H{Wr#hF)y-Nt4(ueXxn?kGzo$9%$ z%H_qPp)kI1o=N@^>!l^X)Z=jbc-b`_<&D>gK^$cxy+8M3XCk~JZ<8dpFXf}q7LB)J zxAoqgsnqlLEi@bidll^Ao|GDi2@uPy{~dNQwrIWQ3B*p4)u7g^M? z?k^vWF_og#XW~B|FyNHP$yTpUTowkfou;;W0aGf zPu2eK4h&xHm&5cZ0%oiQ8&nn>)83ehCGv_{h2<{9@e+At=azjee%`CgxDW7B-Ny8S zd9O>nsQjvNK5*s@qrY*+S=d1?(JtHmJomzj=dwsRw6HMX@t0>R6T+&_P2HPk=y98C zhWc~NBwnN`T66)kFEc%s*b9aXIf5cODq=6#x-Du=h*=LuN+)tn-#)juvEEq2S~s7* zdHwpe$K7te_0*l$`PLw0*kZnR(BQChEKf3-)m%A!Sid`B^R%0& zdvY?qx|#)(M)k9lR9Nqtjjf+ySvx!tzunKBXmwK5;J@XpY+8zXYOx`>T(g}cr6=?c zp;?Rjt2;Yl^78WO!#+Mf0~tK2`I%lRvN242{DB7h?L7}dW}|n}(a~v~j&R>}ydUF530?i39`EfpdQfr__X&J;7m#=C zGdFAU{|P^Sx64t*)2LPYX*D^qiVM9^P*A|;aCQ{KquIjf7#OERT*u`$s{$dRp|=~cvIPYNJV?3O+0gM4h8Ij)5BT`pulX$N z2CkHV0ah4Ah6AS!`%o7bj7FZVM5R`deT2#vib=aRk|kKvs!?P1rQ}&O4Eqm(^THoN zBp!n}_jnl@nVO?$Of0;qEm~^oB9as*C#Sf?M7$bquBMK#-hkoDlJ5Hj-^4m3-Q7sA zZ31Hc-m7gL@TN*i==}+_`kQ_6LZYJfcNe=Uo}HbY8=ISxoZ9(Kl`#rmzrHVPxxyXh zK7R)UuOwtWLBneG>He6UfguWs?*TbaLG9diFopFaDJcp%x)Sv=5EPH|L3R;ZS-iZ> zI&el@^-1dPxb1Bx*1OxE?Zu^~Nhv9VBYE$Fu9w^+VTe4UVq*5o-fgU`{9fw}z1_)) z3HXeD zr9aU(++ItGeg5C!iuxjzKCI?+-;eY4V0>fu`Xs(ln1;#L%FrB%m2>a-Gq4P;6j8## zjmJOl%U?tEiv7Q@pEzw_XutmoIe#Ef(1=Vs)z}6FMwnli6_HZrZ^A#1xG0#Mzm&$FU zg@0fb0^tzhyWPz{fB$$jpB=(VP_qo49UJ6Bea@fGnPj8;tDfGv#GO?2F#o|zaavaY z)*2S9uI%!85}MO)qsPs%E0Rd(+;y?hQRJ}%i(Xsvc-zeBVCGK*0T*X8?^|Na4;U$M zzz9;O>a($nJJ5QTEC%34`w&}k^YCJSEAaDZU5ftOFo2q?@D|=?wUEmf_N3BysqOBh zr#o=3g{h8(_;9i_SkxLRw^<>yM8QezN}VjXY;nFwM2MYm;Olv`6w_J1e9uRR%kpg> zU9AR=YBbNLhLgWDM>Mm@(=^W!wQq6k2|cSgdObhw(_Q4 z6798ZlZ+%xWpr)lDhHI7MwAAp`!+6wa4{)2l&Us9aSJy_-1H2I@C*{zM3>dnb@ccz zy2d2>cZWU*z|$b;TS#A8m&KfSJ+?$cWm-wpH@=*;cz%&iP+yY>1GRk2IV{@N9UJvU zAX!~fH#tC&(!aTNkA-nJ04IXv&W(-Bi=3;Y#!_DGOKMzX#pD01&jBBtHv_l1v{yK3 zE>F{^@xgw=Z$wWr{6$6Xn*631ct|*y4fvzoFS+mOEsu{8ZS6=b#smk?ENFR$bW$w?g<%!GjnWxu!CUqTp zkvw_vdG)gm(K-p%ENxa!R&mM+dXX)ih=*5)TkpP!6m6R*@cSaPN82a5nE3Ir!Qt>c zqd&)Z`w?7Kyx z)aiq){yq0F;ms7x#B|aH5?0}V0)8Sbpf}&^>y$p2x$j`L@v2uX-Zm zuYK?dH7UG?O^v8*8}5Q(pBFYW6ioLD4(r;}4BZYnyt=Kl}zz z*O)`admAb@RIi7w9C1-4f6q&I7Q_BQPc(ON)_TX8zAN%_g9-L1g3S-6!RC3S^rm6n z4n&Bu?3w1Z^f2+Oam57_OuJ+{A{VFcfAVvQpx0_SKf+Yjs_>vR3aub0eKp} zQhL?^K?Z70+qb5Mckt{M*`j8fH+gr_BDklwr*R5qENxda`Z{`%Iw?fSyj#P@o-MH3 z{Vl-{Ykeu6u`u_xib(8G%EvOK#6^BFaI||=1Z;4WLsxyAUIU9H@#3V-w$}6q76#1? zTkjf#;~kgh#(Ol}QgGV>V-fgTSPG_`lW#YRXJfnOT1?}VOj0IEYQFSE^}l-_#zqSY z&%R2>auy}+usZoVgFtA(=j79gw>COu@AI|vzcKF>y@^pvNcqx?f0VXxu=T5C-_LJ8 zX)lF^pc&j@k5vc}*HkeMn3PQHl$u$XsZDz56f&}WyrOF8gx$T6UwnIMzj586b`UvO z=I8-Tgw@04;rPodHl~9wb`q0wMz_w*3sEYG_pweBrQb z(7)rQ4NgS$$~dO;ZDHX$yW=BEt+)Am&Y|c{%QS6wp|`t}kfbJ9$0e}G+!J0@Df8K_ zR4VM3r);xC`0X*)PP?aIW0Xf$oS_Dq`C;3Yyr-f_+0*5!F1j5o z;Skk_@0!?-Iatm}XRB9uEiR9N<7uCCW(=N5H^0!_be4aR7Ep$zor1Ga3m+?@qR~(b4$0yMg(OHv2zOcg3TIe^eJ2D#39O2z-8v38=TYe3PInnZ2I- zrFc14M29pVuVg|aB9?xD-s~nz5syo7K9wP?mDlpKuApqv(V`^Etj4X94hM5bW{{TT zPLsFjgQDtKw`-9?yh&47$x7|N zzpAhi^;QP`?{h>JnA5e9iVR>QSSX

_;AxB#no1u&Xt#X0)kL$&SLqjd@s;2t^r7 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 diff --git a/doc/img/XTRXOutput_plugin.xcf b/doc/img/XTRXOutput_plugin.xcf index 15700a0deb62a9b6a8d7cb88130cf3b037d6d876..a920ce46b13bad992138c3585bbeeebd105964bc 100644 GIT binary patch delta 10374 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 S;t-DFI8Nd0>hH!IuKx#0D@h>$ delta 6905 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

utjUoRT!9 zUKyD?s20WB9sUSMG~$qm6wJXAti?7Qz$ujB4ytLaJNyxjXv85ADVT#LjIECf6aAH_ zI$^%cZ9Q`glP|Nznrg%3yQgq(bLF9`HORA-JBF!2ktl(5J+K{Wr*3V%((n^e8s>`9 z=o_5I72Lx!QT#p81Z_lVQjAiRqe_$j6~5rQ0a1uW0$~bBB9o3RWFsF1C`KvDQ6)-K z6}|{Y6k?HpB%~t?*~mu$icyMkRM8O?zJ#f9;noo4bGJ3=k;)0JnQv|P*^3lU@+MK5 zMTwfU0bhX0Y$W6NcIuU8`$cIxK$M>U5alnfqKvN)C8LojnG-}=87#_{8=@SXEXswi zM7h>hln1n+#!Xc34@GUTQ`De9Q6sjB+VPsGeJ@BWwckNe`=1guVXUa{o)dN43sL|2 z4}6UaxJx6H#aBBhg;zVMhk9${GiqB@YHJnaS{?tE){~iW@z)_gWD(B}~-G1vmn>Y$Mgyt0`5~|AuFH zMZF5{!(>m?gD)DQ37R1o#`W5u9T)?XyPz9-B33kYa$hq2Fc1kCj*)l|NtlQ!n2vOO rfVub(S@;;s@F}wKH>|_ok&ms|j@?FASpRAqt%;nkdaUU@Up@1Gi{=iQ diff --git a/plugins/samplesink/limesdroutput/readme.md b/plugins/samplesink/limesdroutput/readme.md index 1caf4d87c..07b07254a 100644 --- a/plugins/samplesink/limesdroutput/readme.md +++ b/plugins/samplesink/limesdroutput/readme.md @@ -154,7 +154,11 @@ Use this toggle button to switch the sample rate input next (10) between host to - **SR**: host to device sample rate input mode. The baseband sample rate (2B) is the host to device sample rate (10) divided by the software interpolation factor (9). - **BB**: baseband sample rate input mode. The host to device sample rate (2B) is the baseband sample rate (8) multiplied by the software interpolation factor (9). -

10: Host to device stream sample rate

+

10: Sample rate

+ +This is the LMS7002M device to/from host stream sample rate or baseband sample rate in samples per second (S/s). The control (10A) is used to switch between the two input modes. The device to/from host stream sample rate is the same for the Rx and Tx systems. + +The limits are adjusted automatically. In baseband input mode the limits are driven by the interpolation factor (9). You may need to increase this interpolation factor to be able to reach lower values. This is the LMS7002M device to/from host stream sample rate in S/s. It is the same for the Rx and Tx systems. diff --git a/plugins/samplesink/xtrxoutput/readme.md b/plugins/samplesink/xtrxoutput/readme.md index d0800d2a2..c641f7d4a 100644 --- a/plugins/samplesink/xtrxoutput/readme.md +++ b/plugins/samplesink/xtrxoutput/readme.md @@ -65,10 +65,11 @@ This is the center frequency of transmission in kHz. LimeSDR is a 2x2 MIMO device so it has two transmitting channels. This shows the corresponding Tx channel index (0 or 1). -

5: Stream sample rate

-Baseband I/Q sample rate in kS/s. This is the device to host sample rate (11) divided by the software interpolation factor (10). +In host to device sample rate input mode (11A) this is the baseband I/Q sample rate in kS/s. This is the host to device sample rate (11) divided by the software interpolation factor (10). + +In baseband sample rate input mode (11A) this is the host to device sample rate in kS/s. This is the baseband sample rate (11) multiplied by the software interpolation factor (10)

6: NCO toggle

@@ -118,9 +119,18 @@ The first position in the combo is marked as "A". This is because interpolation The I/Q stream from the baseband is upsampled by a power of two by software inside the plugin before being sent to the LimeSDR device. Possible values are increasing powers of two: 1 (no interpolation), 2, 4, 8, 16, 32. -

11: Host to device stream sample rate

+

11A: Host to device sample rate / Baseband sample rate input toggle

-This is the LMS7002M device to/from host stream sample rate in S/s. It is the same for the Rx and Tx systems. +Use this toggle button to switch the sample rate input next (10) between host to device sample rate and baseband sample rate input. The button shows the current mode: + + - **SR**: host to device sample rate input mode. The baseband sample rate (5) is the host to device sample rate (11) divided by the software interpolation factor (10). + - **BB**: baseband sample rate input mode. The host to device sample rate (5) is the baseband sample rate (11) multiplied by the software interpolation factor (10). + +

11: Sample rate

+ +This is the LMS7002M device to/from host stream sample rate or baseband sample rate in samples per second (S/s). The control (11A) is used to switch between the two input modes. The device to/from host stream sample rate is the same for the Rx and Tx systems. + +The limits are adjusted automatically. In baseband input mode the limits are driven by the interpolation factor (10). You may need to increase this interpolation factor to be able to reach lower values. Use the wheels to adjust the sample rate. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputgui.cpp b/plugins/samplesink/xtrxoutput/xtrxoutputgui.cpp index 8962fe39f..edb16de1a 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutputgui.cpp +++ b/plugins/samplesink/xtrxoutput/xtrxoutputgui.cpp @@ -35,6 +35,7 @@ XTRXOutputGUI::XTRXOutputGUI(DeviceUISet *deviceUISet, QWidget* parent) : ui(new Ui::XTRXOutputGUI), m_deviceUISet(deviceUISet), m_settings(), + m_sampleRateMode(true), m_sampleRate(0), m_lastEngineState((DSPDeviceSinkEngine::State)-1), m_doApplySettings(true), @@ -275,7 +276,39 @@ void XTRXOutputGUI::updateSampleRateAndFrequency() { m_deviceUISet->getSpectrum()->setSampleRate(m_sampleRate); m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); - ui->deviceRateLabel->setText(tr("%1k").arg(QString::number(m_sampleRate / 1000.0f, 'g', 5))); + displaySampleRate(); +} + +void XTRXOutputGUI::displaySampleRate() +{ + float minF, maxF, stepF; + m_XTRXOutput->getSRRange(minF, maxF, stepF); + + ui->sampleRate->blockSignals(true); + + if (m_sampleRateMode) + { + ui->sampleRateMode->setStyleSheet("QToolButton { background:rgb(60,60,60); }"); + ui->sampleRateMode->setText("SR"); + ui->sampleRate->setValueRange(8, (uint32_t) minF, (uint32_t) maxF); + ui->sampleRate->setValue(m_settings.m_devSampleRate); + ui->sampleRate->setToolTip("Device to host sample rate (S/s)"); + ui->deviceRateText->setToolTip("Baseband sample rate (S/s)"); + uint32_t basebandSampleRate = m_settings.m_devSampleRate/(1<deviceRateText->setText(tr("%1k").arg(QString::number(basebandSampleRate / 1000.0f, 'g', 5))); + } + else + { + ui->sampleRateMode->setStyleSheet("QToolButton { background:rgb(50,50,50); }"); + ui->sampleRateMode->setText("BB"); + ui->sampleRate->setValueRange(8, (uint32_t) minF/(1<sampleRate->setValue(m_settings.m_devSampleRate/(1<sampleRate->setToolTip("Baseband sample rate (S/s)"); + ui->deviceRateText->setToolTip("Device to host sample rate (S/s)"); + ui->deviceRateText->setText(tr("%1k").arg(QString::number(m_settings.m_devSampleRate / 1000.0f, 'g', 5))); + } + + ui->sampleRate->blockSignals(false); } void XTRXOutputGUI::displaySettings() @@ -284,7 +317,7 @@ void XTRXOutputGUI::displaySettings() ui->extClock->setExternalClockActive(m_settings.m_extClock); setCenterFrequencyDisplay(); - ui->sampleRate->setValue(m_settings.m_devSampleRate); + displaySampleRate(); ui->hwInterp->setCurrentIndex(m_settings.m_log2HardInterp); ui->swInterp->setCurrentIndex(m_settings.m_log2SoftInterp); @@ -454,16 +487,24 @@ void XTRXOutputGUI::on_ncoEnable_toggled(bool checked) void XTRXOutputGUI::on_sampleRate_changed(quint64 value) { - m_settings.m_devSampleRate = value; + if (m_sampleRateMode) { + m_settings.m_devSampleRate = value; + } else { + m_settings.m_devSampleRate = value * (1 << m_settings.m_log2SoftInterp); + } + updateDACRate(); setNCODisplay(); sendSettings();} void XTRXOutputGUI::on_hwInterp_currentIndexChanged(int index) { - if ((index <0) || (index > 5)) + if ((index <0) || (index > 5)) { return; + } + m_settings.m_log2HardInterp = index; + updateDACRate(); setNCODisplay(); sendSettings(); @@ -471,9 +512,19 @@ void XTRXOutputGUI::on_hwInterp_currentIndexChanged(int index) void XTRXOutputGUI::on_swInterp_currentIndexChanged(int index) { - if ((index <0) || (index > 6)) + if ((index <0) || (index > 6)) { return; + } + m_settings.m_log2SoftInterp = index; + displaySampleRate(); + + if (m_sampleRateMode) { + m_settings.m_devSampleRate = ui->sampleRate->getValueNew(); + } else { + m_settings.m_devSampleRate = ui->sampleRate->getValueNew() * (1 << m_settings.m_log2SoftInterp); + } + sendSettings(); } @@ -510,6 +561,12 @@ void XTRXOutputGUI::on_pwrmode_currentIndexChanged(int index) sendSettings(); } +void XTRXOutputGUI::on_sampleRateMode_toggled(bool checked) +{ + m_sampleRateMode = checked; + displaySampleRate(); +} + void XTRXOutputGUI::openDeviceSettingsDialog(const QPoint& p) { BasicDeviceSettingsDialog dialog(this); diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputgui.h b/plugins/samplesink/xtrxoutput/xtrxoutputgui.h index 6340b0455..7d0eb728d 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutputgui.h +++ b/plugins/samplesink/xtrxoutput/xtrxoutputgui.h @@ -56,6 +56,7 @@ private: DeviceUISet* m_deviceUISet; XTRXOutput* m_XTRXOutput; //!< Same object as above but gives easy access to XTRXInput methods and attributes that are used intensively XTRXOutputSettings m_settings; + bool m_sampleRateMode; //!< true: device, false: base band sample rate update mode QTimer m_updateTimer; QTimer m_statusTimer; int m_sampleRate; @@ -68,6 +69,7 @@ private: MessageQueue m_inputMessageQueue; void displaySettings(); + void displaySampleRate(); void setNCODisplay(); void setCenterFrequencyDisplay(); void setCenterFrequencySetting(uint64_t kHzValue); @@ -90,6 +92,7 @@ private slots: void on_antenna_currentIndexChanged(int index); void on_extClock_clicked(); void on_pwrmode_currentIndexChanged(int index); + void on_sampleRateMode_toggled(bool checked); void updateHardware(); void updateStatus(); diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputgui.ui b/plugins/samplesink/xtrxoutput/xtrxoutputgui.ui index 6b2492b4e..cb0959f02 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutputgui.ui +++ b/plugins/samplesink/xtrxoutput/xtrxoutputgui.ui @@ -185,7 +185,7 @@ - + 54 @@ -433,16 +433,28 @@ - - - - 0 - 0 - + + + + 24 + 0 + + + + + 24 + 16777215 + SR + + true + + + true + diff --git a/plugins/samplesink/xtrxoutput/xtrxoutputthread.cpp b/plugins/samplesink/xtrxoutput/xtrxoutputthread.cpp index e10274642..62c52594e 100644 --- a/plugins/samplesink/xtrxoutput/xtrxoutputthread.cpp +++ b/plugins/samplesink/xtrxoutput/xtrxoutputthread.cpp @@ -129,6 +129,7 @@ void XTRXOutputThread::run() params.tx.chs = XTRX_CH_AB; params.tx.wfmt = XTRX_WF_16; params.tx.hfmt = XTRX_IQ_INT16; + params.tx.flags |= XTRX_RSP_SWAP_IQ; if (m_nbChannels == 1) { diff --git a/plugins/samplesource/limesdrinput/readme.md b/plugins/samplesource/limesdrinput/readme.md index 9803f57b3..f2e49b86c 100644 --- a/plugins/samplesource/limesdrinput/readme.md +++ b/plugins/samplesource/limesdrinput/readme.md @@ -117,9 +117,11 @@ Use this toggle button to switch the sample rate input next (8) between device t - **SR**: device to host sample rate input mode. The baseband sample rate (1.5) is the device to host sample rate (6) divided by the software decimation factor (4). - **BB**: baseband sample rate input mode. The device to host sample rate (1.5) is the baseband sample rate (8) multiplied by the software decimation factor (4). -

6: Device to host stream sample rate

+

6: Sample rate

-This is the LMS7002M device to/from host stream sample rate in S/s. It is the same for the Rx and Tx systems. +This is the LMS7002M device to/from host stream sample rate or baseband sample rate in samples per second (S/s). The control (5) is used to switch between the two input modes. The device to/from host stream sample rate is the same for the Rx and Tx systems. + +The limits are adjusted automatically. In baseband input mode the limits are driven by the decimation factor (4). You may need to increase this decimation factor to be able to reach lower values. Use the wheels to adjust the sample rate. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows.