diff --git a/doc/img/DSDdemod_plugin.png b/doc/img/DSDdemod_plugin.png
index 103922916..ecd583a43 100644
Binary files a/doc/img/DSDdemod_plugin.png and b/doc/img/DSDdemod_plugin.png differ
diff --git a/doc/img/DSDdemod_plugin_dpmr_status.png b/doc/img/DSDdemod_plugin_dpmr_status.png
new file mode 100644
index 000000000..02d8b39b5
Binary files /dev/null and b/doc/img/DSDdemod_plugin_dpmr_status.png differ
diff --git a/doc/img/DSDdemod_plugin_scope2.png b/doc/img/DSDdemod_plugin_scope2.png
new file mode 100644
index 000000000..f71f7a3d4
Binary files /dev/null and b/doc/img/DSDdemod_plugin_scope2.png differ
diff --git a/plugins/channel/demoddsd/readme.md b/plugins/channel/demoddsd/readme.md
index b37bc5071..de0ad1184 100644
--- a/plugins/channel/demoddsd/readme.md
+++ b/plugins/channel/demoddsd/readme.md
@@ -41,13 +41,12 @@ For software built fron source if you choose to have `mbelib` support you will n
Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Use the "+/-" button on the left side to toggle between positive and negative shift.
-
2: Modulation detected
+2: Symbol (Baud) rate
-This is the type of modulation detected by DSDcc. It can be the following:
+Here you can specify which symbol rate or Baud rate is expected. Choices are:
- - `C4FM`: 4-FSK modulation as implemented for example by Yaesu. It is also the default display. Sometimes 4-GFSK signals can be detected as C4FM if the signal is relatively noisy. This should not affect decoding provided noise is not too strong.
- - `GFSK`: Gaussian mean frequency shift keying. it is either 2 or 4-FSK (2-GFSK or 4-GFSK). DMR transmissions will typically be identified as GFSK as it is 4-GFSK. D-Star will also be detected as GFSK as it is 2-GFSK.
- - `QPSK`: At present no decodable transmissions use QPSK.
+ - `2.4k`: 2400 S/s used for dPMR and 4800 b/s NXDN
+ - `4.8k`: 4800 S/s used for 9600 b/s NXDN, DMR, D-Star and YSF.
3: Type of frame detected
@@ -57,91 +56,155 @@ This can be one of the following:
- `-DMRd`: inverted DMR data frame
- `+DMRv`: non-inverted DMR voice frame
- `-DMRv`: inverted DMR voice frame
- - `(+DMR)`: non-inverted isolated DMR voice frame
- - `(-DMR)`: inverted isolated DMR voice frame
- `+D-STAR`: non-inverted D-Star frame
- `-D-STAR`: inverted D-Star frame
- `+D-STAR_HD`: non-inverted D-Star header frame encountered
- `-D-STAR_HD`: inverted D-Star header frame encountered
+ - `+dPMR`: non-inverted dPMR non-packet frame
+ - `-dPMR`: inverted dPMR non-packet frame
+ - `+NXDN`: non-inverted NXDN frame (detection only)
+ - `-NXDN`: inverted NXDN frame (detection only)
+ - `+YSF`: non-inverted Yaesu System Fusion frame (detection only)
+ - `-YSF`: inverted Yaesu System Fusion frame (detection only)
-4: Decoder input level in %
+4: Symbol synchronization zero crossing hits in %
-Most satisfactory decodes for values 50~70%. When no signal is detected it defaults to 91%.
+This is the percentage per symbols for which a valid zero crossing has been detected. This can display 101% because somtimes there are two crossings per symbol period at the start of a sequence. The more the better the symbol synchronization is tracked however the zero crossing shifts much not deviate too much from 0 (see next).
-5: Channel power
+5: Zero crossing shift
+
+This is the current (at display polling time) zero crosing shift. It should be the closest to 0 as possible. However some jitter is acceptable for good symbol synchronization:
+
+ - `2400 S/s`: +/- 5 inclusive
+ - `4800 S/s`: +/- 2 inclusive
+
+6: Matched filter toggle
+
+Normally you would always want to have a matched filter however on some strong D-Star signals more synchronization points could be obtained without. When engaged the background of the button is lit in orange.
+
+7: Transition constellation or symbol synchronization signal toggle
+
+Using this button you can either:
+
+ - show the transitions constellation
+ - show a indicative signal about symbol synchronization
+ - when a zero crossing is detected the signal is set to estimated input discriminator signal maximum value
+ - when the symbol clock is 0 (start of symbol period) the signal is set to the estimated median point of the input discriminator signal
+
+8: Discriminator input signal median level in %
+
+This is the estimated median level (center) of the discriminator input signal in percentage of half the total range. When the signal is correctly aligned in the input range it should be 0
+
+9: Discriminator input signal level range in %
+
+This is the estimated discriminator input signal level range (max - min) in percentage of half the total range. For optimal decoding it should be maintained close to 100.
+
+10: Channel power
Total power in dB relative to a +/- 1.0 amplitude signal received in the pass band.
-6: Channel bandwidth before discriminator
+11: Channel bandwidth before discriminator
This is the bandwidth of the pre-discriminator filter
-7: Gain after discriminator
+12: Gain after discriminator
This is the gain applied to the output of the discriminator before the decoder
-8: Audio volume
+13: Audio volume
This is the audio volume for positive values. A value of zero triggers the auto volume (audio AGC).
-9: Maximum expected FM deviation
+14: Maximum expected FM deviation
This is the deviation in kHz leading to maximum (100%) deviation. You should aim for 30 to 50% (+/-300 to +/-500m) deviation on the scope display.
-10: Squelch level
+15: Squelch level
The level corresponds to the channel power above which the squelch gate opens.
-11: Squelch time gate
+16: Squelch time gate
Number of milliseconds following squelch gate opening after which the signal is actually fed to the decoder. 0 means no delay i.e. immediate feed.
-12: Audio mute and squelch indicator
+17: Audio mute and squelch indicator
Audio mute toggle button. This button lights in green when the squelch opens.
-13: Format specific status display
+18: Format specific status display
When the display is active the background turns from the surrounding gray color to dark green. It shows informatory or status messages that are particular to each format.
-13.1: D-Star status display
+18.1: D-Star status display
![DSD D-Star status](../../../doc/img/DSDdemod_plugin_dstar_status.png)
These is the standard D-Star embedded information that is read from the header frame.
-13.1.1: Repeater 1 callsign
-13.1.2: Repeater 2 callsign
-13.1.3: Destination (your) callsign
-13.1.4: Origin (my) callsign
+18.1.1: Repeater 1 callsign
+18.1.2: Repeater 2 callsign
+18.1.3: Destination (your) callsign
+18.1.4: Origin (my) callsign
-13.2: DMR status display
+18.2: DMR status display
![DSD DMR status](../../../doc/img/DSDdemod_plugin_dmr_status.png)
-13.2.1: Station role
+18.2.1: Station role
- `BS`: base station
- `MS`: mobile station
- `NA`: not applicable or could not be determined
-13.2.2: TDMA slot #0 status
+18.2.2: TDMA slot #0 status
- `slot0`: nothing received in slot #0
- `[slot0]`: data frame received for slot #0
- `[SLOT0]`: voice frame received for slot #0
-13.2.3: TDMA slot #1 status
+18.2.3: TDMA slot #1 status
- `slot1`: nothing received in slot #1
- `[slot1]`: data frame received for slot #1
- `[SLOT1]`: voice frame received for slot #1
-13.2.4: Color Code
+18.2.4: Color Code
This is the color code in use (0 to 15). It may briefly change value to a incorrect one. Take into account the value shown most of the time.
-14: Discriminator output scope display
+18.3: dPMR status display
+
+![DSD dPMR status](../../../doc/img/DSDdemod_plugin_dpmr_status.png)
+
+18.3.1: dPMR frame tyoe
+
+ - `--`: undetermined
+ - `HD`: Header of FS1 type
+ - `PY`: Payload frame of a sitll undetermined type
+ - `VO`: Voice frame
+ - `VD`: Voice and data frame
+ - `D1`: Data without FEC frame
+ - `D2`: Data with FEC frame
+ - `XS`: Extended search: looking for a new payload frame when out of sequence
+ - `EN`: End frame
+
+18.3.2: Colour code
+
+Colour code in hexadecimal (12 bits)
+
+18.3.3: Own ID
+
+Sender's identification code in hexadecimal (24 bits)
+
+18.3.4: Called ID
+
+Called party's identification code in hexadecimal (24 bits)
+
+19: Discriminator output scope display
+
+19.1 Transitions constellation display
+
+This is selected by the transition constellation or symbol synchronization signal toggle (see 7)
The discriminator signal at 48 kS/s is routed to the scope display with the following connections:
@@ -155,22 +218,22 @@ This allows the visualization of symbol transitions which depend on the type of
![DSD scope](../../../doc/img/DSDdemod_plugin_scope.png)
-14.1: Setting the display
+19.1.1: Setting the display
- On the combo box you should choose IQ (lin) for the primary display and IQ (pol) for secondary display
- On the display buttons you should choose the side by side display
On the same line you can choose any trace length. If it is too short the constellation points will not appear clearly and if it is too long the polar figure will be too dense. Usually 100ms give good results.
-14.2: IQ linear display
+19.1.2: IQ linear display
The yellow trace (I) is the direct trace and the blue trace (Q) is the delayed trace. This can show how symbols differentiate between each other in a sort of eye diagram.
-14.3: IQ polar display
+19.1.3: IQ polar display
This shows the constellation of transition points. You should adjust the frequency shift to center the figure and the maximum deviation and/or discriminator gain to contain the figure within the +/-0.4 square. +/- 0.1 to +/- 0.3 usually give the best results.
-2-FSK or 2-GFSK
+2-FSK or 2-GFSK
This concerns the following formats:
@@ -187,11 +250,14 @@ There are 4 possible points corresponding to the 4 possible transitions. x repre
As you can see the pointer can make all moves except between (-1, -1) and (1,1) hence all vertices between the 4 points can appear except the one between the lower left corner and the upper right corner.
-4-FSK or 4-GFSK
+4-FSK or 4-GFSK
This concerns the following formats:
- DMR
+ - YSF
+ - dPMR
+ - NXDN
![DSD DMR polar](../../../doc/img/DSDdemod_plugin_dmr_polar.png)
@@ -199,14 +265,50 @@ There are 16 possible points corresponding to the 16 possible transitions betwee
Because not all transitions are possible similarly to the 2-FSK case pointer moves from the lower left side of the diagonal to the upper right side are not possible.
-14.4: I gain
+19.1.4: I gain
-You should set the slider to a unity (1) span (+/- 0.5) with no offset.
+You should set the slider to a unity (1) span (+/- 0.5) with no offset. This corresponds to full range in optimal conditions (100%). You can set the slider fully to the left (2) for a +/- 1.0 spn if you don't exactly match these conditions.
-14.5: Q gain
+19.1.5: Q gain
-You should set the slider to a unity (1) span (+/- 0.5) with no offset.
+You should set the slider to a unity (1) span (+/- 0.5) with no offset. This corresponds to full range in optimal conditions (100%). You can set the slider fully to the left (2) for a +/- 1.0 spn if you don't exactly match these conditions.
-14.6: Trigger settings
+19.1.6: Trigger settings
You can leave the trigger free running or set it to I linear with a 0 threshold.
+
+19.2 Symbol synchronization display
+
+This is selected by the transition constellation or symbol synchronization signal toggle (see 7)
+
+![DSD scope](../../../doc/img/DSDdemod_plugin_scope2.png)
+
+19.2.1 IQ linear display
+
+The I trace (yellow) is the discriminator signal and the Q trace (blue) is the symbol synchronization monitor trace that goes to the estimated maximum discriminator signal level when a zero crossing in the symbol synchronization control signal is detected and goes to mid position ((max - min) / 2) of the discriminator signal when a symbol period starts.
+
+The symbol synchronization control signal is obtained by squaring the discriminator signal and passing it through a narrow second order bandpass filter centered on the symbol rate. Its zero crossing should occur close to the first fourth of a symbol period therefore when synchronization is ideal the Q trace (blue) should go down to mid position in the first fourth of the symbol period.
+
+19.2.2: Setting the display
+
+ - On the combo box you should choose IQ (lin) for the primary display and IQ (pol) for secondary display
+ - On the display buttons you should choose the first display (1)
+
+19.2.3: Timing settings
+
+You can choose any trace length with the third slider from the left however 100 ms will give you the best view. You may stretch further the display by reducing the full length to 20 ms or less using the first slider. You can move this 20 ms window across the 100 ms trace with the middle slider.
+
+19.2.4: I gain
+
+You should set the slider to a unity (1) span (+/- 0.5) with no offset. This corresponds to full range in optimal conditions (100%). You can set the slider fully to the left (2) for a +/- 1.0 spn if you don't exactly match these conditions.
+
+19.2.5: Q gain
+
+You should set the slider to a unity (1) span (+/- 0.5) with no offset. This corresponds to full range in optimal conditions (100%). You can set the slider fully to the left (2) for a +/- 1.0 spn if you don't exactly match these conditions.
+
+19.2.6: Trigger settings
+
+You can leave the trigger free running or set it to I linear with a 0 threshold.
+
+
+