From 19da4eae7651d9f0b45a04df978e961089260e56 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 15 Nov 2019 22:58:18 +0100 Subject: [PATCH] Scope: added DOA projections and updated ChannelAnalzyer --- doc/img/ChAnalyzerNG_plugin_polar_grid.png | Bin 0 -> 6170 bytes doc/img/ChAnalyzerNG_plugin_polar_grid.xcf | Bin 0 -> 41805 bytes doc/img/ChAnalyzerNG_plugin_scope1.png | Bin 13383 -> 12477 bytes doc/img/ChAnalyzerNG_plugin_scope1.xcf | Bin 78902 -> 64845 bytes .../channelrx/chanalyzer/chanalyzerplugin.cpp | 2 +- plugins/channelrx/chanalyzer/readme.md | 134 ++++++++++-------- sdrbase/dsp/projector.cpp | 12 ++ sdrbase/dsp/projector.h | 2 + sdrgui/gui/glscope.cpp | 8 +- sdrgui/gui/glscopegui.cpp | 2 + 10 files changed, 96 insertions(+), 64 deletions(-) create mode 100644 doc/img/ChAnalyzerNG_plugin_polar_grid.png create mode 100644 doc/img/ChAnalyzerNG_plugin_polar_grid.xcf diff --git a/doc/img/ChAnalyzerNG_plugin_polar_grid.png b/doc/img/ChAnalyzerNG_plugin_polar_grid.png new file mode 100644 index 0000000000000000000000000000000000000000..4c84a73ee1a6503716e37051006d7cc102ee224c GIT binary patch literal 6170 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 literal 0 HcmV?d00001 diff --git a/doc/img/ChAnalyzerNG_plugin_polar_grid.xcf b/doc/img/ChAnalyzerNG_plugin_polar_grid.xcf new file mode 100644 index 0000000000000000000000000000000000000000..7beb13aac7b177a8db6218a053d4db7a08ff5ae2 GIT binary patch literal 41805 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 literal 0 HcmV?d00001 diff --git a/doc/img/ChAnalyzerNG_plugin_scope1.png b/doc/img/ChAnalyzerNG_plugin_scope1.png index fb5c7b80753fc9084ae70381797aa80dd53326fd..553454d18bfce1f402b4f5242584b544811c4ce4 100644 GIT binary patch literal 12477 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 diff --git a/doc/img/ChAnalyzerNG_plugin_scope1.xcf b/doc/img/ChAnalyzerNG_plugin_scope1.xcf index 93c815c43a59342c2d626ebf1e1b0d91237a8efa..7ae19771cd852b80ee56a08e9746dbb64e8adba9 100644 GIT binary patch literal 64845 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 a0&b(cApz8DDu+hK%EedG2VZ5c;Qs?wh!4#G literal 78902 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. General interface @@ -31,10 +33,10 @@ The interface is essentially divided in the following sections 3. Scope global controls 4. Scope trace control 5. Scope trigger control - + Note 1: the scope trace is updated continuously for sweep times of 1 second or more else the display is refreshed only when the trace finishes. -Note 2: the spectrum view (Channel spectrum) is not presented here. +Note 2: the spectrum view (Channel spectrum) is not presented here.

C. Channel controls

@@ -46,20 +48,20 @@ Use the wheels to adjust the frequency shift in Hz from the center frequency of

2: Locked loop

-Locks a PLL or FLL (depends on control 3) on the signal and mixes its NCO with the input signal. This is mostly useful for carrier recovery on PSK modulations (PLL is used). This effectively de-rotates the signal and symbol points (constellation) can be seen in XY mode with real part as X and imagiary part as Y. +Locks a PLL or FLL (depends on control 3) on the signal and mixes its NCO with the input signal. This is mostly useful for carrier recovery on PSK modulations (PLL is used). This effectively de-rotates the signal and symbol points (constellation) can be seen in XY mode with real part as X and imagiary part as Y. When the PLL is locked the icon lights up in green. The frequency shift from carrier appears in the tooltip. Locking indicator is pretty sharp with about +/- 100 Hz range. The FLL has no indicator. - +

3: Locked loop mode

Use this combo to control the locked loop type: - 1: PLL with no phase modulation. Locks to CW carrier. - - 2: PLL for BPSK modulation (bi-phase). Locks to a BPSK transmission - - 4: PLL for QPSK modulation (quad-phase). Locks to a QPSK transmission - - 8: PLL for 8-PSK modulation (octo-phase). Locks to a 8-PSK transmission + - 2: PLL for BPSK modulation (bi-phase). Locks to a BPSK transmission + - 4: PLL for QPSK modulation (quad-phase). Locks to a QPSK transmission + - 8: PLL for 8-PSK modulation (octo-phase). Locks to a 8-PSK transmission - 16: PLL for 16-PSK modulation (16-phase). Locks to a 16-PSK transmission - - F: FLL. Actually a frequency follower. This effectively implements an AFC for FM modulations. + - F: FLL. Actually a frequency follower. This effectively implements an AFC for FM modulations.

4: Toggle the rational downsampler

@@ -97,7 +99,7 @@ Use this toggle button to activate or de-activate the root raised cosine (RRC) f

11. Tune RRC filter rolloff factor

-This button tunes the rolloff factor (a.k.a alpha) of the RRC filter in 0.01 steps between 0.1 and 0.7. Default is 0.35. +This button tunes the rolloff factor (a.k.a alpha) of the RRC filter in 0.01 steps between 0.1 and 0.7. Default is 0.35.

12. Select lowpass filter cut-off frequency

@@ -115,7 +117,7 @@ In normal (DSB) mode this is the full bandwidth of the real lowpass filter cente When this toggle is engaged the signal is filtered either above (USB) or below (LSB) the channel center frequency. The sideband is selected according to the sign of the lowpass filter cut-off frequency (8): if positive the USB is selected else the LSB. In LSB mode the spectrum is reversed. -When SSB is off the lowpass filter is actually a bandpass filter around the channel center frequency. +When SSB is off the lowpass filter is actually a bandpass filter around the channel center frequency.

15. Select highpass filter cut-off frequency

@@ -167,27 +169,33 @@ This button selects the display of all traces on the left side of the screen and Use this button to toggle points display (on) or line display (off) for the 2D XY display on the right. The points display may yield a more visible graph when the distinct artifact is an accumulation of points. -

7. Select trace intensity

+

7. Rectangular or polar grid

+ +Use this button to switch between a rectangular and polar grid overlay on the XY display. Polar grid makes sense only if the X axis represents a phase from -1.0 to 1.0 in normalized value (radians divided by π) i.e. zero centered between -π and +π. In practice it means Phase, DOA positive or DOA negative projections only with largest amplitude setting and zero offset. The grid represents the unit circle and axes for angles in degrees: -180, -150, -135, -120, -90, -60, -45, -30, 0, 30, 45, 60, 90, 135, 150, (180) as illustrated below: + +![Channel Analyzer NG plugin scope1 controls](../../../doc/img/ChAnalyzerNG_plugin_polar_grid.png) + +

8. Select trace intensity

This button lets you adjust the traces intensity. The value in percent of the maximum intensity appears as a tooltip -

8. Select grid intensity

+

9. Select grid intensity

This button lets you adjust the grid intensity. The value in percent of the maximum intensity appears as a tooltip -

9. Displayed trace length

+

10. Displayed trace length

-This slider lets you adjust the length of the traces on display. Each step further divides the length of the full trace controlled by (10). The duration of the full length shown on display appears on the left of the slider and the corresponding number of samples appears as a tooltip. +This slider lets you adjust the length of the traces on display. Each step further divides the length of the full trace controlled by (10). The duration of the full length shown on display appears on the left of the slider and the corresponding number of samples appears as a tooltip. -

10. Trace offset

+

11. Trace offset

-This slider lets you move the start of traces on display. Each step moves the trace by an amount of time corresponding to 1/100 of the length of the full trace controlled by (10). The time offset from the start of the traces appears on the left of the slider and the corresponding number of samples appears as a tooltip. +This slider lets you move the start of traces on display. Each step moves the trace by an amount of time corresponding to 1/100 of the length of the full trace controlled by (10). The time offset from the start of the traces appears on the left of the slider and the corresponding number of samples appears as a tooltip. -

11. Trace length

+

12. Trace length

This slider lets you control the full length of the trace. Each step increases the corresponding amount of samples by 4800 samples with a minimum of 4800 samples and a maximum of 20*4800 = 96000 samples. The duration of a full trace appears on the left of the slider and he corresponding number of samples appears as a tooltip. -

12. Trace sample rate

+

13. Trace sample rate

This is the sample rate used by the scope and corresponds to the final sample rate after the whole decimation chain. It should be the same amount as the one displayed on the plugin control (C.6) @@ -215,64 +223,66 @@ The bottom button with the down arrow lets you move the currently selected trace To construct a trace which represents real values the incoming complex signal must be "projected" on the real axis. This combo lets you select the projection scheme: - - Real: take the real part - - Imag: take the imaginary part - - Mag: calculate magnitude in linear representation. This is just the module of the complex sample - - MagSq: calculate power in linear representation. This is the squared module of the complex sample - - MagDB: calculate power in log representation as 10*log10(x) or decibel (dB) representation. This is the squared module of the complex sample expressed in decibels - - Phi: instantaneous phase. This is the argument of the complex sample. - - dPhi: instantaneous derivative of the phase. This is the difference of arguments between successive samples thus represents the instantaneous frequency. - - BPSK: maps -π to π phase into two π wide sectors centered on 0 and π on the -1 to +1 range (sector is 1.0 wide): - - 0 → 0.5, + - **Real**: take the real part + - **Imag**: take the imaginary part + - **Mag**: calculate magnitude in linear representation. This is just the module of the complex sample + - **MagSq**: calculate power in linear representation. This is the squared module of the complex sample + - **MagDB**: calculate power in log representation as 10*log10(x) or decibel (dB) representation. This is the squared module of the complex sample expressed in decibels + - **Phi**: instantaneous phase. This is the argument of the complex sample. + - **DOAP**: direction of arrival on the positive side. Assumes the phase of signal is the phase difference between two sources at half wavelength distance. Axis of reference (towards angle zero) is assumed to be the half line between reference source (1) and probe source (2). Assumes the angle is positive (left side of axis) + - **DOAN**: direction of arrival on the negative side. Assumes the phase of signal is the phase difference between two sources at half wavelength distance. Axis of reference (towards angle zero) is assumed to be the half line between reference source (1) and probe source (2). Assumes the angle is negative (right side of axis) + - **dPhi**: instantaneous derivative of the phase. This is the difference of arguments between successive samples thus represents the instantaneous frequency. + - **BPSK**: maps -π to π phase into two π wide sectors centered on 0 and π on the -1 to +1 range (sector is 1.0 wide): + - 0 → 0.5, - π → -0.5 - - QPSK: maps -π to π phase into four π/2 wide sectors centered on 0, π/2, π, -π/2 on the -1 to +1 range (sector is 0.5 wide): + - **QPSK**: maps -π to π phase into four π/2 wide sectors centered on 0, π/2, π, -π/2 on the -1 to +1 range (sector is 0.5 wide): - 0 → 0.25 - π/2 → 0.75 - π → -0.75 - - -π/2 → -0.25 - - 8PSK: maps -π to π phase into eight π/4 wide sectors centered on 0, π/4, π/2, 3π/4, π, -3π/4, -π/2, -π/4 on the -1 to +1 range (sector is 0.25 wide): - - 0 → 0.125 - - π/4 → 0.375 - - π/2 → 0.625 - - 3π/4 → 0.875 + - -π/2 → -0.25 + - **8PSK**: maps -π to π phase into eight π/4 wide sectors centered on 0, π/4, π/2, 3π/4, π, -3π/4, -π/2, -π/4 on the -1 to +1 range (sector is 0.25 wide): + - 0 → 0.125 + - π/4 → 0.375 + - π/2 → 0.625 + - 3π/4 → 0.875 - π → -0.875 - - -3π/4 → -0.625 - - -π/2 → -0.375 - - -π/4 → -0.125 - - 16PSK: maps -π to π phase into sixteen π/8 wide sectors centered on 0, π/8, π/4, 3π/8, π/2, 5π/8, 3π/4, 7π/8, π, -7π/8, -3π/4, -5π/8, -π/2, -3π/8, -π/4, -π/8 on the -1 to +1 range (sector is 0.125 wide): + - -3π/4 → -0.625 + - -π/2 → -0.375 + - -π/4 → -0.125 + - **16PSK**: maps -π to π phase into sixteen π/8 wide sectors centered on 0, π/8, π/4, 3π/8, π/2, 5π/8, 3π/4, 7π/8, π, -7π/8, -3π/4, -5π/8, -π/2, -3π/8, -π/4, -π/8 on the -1 to +1 range (sector is 0.125 wide): - 0 → 0.0625 - - π/8 → 0.1875 - - π/4 → 0.3125 - - 3π/8 → 0.4375 + - π/8 → 0.1875 + - π/4 → 0.3125 + - 3π/8 → 0.4375 - π/2 → 0.5625 - - 5π/8 → 0.6875 - - 3π/4 → 0.8125 + - 5π/8 → 0.6875 + - 3π/4 → 0.8125 - 7π/8 → 0.9375 - - π → -0.9375 + - π → -0.9375 - -7π/8 → -0.8125 - - -3π/4 → -0.6875 - - -5π/8 → -0.5625 + - -3π/4 → -0.6875 + - -5π/8 → -0.5625 - -π/2 → -0.4375 - - -3π/8 → -0.3125 - - -π/4 → -0.1875 - - -π/8 → -0.0625 - + - -3π/8 → -0.3125 + - -π/4 → -0.1875 + - -π/8 → -0.0625 + **Note1**: example of QPSK projection on a synchronized Tetra signal: ![Channel Analyzer NG plugin tetra example](../../../doc/img/ChAnalyzerNG_plugin_tetra.png) -The signal is synchronized with the PLL in 4 phase mode (locker icon is green). - - A Tetra signal is QPSK modulated at 18 kSym/s therefore the sample rate is set at 90 kS/s thus we have an integer number of samples per symbol (5 samples per symbol). See green square. +The signal is synchronized with the PLL in 4 phase mode (locker icon is green). + - A Tetra signal is QPSK modulated at 18 kSym/s therefore the sample rate is set at 90 kS/s thus we have an integer number of samples per symbol (5 samples per symbol). See green square. - We have set two traces (X and Y1) with QPSK projection. The Y1 trace is delayed by two symbols (10 samples) which makes a 111.11 μs delay. See blue square - In XY mode on the XY display (right) we can see an accumulation of points around the 16 possible symbol transitions. In two places the same symbol is repeated several times which results in a stronger accumulation. One is with the symbol at 0 (see red circle and square) and the other is with the symbol at π (see yellow circle and square). - On the left panel of the XY mode display we can see that the 4 possible symbols mark 4 vertical stronger areas centered on 0.25, 0.75, -0.25 and -0.75. **Note2**: in the MagDB mode when the trace is selected (1) the display overlay on the top right of the trace shows 3 figures. From left to right: peak power in dB, average power in dB and peak to average difference in dB. - + ![Channel Analyzer NG plugin scope1 controls](../../../doc/img/ChAnalyzerNG_plugin_overlay_dB.png) **Note3**: in the MagSq mode when the trace is selected (1) the display overlay on the top right of the trace shows 2 figures in scientific notation. From left to right: peak power and average power. - + ![Channel Analyzer NG plugin scope2 controls](../../../doc/img/ChAnalyzerNG_plugin_overlay_lin.png)

5. Source select

@@ -290,7 +300,7 @@ This pair of sliders let you offset the trace vertically. The offset value from - central zero value for Real, Imag, Phi and dPhi projections - bottom zero value for MagLin projection - bottom -200 dB value for MagDB projection - + The top slider is a coarse adjustment. Each step moves the trace by an amount that depends on the projection type: - Real, Imag: 0.01 @@ -329,7 +339,7 @@ While in memory mode (see E.13 next) use this button to save the bank of traces

12. Load traces into memory

-While in memory mode (see E.13 next) use this button to load traces previously saved to file using the (E.11) button into the traces memory bank (50 traces). A file dialog will open to let you select the file. It will look for files with `.trcm` extension by default. +While in memory mode (see E.13 next) use this button to load traces previously saved to file using the (E.11) button into the traces memory bank (50 traces). A file dialog will open to let you select the file. It will look for files with `.trcm` extension by default.

13. Memory select

@@ -340,7 +350,7 @@ It is the complex signal that is memorized actually so when a trace in memory is While in memory trace the save (E.11) and load (E.12) traces to file buttons can be used.

F. Trigger control line

- + ![Channel Analyzer NG plugin scope1 controls](../../../doc/img/ChAnalyzerNG_plugin_scope3.png)

1. Select trigger

@@ -398,7 +408,7 @@ A value above 1 helps eliminating false triggers when small spikes appear on the

10. Trigger level adjustment

-This pair of sliders let you adjust the trigger level, The level appears on the left of the sliders. +This pair of sliders let you adjust the trigger level, The level appears on the left of the sliders. The top slider is a coarse adjustment. Each step moves the trigger level by an amount that depends on the projection type: @@ -407,7 +417,7 @@ The top slider is a coarse adjustment. Each step moves the trigger level by an a - MagSq: 0.01 - MagDB: 1 dB - Phi, dPhi: 0.01 - + The bottom slider is a fine adjustment. Each step moves the trigger level by an amount that depends on the projection type: - Real, Imag: 20.0E-6 @@ -415,7 +425,7 @@ The bottom slider is a fine adjustment. Each step moves the trigger level by an - MagSq: 20.0sE-6 - MagDB: 0.01 dB - Phi, dPhi: 20.0E-6 - +

11: Trigger delay

The actual trigger top can be moved forward by a number of samples. This pair of slider lets you adjust this delay. The delay in time units appears at the left of the sliders and the amount of samples as a tooltip @@ -438,4 +448,4 @@ This button toggles a one shot trigger. When the (final) trigger is raised only

15. Freerun

-When active the triggers are disabled and traces are processed continuously. This is the default at plugin start time. +When active the triggers are disabled and traces are processed continuously. This is the default at plugin start time. diff --git a/sdrbase/dsp/projector.cpp b/sdrbase/dsp/projector.cpp index 952096265..f8403b6c3 100644 --- a/sdrbase/dsp/projector.cpp +++ b/sdrbase/dsp/projector.cpp @@ -72,6 +72,18 @@ Real Projector::run(const Sample& s) case ProjectionPhase: v = std::atan2((float) s.m_imag, (float) s.m_real) / M_PI; break; + case ProjectionDOAP: + { + Real p = std::atan2((float) s.m_imag, (float) s.m_real) / M_PI; // calculate phase. Assume phase difference between + v = acos(p) / M_PI; // two sources at half wavelength distance with sources axis as reference (positive side) + } + break; + case ProjectionDOAN: + { + Real p = std::atan2((float) s.m_imag, (float) s.m_real) / M_PI; // calculate phase. Assume phase difference between + v = -(acos(p) / M_PI); // two sources at half wavelength distance with sources axis as reference (negative source) + } + break; case ProjectionDPhase: { Real curArg = std::atan2((float) s.m_imag, (float) s.m_real); diff --git a/sdrbase/dsp/projector.h b/sdrbase/dsp/projector.h index a42d22e0a..647cc60ed 100644 --- a/sdrbase/dsp/projector.h +++ b/sdrbase/dsp/projector.h @@ -30,6 +30,8 @@ public: ProjectionMagSq, //!< Calculate linear squared magnitude or power ProjectionMagDB, //!< Calculate logarithmic (dB) of squared magnitude ProjectionPhase, //!< Calculate phase + ProjectionDOAP, //!< Calculate ambiguous DOA from phase as phase difference (assuming positive) + ProjectionDOAN, //!< Calculate ambiguous DOA from phase as phase difference (assuming negative) ProjectionDPhase, //!< Calculate phase derivative i.e. instantaneous frequency scaled to sample rate ProjectionBPSK, //!< Phase comparator BPSK evaluation ProjectionQPSK, //!< Phase comparator QPSK evaluation diff --git a/sdrgui/gui/glscope.cpp b/sdrgui/gui/glscope.cpp index dc9230d28..7bd27dc28 100644 --- a/sdrgui/gui/glscope.cpp +++ b/sdrgui/gui/glscope.cpp @@ -746,7 +746,11 @@ void GLScope::paintGL() // If X is an angle and XY display is in polar grid we will perform polar conversion of traces bool polarConversion = m_projectionTypes ? - (*m_projectionTypes).size() > 0 ? (*m_projectionTypes)[0] == Projector::ProjectionPhase : false + (*m_projectionTypes).size() > 0 ? + ((*m_projectionTypes)[0] == Projector::ProjectionPhase) + || ((*m_projectionTypes)[0] == Projector::ProjectionDOAP) + || ((*m_projectionTypes)[0] == Projector::ProjectionDOAN) + : false : false; polarConversion &= m_displayPolGrid; @@ -1730,6 +1734,8 @@ void GLScope::setYScale(ScaleEngine &scale, uint32_t highlightedTraceIndex) } break; case Projector::ProjectionPhase: // Phase or frequency + case Projector::ProjectionDOAP: + case Projector::ProjectionDOAN: case Projector::ProjectionDPhase: scale.setRange(Unit::None, -1.0 / traceData.m_amp + amp_ofs, 1.0 / traceData.m_amp + amp_ofs); break; diff --git a/sdrgui/gui/glscopegui.cpp b/sdrgui/gui/glscopegui.cpp index 83ae2066e..3e5d491da 100644 --- a/sdrgui/gui/glscopegui.cpp +++ b/sdrgui/gui/glscopegui.cpp @@ -1314,6 +1314,8 @@ void GLScopeGUI::fillProjectionCombo(QComboBox* comboBox) comboBox->addItem("MagSq", Projector::ProjectionMagSq); comboBox->addItem("MagdB", Projector::ProjectionMagDB); comboBox->addItem("Phi", Projector::ProjectionPhase); + comboBox->addItem("DOAP", Projector::ProjectionDOAP); + comboBox->addItem("DOAN", Projector::ProjectionDOAN); comboBox->addItem("dPhi", Projector::ProjectionDPhase); comboBox->addItem("BPSK", Projector::ProjectionBPSK); comboBox->addItem("QPSK", Projector::ProjectionQPSK);