From a8bba2e95a7e3ea0d698164cbfb34dd4df67c4c3 Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 18 Feb 2021 06:23:12 +0100 Subject: [PATCH] Spectrum frequency zoom: Restrict autoscale to visible spectrum area. Added missing images for documentation. Issue #773 --- doc/img/Spectrum_Status.png | Bin 0 -> 2525 bytes doc/img/Spectrum_Status.xcf | Bin 0 -> 4849 bytes sdrbase/dsp/spectrumvis.cpp | 9 +++++++++ sdrbase/dsp/spectrumvis.h | 3 ++- sdrgui/gui/glspectrumgui.cpp | 2 +- 5 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 doc/img/Spectrum_Status.png create mode 100644 doc/img/Spectrum_Status.xcf diff --git a/doc/img/Spectrum_Status.png b/doc/img/Spectrum_Status.png new file mode 100644 index 0000000000000000000000000000000000000000..0dac7cf1d48034401d25efafd8ee178e06a74727 GIT binary patch literal 2525 zcmV<32_p81P)EX>4Tx04R}tkv&MmKpe$i)0T=<1nnT=kfC+5AS&XhRVYG*P%E_RU~=gfG-*g$ zTpR`0f`cE6RRkc+5KnK` z49@$+5mu5_;&b9LlP*a7$aTf#H_k?RNS*z4p`=0!T;k>@G%ypV0NMaF7kRU=q9c5HdL!4Hf6botEPk8u;9lt~_g!Gs?fEH00009a7bBm001r{001r{0eGc9b^rhX2XskI zMF-^q5(Fm-H+#fsL?raiD>;0K$ z_D9Zp-t+GBy!-Ci_XGel%rL_YGt4l<3=~YJKabZtHT6U&lx1ZdF?5KHW%2ov$w_T{ zd%us5-zvjKMC@*B>zSUOQ!1a|y4AOPcN}6*P0iHnm$lko(Mu}TU>AmkMW|E@=%v;E zdiwOYtD$66NNsJCMze@U+rR%1${{XpFE(aQ&QZO7IW#m3cP|>vrJ{l>7AvJvjYy;@ zDXE}PY>^;3-ET

FK%dZo!Tn9~$NXhT-DkGdkUGUS2-0m~(G$-Pcea0RVuPmyc5UJTNdA z>p-V(kjwQ&&Boav|l%=G6L?94+ zeVH92{9JHag_-dfDtWtV2P;2}Cf0 z!NJMk;P+W9c3gLWIZi>r2^fZFXJ5YgrW;~RNJwsN zy@Ra)J3DG$pD-;g3tb4|S_-1+r{N|2E(hTrxWYo;XxORMd)yBOycRusIKNr zO-*EH=h@q@EiC*ZJw17T{srpe zmi6hU$8erTDVY*NrP{OEX?(t9aB#A?xCD8X0RT%&OW%E0yLaz?WVmO~zWRDDfj}@M z*4SA8%{Lb_GIBO<^oAfvtJSDfGe#v4iNwXlMVyug5AOY6a_-?lmq5<>mk7ax3rM>%%Uww_p4G`LnsXpH1D%$Hz~vUq-K6xB378BGJ&mz+J4{ zC!gfk)m@pHnZ_+QMaig;*47`Inyv)|Y}~#*n920V?u}e-C5yF>NF>6rRb*t;)vH{i zZ1eK6jvdR{yg9J3v2Aivd+r>^#pQLJ4~ayIiP_`s{tl1VVpPkk=X^EB7cc%u1q4AA z6SX6Wz8{BvWczgTucs-XceOp@kHEwEd?q}={Z(~D29<5rfYHn`);Ddi(xKN5) z^5lue)^?4Z9o3X_f#5!sNut!CmzR%R zu9wU8qoXqi4tx|H9j;U=R@vhG)ts9$!mt%;q)`4yMN(4Awr$}Gg$x(mNCo)%GHYv_ zva(VxU#>8ml}JSB#zG(vJUto1!$SZ7I-Rj|XB3B1UR+#a_<;3#9n$xq*t&Ilc6Q$C zPbeWFTeVuv$cS+DlnjNyFdP)L1>M_8B+|>5FR`Jx+{&03R$N?Sb@gSVG@PAj(a{O$ zaAZXI`RB*!bO!RO4Gjs_t)s46M|E>^2n!2Z`7`&5ITwpXNb84S!v-&rXlQCm3IIU6 z8N~Q|2YNdsgqfRL@b0^tSE2&LRsz99NXS;4Jv@9TLgMYWJrs(k{{H`hASfdv=fQ(9 zB9UleVbR%nKQ3;srKRP-z(`b7JZ^bn;sKRvAu}`A)%6Vu#WpsUC6nop1EHx-kWOb{ zx#s5|=W-jd4t{={wrmMCMaifT7`B?6)TXC@3_%c$=5qV?z2nD=5Dt}fCc)iopb8@-<#~(WoZL2>El$Kul>Z?*y4u+IW31Kq*Z{EBslj(+s<)3}_H4MYp z3IG6bIQ7NFXMS&21%_t zrCNxNPB2AvWq|+y2IHS?Z9OuXuD@Rt85xBb?d+&kRSo0g>fvE|LBR=R!^55iIh=Y9 nr{4U(mlf*wK?|Pl!Fuc| z$Fi*+#I-J!rQ%yaJyj{zRqLbb;T#cW*}`vX0}L#OJ8K!WZYsIsUNZgnL{2R z*bLVn`5Cg023?0Hq$Ve;QqoZ;*624mO{Gj%CCWe2rYFg#zB4n9we;qp+GM3h6{<2e$bV$^#C5ph86dO!Y=Jxk8wLHz#UAWpd%DPv&Be?BMT$a;9>0Au4;~vNA zNPTt+WvQd&uTCr~+)s}C?mHZ%PobkE$`VP*5?TJBGTDtR^D632hI!L3GrxP>`2B1m zwMpD+uN9Mhn%HP-{lcBPeI6{P(8g#nbt~#4MaoKvCw0a@T-x7zPW@6+pZ2C6>BVvG zWb3<#BU`yrOt!V#IO@6?v*@Cf;wwBj>hZX@OiY#u(SW;=ZNqK}*)sA#3~U?*_&-;2 zWG>dw-qn4oBgND+&g3N}8xIX0gSvlRfEV=yoYjH0KZ&F6qE$5D*8Y!Co!;P1cD2N0 z{~nC&&j1^Fa~b}kU=?7cYNG5`e+l(OnSA*kJuy~85UvroCQ9k&jIZD&)#FKVJEs6B z*@F~}@~u>i(vxgcuL38#{$~l9rYq?6hA3{uRk7sEeD}+9B-FXss2k`#&oJ9DBgJS; zJ);P785N6B%`l0LtsCjImgv39hT}n$iRThk8z7-yrk6jiKN^c=b}R&FTRsPE!|p7& z>#GOz|NLO0F0>ia5iyHuS}%=4#LPb5`Rw9+BAs1qwYMN*W{S-=>)#PEz1k8e>{$#V zCfF1u(im98EP1LL;1h3Bk*IDk&|l@kGRUHml)_ zu`z(dopTPstJduRanLgb;QK#9#FQn|k&pczMIl1ow0pz9d1&Z3)B{=r5efsZ=|MZ1 zf>0>QApeG=8&I9qfr!yTix8Z)OvN#7h_vuV_SjS~#O+Idp7379!1r-a7)eSJ&R!>`m%+qw(>% z8E#~hWw(bC33?_7937jBDXFWz1@Ce-c%~yco)mCw8-f+P&AjHJ5;C9F8$o0OXT2H2 z6wgwwr1NiMoa(|_>_TJCo@Mj7|2A6s`hzK^j(@3X!)~GoVpJw}wqiWEtb^| zU|f@E&Np`qTLbwKyUl$xNa|p|kVB}Wl%CC~1dGm2ox6w5O_5P&(5{Q5ZmqAcD~oog z4)#}0WrR+0)Fzt%af-XjNSgeE?}CH};Qu~`7h>{cJHS)M5hN0lDF&rZ%LSauVw65L z)owhc)BjVX14MGBeHs)Xu&A-6VY?6MY-V%k z^*E*gn`~i3f<6m^O=lKD0d)1Jz`NZDp6O(s7X_Xvg!n)K7InV?1-Q1>3?dV3YuzNK z;Fb#-x-lJIsyom!glOEgYhc=*Oh-$<05G8dmvxkL2nt1v%Ea4NmJ9`em{a}Xn!3$i zq}!YODbZK@>)=|pJW3nM6o7FpS2V;l{W+sDEw`0GshgqgM0rcxUb~bFZg`{Eqs5ye_O| zjM;4OHuDNVB`;31Mqw)$d7}18JYJ@D-MzJequh0_r`RSz_1!8HMG*!C<^Mz4|H3jJ z^qV6r6h7uBc-PjovL}BaT5ud7^1Y~WcRjdTi#3S{;R~yFDw;5n$U4^3u}olI9$2kK zt5S-9Nh*$bfL%7kNV)3^a{zgHShbd_6N&-RfAa>q=^k54xep$vN`;eZm!QYvt2pZT zI>WsQJB{*N%H64`AI-L5c1ksjigik`_<9l--7tiSD;{e{T4@Lttg5kpczK^B!#)~i+hU#+Tejx-9Q74c)soyGWiP-<+*;V3`b z_59c*=#!h_Ls4XVFzwzY9dJ|4gMM>(gcePLZ#E`UaAM;hDxya7<@L<^N z9h@cS`>^jEl}?qAu1!sm&s6GHuqG$O`5A$|a%1K28G*I__n#5u;5hs2CD;&6>WwT$ zMjD39z9hIN=NAA5bxD4is5nP2wE69F0Q_o%veAX$#Nw9U6`}oxP*yo{S&~>gpSins J-22^C`wyAoS=ayo literal 0 HcmV?d00001 diff --git a/sdrbase/dsp/spectrumvis.cpp b/sdrbase/dsp/spectrumvis.cpp index 983f227d7..fd22bce99 100644 --- a/sdrbase/dsp/spectrumvis.cpp +++ b/sdrbase/dsp/spectrumvis.cpp @@ -683,6 +683,15 @@ void SpectrumVis::feed(const SampleVector::const_iterator& cbegin, const SampleV m_mutex.unlock(); } +void SpectrumVis::getZoomedPSDCopy(std::vector& copy) const +{ + int fftMin = (m_frequencyZoomFactor == 1.0f) ? + 0 : (m_frequencyZoomPos - (0.5f / m_frequencyZoomFactor)) * m_settings.m_fftSize; + int fftMax = (m_frequencyZoomFactor == 1.0f) ? + m_settings.m_fftSize : (m_frequencyZoomPos + (0.5f / m_frequencyZoomFactor)) * m_settings.m_fftSize; + copy.assign(m_psd.begin() + fftMin, m_psd.begin() + fftMax); +} + void SpectrumVis::start() { setRunning(true); diff --git a/sdrbase/dsp/spectrumvis.h b/sdrbase/dsp/spectrumvis.h index efa1ecefc..d205f236a 100644 --- a/sdrbase/dsp/spectrumvis.h +++ b/sdrbase/dsp/spectrumvis.h @@ -147,7 +147,8 @@ public: const GLSpectrumSettings& getSettings() const { return m_settings; } Real getSpecMax() const { return m_specMax / m_powFFTDiv; } void getPowerSpectrumCopy(std::vector& copy) { copy.assign(m_powerSpectrum.begin(), m_powerSpectrum.end()); } - void getPSDCopy(std::vector& copy) { copy.assign(m_psd.begin(), m_psd.begin() + m_settings.m_fftSize); } + void getPSDCopy(std::vector& copy) const { copy.assign(m_psd.begin(), m_psd.begin() + m_settings.m_fftSize); } + void getZoomedPSDCopy(std::vector& copy) const; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); virtual void feed(const Complex *begin, unsigned int length); //!< direct FFT feed diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index fdd5c3d71..888bf5b7c 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -267,7 +267,7 @@ void GLSpectrumGUI::on_autoscale_clicked(bool checked) } std::vector psd; - m_spectrumVis->getPSDCopy(psd); + m_spectrumVis->getZoomedPSDCopy(psd); int avgRange = m_settings.m_fftSize / 32; if (psd.size() < (unsigned int) avgRange) {