From b8600be0861480fbd6b5226deb5dd1545543df95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Wed, 16 Apr 2025 19:55:21 +0200 Subject: [PATCH] fix streaming server output for zero span sweeps --- Documentation/UserManual/ProgrammingGuide.pdf | Bin 478845 -> 480508 bytes Documentation/UserManual/ProgrammingGuide.tex | 16 +++++- .../SpectrumAnalyzer/spectrumanalyzer.cpp | 4 +- .../PC_Application/LibreVNA-GUI/VNA/vna.cpp | 52 +++++++++--------- .../PC_Application/LibreVNA-GUI/appwindow.cpp | 8 +-- .../PC_Application/LibreVNA-GUI/appwindow.h | 4 +- .../LibreVNA-GUI/streamingserver.cpp | 18 ++++-- .../LibreVNA-GUI/streamingserver.h | 4 +- 8 files changed, 64 insertions(+), 42 deletions(-) diff --git a/Documentation/UserManual/ProgrammingGuide.pdf b/Documentation/UserManual/ProgrammingGuide.pdf index 9d2243e88494a76bf6d3b6c34d4bfaf64b92c446..9ed06468f45800eaf553977a65694b86734f9054 100644 GIT binary patch delta 16217 zcmai4d0foh_kX5lJ}uIov{BkbWj^y+W=FtOkA2@OvPYH>zjHrR)Xeww`t{Ge=ic`{_ndR@IrrQ_8NIm%oEo1 z?86T(-#f=m+qFD=ZTv*d{941ZKm2D-xvQn?ek#`cFU{`vBOcnH7gmU3vM#zla<&?q zSk+OUz2uSiuB(g2(?`dj>^%PD$j2WizJ22D?fpkoxmRWG=P7@j^O^U-mN1(;(kr5U zqTRoB9YdoZZdyAcv|_*A{qt-!S^6pGj@(q}pW_$$vo5NKMZ=lx4Vm-oPA&NH;M?_} zxfNYbQ(Xu6{Nc5&u54mN{?}O^KVCeW_v7}%$TK5*_15?F>+@nplJ*(DVef2LM>+WX zSP)=&rmE6yvLwK1Z*8>G64$+tCYRV&bqP*CZt>rLmfky^_tuBX3UVvQuibIC_nDq{ z>BD^Q$e&!8;dh|JzL!?s?)HVnZ=d{_@G|nyt$wTOt*R}%9SaM|J5Jj5{jl%&WTuLI z>MA`QZGXnf=t0FuNz}xQeL2+2q?`-ymaqJAoGy+Vgy427?>^^SS^!w@dOV9MtTqXCRM=Z@g=lfTXSQy&t?U6?T zsfU*&oH;+rd0^G|RXYl%(+!nrU7VPLHSOk^y(sVeCT-?FWfxA33^33 z(XF7x$bbsklhiqsm&yz{nO`D%`iBDaz_AQ^? zwZ5tPqmsL1ckZ-*VbN;QfVU0;=$BpUj| zQ|H7_z5eFOhbpgp@!e%KB>eiUerH4uhd(|Td-%$h{uy0r-g&->N*6!bciVr0_U=vp zO*jyI^T-wtr|Xt?%8u=Qy1xq>^v4YOzne#fyNqIInVLlD9ea_|Gqby%rD-4Uoq20# z2TXnQ+~!{4Vc&RX*8^?`PfiZcyfR@;-=e+T$Vq>dPG=&t$3^!R9$CHY#udf$^8uUB32Purf@k$Ld%_GTNZoT^TLUA6vp^_!x) z5urWgv7^2fygW_^#mua_cAzThwvRjeA~C%-Y$dZR;>_OA>dBX%q;9F~{oz%7Wy+Pe z6&K%6eD^*mIc=6`cw@c3$?2-J)YGqA+F4J#SD8O4zphST;`Yyitht@_X3v~eS?rnC zQ0W=iJv`*_@X+Bp7i|J0Gk<<6t2bVLsUdtW@#)^+*WFyR6W>)1Tij;ZY5)EyZ|$

G%1oqq*Ul4 zKW#NO!d_8#|9GG0S9N7|UmBw#bke(~r_lde%$e%mIrh_?QFfKf9nKylK0oYky=r^l zj!{=;zx_{ZMd{wE^bK$G)<*1-Hv|rNqxds1y7%LZ<1>HA<#RrMniFYqGVqbtfSqrh z1`XO!=h`{`Q1#_lHSWIE zVQkd;ws*wUA%D3V%Bw>6cwYNDZO_1;SAEW3stxV6rsS*r%SYPX@nHz8;xv}%czVeg1Pk-%o zblt9kvQY~2iofEC*=ufG@49-$y?3YYN1Z&;eWmZ+8`Ad6zmB?Ay}fAYscrj0`a~sZ zzEpVn-YGgZdV1`^d!g2m>CF)9=VOaG0N)Rg@D%XzW>eoexf$vIPwj!qhMb;b~_@`b(55+@f(3+7x*Y?yb56b(uu zKHS@Qb)7UY8>yA-{$JyeNu#orfGabgR*|fmga9Lt<=c+q z8MS=y3;Bn9jge=KuFw5pb6sFP)F%F1zG$S4=jIphG_UV@G3@%Dbx{$=2OgZgY_atc zt*x$HjbNt6y(#A=fA|qzl(2t{Uv%!(k2NbQZdbh(Tz)XLpMWl3SXh)4=ss*BAqd`I z;gtDa>-mC+xI1P;4h8)DdG!9bPebnejw`o$^Im-1AflF(f9`kxWy8PT({{W_7?J(@ z!`5-vUmo!o(k3%fu)?{D$Xd5%Rl>^Gb5>?$_gu2;fd8%+1y0Ma?buRW6L@6BEG>J3 z>W8=d26gXH^YYv5px}z(*-s|fkFcz_Tqo7}wzBISgY`#yj-L3YXLjh=IY}N*9ls

)V&IKe4o(k0zM6D0sNN)fy@yl&`U{?>ez)k; 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 delta 14931 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, AppWindow::SADataType::Raw); + window->addStreamingData(m_avg, AppWindow::SADataType::Raw, settings.freqStart == settings.freqStop); if(normalize.measuring) { if(average.currentSweep() == averages) { @@ -569,7 +569,7 @@ void SpectrumAnalyzer::NewDatapoint(DeviceDriver::SAMeasurement m) m.second /= normalize.portCorrection[m.first][m_avg.pointNum]; m.second *= corr; } - window->addStreamingData(m_avg, AppWindow::SADataType::Normalized); + window->addStreamingData(m_avg, AppWindow::SADataType::Normalized, settings.freqStart == settings.freqStop); } diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp index fa25d6c..1ed594e 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp @@ -981,7 +981,30 @@ void VNA::NewDatapoint(DeviceDriver::VNAMeasurement m) m_avg = average.process(m_avg); - window->addStreamingData(m_avg, AppWindow::VNADataType::Raw); + TraceMath::DataType type = TraceMath::DataType::Frequency; + if(settings.zerospan) { + type = TraceMath::DataType::TimeZeroSpan; + + // keep track of first point time + if(m_avg.pointNum == 0) { + settings.firstPointTime = m_avg.us; + m_avg.us = 0; + } else { + m_avg.us -= settings.firstPointTime; + } + } else { + switch(settings.sweepType) { + case SweepType::Last: + case SweepType::Frequency: + type = TraceMath::DataType::Frequency; + break; + case SweepType::Power: + type = TraceMath::DataType::Power; + break; + } + } + + window->addStreamingData(m_avg, AppWindow::VNADataType::Raw, settings.zerospan); if(average.settled()) { setOperationPending(false); @@ -1006,36 +1029,13 @@ void VNA::NewDatapoint(DeviceDriver::VNAMeasurement m) cal.correctMeasurement(m_avg); if(cal.getCaltype().type != Calibration::Type::None) { - window->addStreamingData(m_avg, AppWindow::VNADataType::Calibrated); - } - - TraceMath::DataType type = TraceMath::DataType::Frequency; - if(settings.zerospan) { - type = TraceMath::DataType::TimeZeroSpan; - - // keep track of first point time - if(m_avg.pointNum == 0) { - settings.firstPointTime = m_avg.us; - m_avg.us = 0; - } else { - m_avg.us -= settings.firstPointTime; - } - } else { - switch(settings.sweepType) { - case SweepType::Last: - case SweepType::Frequency: - type = TraceMath::DataType::Frequency; - break; - case SweepType::Power: - type = TraceMath::DataType::Power; - break; - } + window->addStreamingData(m_avg, AppWindow::VNADataType::Calibrated, settings.zerospan); } traceModel.addVNAData(m_avg, type, false); if(deembedding_active) { deembedding.Deembed(m_avg); - window->addStreamingData(m_avg, AppWindow::VNADataType::Deembedded); + window->addStreamingData(m_avg, AppWindow::VNADataType::Deembedded, settings.zerospan); traceModel.addVNAData(m_avg, type, true); } diff --git a/Software/PC_Application/LibreVNA-GUI/appwindow.cpp b/Software/PC_Application/LibreVNA-GUI/appwindow.cpp index efb8bae..1e4399d 100644 --- a/Software/PC_Application/LibreVNA-GUI/appwindow.cpp +++ b/Software/PC_Application/LibreVNA-GUI/appwindow.cpp @@ -866,7 +866,7 @@ SCPI* AppWindow::getSCPI() return &scpi; } -void AppWindow::addStreamingData(const DeviceDriver::VNAMeasurement &m, VNADataType type) +void AppWindow::addStreamingData(const DeviceDriver::VNAMeasurement &m, VNADataType type, bool is_zerospan) { StreamingServer *server = nullptr; switch(type) { @@ -876,11 +876,11 @@ void AppWindow::addStreamingData(const DeviceDriver::VNAMeasurement &m, VNADataT } if(server) { - server->addData(m); + server->addData(m, is_zerospan); } } -void AppWindow::addStreamingData(const DeviceDriver::SAMeasurement &m, SADataType type) +void AppWindow::addStreamingData(const DeviceDriver::SAMeasurement &m, SADataType type, bool is_zerospan) { StreamingServer *server = nullptr; switch(type) { @@ -889,7 +889,7 @@ void AppWindow::addStreamingData(const DeviceDriver::SAMeasurement &m, SADataTyp } if(server) { - server->addData(m); + server->addData(m, is_zerospan); } } diff --git a/Software/PC_Application/LibreVNA-GUI/appwindow.h b/Software/PC_Application/LibreVNA-GUI/appwindow.h index 71e5a18..4a0469b 100644 --- a/Software/PC_Application/LibreVNA-GUI/appwindow.h +++ b/Software/PC_Application/LibreVNA-GUI/appwindow.h @@ -59,14 +59,14 @@ public: Deembedded = 2, }; - void addStreamingData(const DeviceDriver::VNAMeasurement &m, VNADataType type); + void addStreamingData(const DeviceDriver::VNAMeasurement &m, VNADataType type, bool is_zerospan); enum class SADataType { Raw = 0, Normalized = 1, }; - void addStreamingData(const DeviceDriver::SAMeasurement &m, SADataType type); + void addStreamingData(const DeviceDriver::SAMeasurement &m, SADataType type, bool is_zerospan); public slots: void setModeStatus(QString msg); diff --git a/Software/PC_Application/LibreVNA-GUI/streamingserver.cpp b/Software/PC_Application/LibreVNA-GUI/streamingserver.cpp index 1e29caf..72c3ce6 100644 --- a/Software/PC_Application/LibreVNA-GUI/streamingserver.cpp +++ b/Software/PC_Application/LibreVNA-GUI/streamingserver.cpp @@ -20,12 +20,16 @@ StreamingServer::StreamingServer(int port) }); } -void StreamingServer::addData(const DeviceDriver::VNAMeasurement &m) +void StreamingServer::addData(const DeviceDriver::VNAMeasurement &m, bool is_zerospan) { nlohmann::json j; j["pointNum"] = m.pointNum; - j["frequency"] = m.frequency; - j["dBm"] = m.dBm; + if(is_zerospan) { + j["time"] = m.us * 0.000001; + } else { + j["frequency"] = m.frequency; + j["dBm"] = m.dBm; + } j["Z0"] = m.Z0; nlohmann::json jp; for(auto const &p : m.measurements) { @@ -41,11 +45,15 @@ void StreamingServer::addData(const DeviceDriver::VNAMeasurement &m) } } -void StreamingServer::addData(const DeviceDriver::SAMeasurement &m) +void StreamingServer::addData(const DeviceDriver::SAMeasurement &m, bool is_zerospan) { nlohmann::json j; j["pointNum"] = m.pointNum; - j["frequency"] = m.frequency; + if(is_zerospan) { + j["time"] = m.us * 0.000001; + } else { + j["frequency"] = m.frequency; + } nlohmann::json jp; for(auto const &p : m.measurements) { jp[p.first.toStdString()] = p.second; diff --git a/Software/PC_Application/LibreVNA-GUI/streamingserver.h b/Software/PC_Application/LibreVNA-GUI/streamingserver.h index 7bcfcc3..a0596f4 100644 --- a/Software/PC_Application/LibreVNA-GUI/streamingserver.h +++ b/Software/PC_Application/LibreVNA-GUI/streamingserver.h @@ -13,8 +13,8 @@ class StreamingServer : public QObject public: StreamingServer(int port); - void addData(const DeviceDriver::VNAMeasurement &m); - void addData(const DeviceDriver::SAMeasurement &m); + void addData(const DeviceDriver::VNAMeasurement &m, bool is_zerospan); + void addData(const DeviceDriver::SAMeasurement &m, bool is_zerospan); int getPort() {return port;}